वेरिएबल और टाइप — प्रोग्राम कैसे याद रखता है
वेरिएबल में वैल्यू स्टोर करना, नाम रखने के नियम, और चार बेसिक टाइप — int, float, str, bool — साथ में वह एरर जो शुरुआत में सबसे ज़्यादा आता है।
आप कैसे सीखना चाहते हैं?
वह समस्या जिसे हम हल कर रहे हैं
अब तक हमारे प्रोग्राम कुछ भी याद नहीं रख पाते थे। जो प्रिंट हो गया, वह चला गया।
लेकिन असली काम ऐसे नहीं होता। बिलिंग के प्रोग्राम में कीमत एक बार कैलकुलेट होती है और तीन जगह काम आती है। रिपोर्ट में कुल संख्या पहले निकालनी होती है और बाद में इस्तेमाल करनी होती है। प्रोग्राम को याद रखना पड़ता है।
और साथ में दूसरी समस्या — पिछले अध्याय में आपने देखा कि "2" + "3" ने 23 दिया, लेकिन 2 + 3 ने 5 दिया। एक ही निशान, दो तरह का बर्ताव। क्योंकि पायथन की नज़र में उन दोनों चीज़ों की किस्म अलग है। इसी किस्म को टाइप कहते हैं, और शुरुआत के ज़्यादातर एरर यहीं से आते हैं।
इस अध्याय के अंत तक आप कर पाएंगे
- वेरिएबल में वैल्यू स्टोर करना और बाद में उसे बदलना
- ऐसे नाम देना जो पायथन माने, और जिन्हें पढ़कर इंसान समझ सके
- चार बेसिक टाइप पहचानना:
int,float,str,bool type()से किसी भी वैल्यू का टाइप देखनाTypeErrorपढ़कर समझना कि समस्या ठीक कहां है
पहले से क्या आना चाहिए: print से देखना, कमेंट से समझाना।
वेरिएबल एक नाम है
city_count = 4इस लाइन को दाएं से बाएं पढ़ें: वैल्यू 4 बनी, और उस पर city_count नाम का एक लेबल लगा दिया गया। अब से city_count लिखते ही पायथन वह वैल्यू ला देगा।
city_count = 4
print("Cities:", city_count)
print("Double:", city_count * 2)Cities: 4
Double: 8=का मतलब बराबर नहीं है। गणित मेंx = 4एक दावा है — x और 4 बराबर हैं। पायथन में=एक निर्देश है: "यह वैल्यू उस नाम में स्टोर करो।" इसीलिएtotal = total + 5गणित में नामुमकिन लगता है, लेकिन पायथन में बिल्कुल सामान्य है — इसका मतलब है, "totalमें अभी जो है उसमें 5 जोड़कर रिज़ल्ट फिर सेtotalमें रखो।" दो चीज़ें बराबर हैं या नहीं, यह चेक करने का अलग निशान है,==, जिसे हम आगे देखेंगे।
वैल्यू बदलना
किसी वेरिएबल को नई वैल्यू देने पर पुरानी वैल्यू नहीं रहती:
stock = 20
print("Before:", stock)
stock = stock - 3
print("After:", stock)Before: 20
After: 17देखिए, जब दो नाम एक ही वैल्यू की तरफ़ हों तो क्या होता है:
a = 10
b = a
a = 99
print(a, b)99 10b = a लाइन का मतलब है: a जिस वैल्यू पर लगा है, b का लेबल भी उसी वैल्यू पर लगा दो। अब दोनों नाम उसी 10 की तरफ़ इशारा करते हैं। फिर a = 99 लिखने पर सिर्फ़ a का लेबल हटकर नई वैल्यू 99 पर लगता है — b जहां था वहीं रहता है, 10 पर। एक नाम को नई वैल्यू देने से सिर्फ़ वही नाम हटता है, दूसरा नहीं।
यह तस्वीर दिमाग में रखें: दो नाम एक ही वैल्यू की तरफ़ इशारा कर सकते हैं। नंबर या स्ट्रिंग के साथ इससे कोई दिक्कत नहीं होती, लेकिन आगे जब आप लिस्ट सीखेंगे — जिसके अंदर की चीज़ें उसी जगह बदली जा सकती हैं — तब यही बात बहुत ज़रूरी हो जाएगी।
नाम रखने के नियम
पायथन जो नहीं मानेगा:
- नंबर से शुरुआत:
2nd_priceनहीं चलेगा,price_2चलेगा - बीच में डैश:
total-priceनहीं चलेगा, पायथन इसे घटाना समझता है - बीच में स्पेस:
total priceनहीं चलेगा - पायथन के कीवर्ड (keyword):
class,for,if,import,return,None— इन्हें नाम के रूप में इस्तेमाल नहीं कर सकते
जो पायथन मानेगा, लेकिन करना नहीं चाहिए:
x1 = 4500 # clear today, meaningless in three weeks
Total_Price = 4500 # legal Python, but not the Python convention
l = 4500 # lowercase L and the digit one look almost identicalप्रोफ़ेशनल पायथन का तरीका है snake_case — छोटे अक्षर, और शब्दों के बीच अंडरस्कोर:
total_price = 4500
customer_name = "Rafi"
items_in_cart = 3नामों पर समय लगाना बेकार लग सकता है, लेकिन कोड एक-दो बार लिखा जाता है और बीस बार पढ़ा जाता है। जो नाम पढ़ते ही समझ आ जाए, वह एक कमेंट जितना काम करता है।
चार बेसिक टाइप
items = 7 # int — a whole number
price = 249.50 # float — a number with a decimal point
name = "Rafi" # str — text, inside quotes
is_paid = True # bool — only True or False
print(type(items))
print(type(price))
print(type(name))
print(type(is_paid))<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>type() आपका शक दूर करने वाला टूल है। कोई वेरिएबल अजीब बर्ताव करे, तो पहला काम — उसका टाइप प्रिंट करके देखें। ज़्यादातर बार जवाब वहीं मिल जाता है।
दो छोटी लेकिन ज़रूरी बातें:
True और False बड़े अक्षर से शुरू होते हैं। true लिखें तो पायथन उसे एक वेरिएबल का नाम समझेगा और कहेगा कि वह इस नाम को नहीं जानता।
"7" और 7 एक चीज़ नहीं हैं। पहला स्ट्रिंग है, दूसरा नंबर। दिखने में एक जैसे, लेकिन पायथन के लिए बिल्कुल अलग:
a = 7
b = "7"
print(type(a), type(b))
print(a * 3)
print(b * 3)<class 'int'> <class 'str'>
21
777वह एरर, जो सबको आता है
age = "22"
print(age + 1)Traceback (most recent call last):
File "C:\Users\Rafi\python-lab\lesson-04\demo.py", line 2, in <module>
print(age + 1)
~~~~^~~
TypeError: can only concatenate str (not "int") to strमैसेज डराने वाला लगता है, लेकिन असल में यह साफ़-साफ़ बता रहा है: str के साथ सिर्फ़ str जोड़ा जा सकता है, int नहीं। यानी पायथन समझ नहीं पा रहा कि आप जोड़ना (add) चाहते हैं या चिपकाना — इसलिए उसने अंदाज़ा नहीं लगाया, रुक गया।
File वाली लाइन में आपकी अपनी फ़ाइल का पूरा पाथ दिखेगा, इसलिए आपके कंप्यूटर पर वह अलग होगा। बाकी लाइनें वही रहेंगी।
एरर मैसेज नीचे की लाइन से ऊपर की तरफ़ पढ़ें। आखिरी लाइन बताती है क्या समस्या है, उसके ऊपर वाली लाइन बताती है कहां। शुरुआत में बहुत लोग एरर देखते ही घबराकर पूरा छोड़ देते हैं; लेकिन पायथन के एरर मैसेज असल में स्क्रीन पर मिलने वाला सबसे मददगार टेक्स्ट हैं।
समाधान — नंबर को नंबर बना लें:
age = "22"
print(int(age) + 1)23int() स्ट्रिंग को पूर्ण संख्या में बदल देता है। यह कब काम आता है और कब फ़ेल होता है, यह आगे input() वाले अध्याय में विस्तार से आएगा — क्योंकि वहां यह समस्या हर बार आती है।
एक पूरा उदाहरण
invoice.py:
# Invoice for a single order, all figures in one place
customer_name = "Rafi"
unit_price = 249.50
quantity = 3
is_member = True
subtotal = unit_price * quantity
discount = 50.0
total = subtotal - discount
print("Customer :", customer_name)
print("Quantity :", quantity)
print("Subtotal :", subtotal)
print("Discount :", discount)
print("Total :", total)
print("Member :", is_member)Customer : Rafi
Quantity : 3
Subtotal : 748.5
Discount : 50.0
Total : 698.5
Member : Trueयहां असली फ़ायदा देखें: कीमत बदलनी हो तो सिर्फ़ unit_price वाली लाइन बदलेंगे, और नीचे का हर कैलकुलेशन अपने आप ठीक हो जाएगा। अगर नंबर सीधे print के अंदर लिख दिए होते, तो हर बार हर जगह ढूंढकर बदलना पड़ता — और एक जगह छूट गई तो रिपोर्ट गलत।
जब कुछ टूट जाए
NameError: name 'total' is not defined जो नाम आप इस्तेमाल कर रहे हैं, उसमें अभी तक कोई वैल्यू नहीं रखी गई — या फिर स्पेलिंग में गलती है। पायथन total और totl को दो अलग नाम मानता है। ध्यान रखें, छोटे-बड़े अक्षर भी अलग हैं: Total और total एक नहीं हैं।
TypeError: can only concatenate str (not "int") to str आपने स्ट्रिंग के साथ नंबर जोड़ने की कोशिश की। या तो int() से स्ट्रिंग को नंबर बनाएं, या print("Age:", age) की तरह कॉमा लगाएं — कॉमा देने पर print खुद हर टाइप संभाल लेता है।
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='? नाम में डैश हो तो यह आता है। total-price = 5 लाइन में पायथन एक कैलकुलेशन देखता है जो total में से price घटाता है, और किसी कैलकुलेशन में वैल्यू स्टोर नहीं की जा सकती। अंडरस्कोर लगाएं: total_price।
SyntaxError: invalid syntax आपने पायथन के किसी कीवर्ड को नाम बनाने की कोशिश की, जैसे class = 10। मैसेज कीवर्ड का ज़िक्र नहीं करता, बस = के नीचे एक ^ दिखाता है — इसलिए नाम कीवर्ड है या नहीं, यह आपको खुद देखना होगा। कोई दूसरा नाम दें: class_name, grade।
NameError: name 'true' is not defined. Did you mean: 'True'? True और False बड़े अक्षर से शुरू होते हैं।
चरण 4 / 6 — अनुमान
अपनी समझ की जाँच करें
यह क्या प्रिंट करेगा?
a = 10
b = a
a = 99
print(a, b)- A10 99
- B10 10
- C99 99
- D99 10
इनमें से कौन सा पायथन में वैलिड वेरिएबल नाम है?
- Aclass
- Bitem-2
- C2nd_item
- Ditem_2
इस प्रोग्राम को चलाने पर TypeError आता है। ठीक-ठीक क्या गलत है, और समाधान क्या है?
age = "22"
next_year = age + 1
print("Next year:", next_year)- A`next_year` नाम को इस्तेमाल से पहले डिक्लेयर नहीं किया गया
- B`age` में स्ट्रिंग रखी गई है, नंबर नहीं — `age = 22` लिखना होगा, या `int(age) + 1` करना होगा
- C`age + 1` की जगह `age + "1"` लिखने से 23 मिल जाएगा
- D`print` में कॉमा की जगह `+` देना होगा
उत्तर देने के लिए अकाउंट आवश्यक है
अपने उत्तर जाँचने के लिए साइन इन करें
प्रश्न ऊपर दिए गए हैं, और मन में उत्तर सोचना ही मुख्य कार्य है। सही उत्तर, व्याख्या और तीन-स्तरीय संकेत देखने के लिए साइन इन करें।
आपकी बारी
shipping.py नाम की एक फ़ाइल लिखें, जिसमें हो:
- चार वेरिएबल — एक
int, एकfloat, एकstr, एकbool— सभी के नाम snake_case में और मतलब वाले - कम से कम एक कैलकुलेशन, जो दो वेरिएबल इस्तेमाल करके तीसरा वेरिएबल बनाए
- चारों वेरिएबल का टाइप
type()से प्रिंट करना - एक वेरिएबल, जिसे पहले एक वैल्यू दी जाए और फिर वही बदली जाए — और दोनों स्टेप पर वैल्यू प्रिंट हो
फिर जानबूझकर तोड़ें: एक str वेरिएबल के साथ + 1 लिखकर चलाएं। पूरा एरर मैसेज पढ़ें, खासकर आखिरी लाइन। यह मैसेज आप आगे बहुत बार देखेंगे — आज एक बार खुद बुला लिया, तो बाद में जाना-पहचाना लगेगा।
इस मिशन में और भी है
ऊपर आपने जो पढ़ा वही पूरा मिशन है — उसमें से कुछ नहीं काटा गया। प्रो इसमें जोड़ता है:
- भीतर वास्तव में क्या होता है — पायथन इसे कैसे निष्पादित करता है
- अभ्यास का संपूर्ण समाधान, चरण-दर-चरण स्पष्टीकरण के साथ
- कठिन अतिरिक्त अभ्यास
- इस विषय पर साक्षात्कार में क्या पूछा जाता है और उसका आदर्श उत्तर
चरण 6 / 6
चुनौती — अध्याय की क्विज़
सरल से कठिन — दस प्रश्न, अंतिम वाले जानबूझकर चुनौतीपूर्ण बनाए गए हैं।
क्विज़ देने के लिए साइन इन करें