अपने प्रोग्राम के यूज़र से इनपुट लेना
input() से यूज़र का टाइप किया हुआ पढ़ना, वह हमेशा str क्यों होता है, और int() व float() से बदलते समय कौन-से एरर आते हैं।
आप कैसे सीखना चाहते हैं?
वह समस्या जिसे हम हल कर रहे हैं
अब तक हमारे हर प्रोग्राम के नंबर फ़ाइल के अंदर ही लिखे थे। किसी दूसरे नंबर से चलाना हो तो फ़ाइल खोलकर बदलनी पड़ती थी।
असली प्रोग्राम ऐसे नहीं चलते। प्रोग्राम पूछता है, और यूज़र जवाब देता है।
पायथन में पूछने का काम input() का है। सीखने में एक मिनट लगता है। लेकिन इसके साथ एक नियम आता है, जो हर नए प्रोग्रामर को कम से कम एक बार अटकाता है: input() जो लौटाता है, वह हमेशा स्ट्रिंग होती है — चाहे यूज़र ने साफ़-साफ़ नंबर ही क्यों न लिखा हो। यह एक नियम न पता हो, तो हिसाब वाला पहला प्रोग्राम ही टूट जाता है।
इस अध्याय के बाद आप यह कर पाएँगे
input()से यूज़र का लिखा हुआ लेना, साथ में एक साफ़ सवाल दिखाना- बताना कि इनपुट हमेशा
strक्यों होता है int()औरfloat()से उसे नंबर में बदलनाTypeError,ValueErrorऔर बिना एरर वाले ग़लत जवाब — इन तीनों का फ़र्क़ समझना- इनपुट साफ़ कर लेना, ताकि एक फ़ालतू स्पेस से प्रोग्राम न टूटे
पहले यह आना चाहिए: स्ट्रिंग के साथ काम — इंडेक्सिंग, स्लाइसिंग और f-strings।
input() कैसे काम करता है
name = input("What is your name? ")
print(f"Hello, {name}!")चलाने पर:
What is your name? Rafi
Hello, Rafi!तीन चीज़ें हुईं। input() ने ब्रैकेट के अंदर वाला सवाल टर्मिनल में दिखाया; फिर रुककर इंतज़ार किया, जब तक यूज़र ने कुछ लिखकर Enter नहीं दबाया; फिर जो लिखा गया था वह लौटा दिया, और हमने उसे name में रख लिया।
ध्यान दीजिए, सवाल के आख़िर में एक स्पेस है — "What is your name? "। वह स्पेस न हो तो यूज़र का लिखा सवाल से चिपक जाता है, और भद्दा दिखता है।
ये प्रोग्राम टर्मिनल में ही चलाने हैं।input()किसी के टाइप करने का इंतज़ार करता है, इसलिए किसी वेबसाइट पर या एडिटर के प्रीव्यू में यह काम नहीं करता। अपने टर्मिनल मेंpython ask.pyलिखकर चलाइए — इस कोर्स में हमेशा ऐसे ही चलेगा।
वह नियम जो सबको एक बार अटकाता है
age = input("Your age: ")
print(type(age))
print("Next year:", age + 1)Your age: 22
<class 'str'>
Traceback (most recent call last):
File "D:\python-lab\lesson-07\ask.py", line 3, in <module>
print("Next year:", age + 1)
~~~~^~~
TypeError: can only concatenate str (not "int") to strयूज़र ने 22 लिखा। स्क्रीन पर नंबर ही दिख रहा है। लेकिन type(age) कह रहा है str। (File वाली लाइन में आपकी फ़ाइल का पूरा पाथ होता है, इसलिए आपके कंप्यूटर पर वह अलग दिखेगा।)
सोचें तो वजह सीधी है: कीबोर्ड से अक्षर आते हैं, नंबर नहीं। यूज़र 22, abc, 12.5 — कुछ भी लिख सकता है। input() ख़ुद अंदाज़ा लगा सकता था कि "यह तो नंबर है, बदल देता हूँ" — लेकिन तब एक ही कोड कभी str लौटाता और कभी int, और पहले से बताया नहीं जा सकता कि क्या आएगा। इसलिए पायथन एक ही नियम रखता है: हमेशा स्ट्रिंग। बदलना आपकी ज़िम्मेदारी है।
int() और float()
age = input("Your age: ")
age = int(age)
print(type(age))
print("Next year:", age + 1)Your age: 22
<class 'int'>
Next year: 23दोनों क़दम एक लाइन में भी लिखे जा सकते हैं, और आमतौर पर ऐसे ही लिखे जाते हैं:
age = int(input("Your age: "))
print("Next year:", age + 1)अंदर से बाहर की ओर पढ़िए: input() स्ट्रिंग लाया, int() ने उसे पूर्णांक (whole number) में बदला, फिर वह age में गया।
दशमलव चाहिए तो float():
price = float(input("Price: "))
print("With tax:", round(price * 1.15, 2))Price: 249.50
With tax: 286.92कौन-सा कब: जो चीज़ें गिनी जाती हैं उनके लिए int (उम्र, गिनती, मात्रा), जो चीज़ें नापी जाती हैं उनके लिए float (क़ीमत, वज़न, औसत)।
दो एरर, और एक ग़लती जो एरर नहीं देती
कन्वर्ज़न भूल जाएँ या ग़लत इनपुट आए, तो तीन अलग चीज़ें हो सकती हैं। नाम आपस में उलझाना आसान है, इसलिए इन्हें अलग-अलग देख लीजिए।
TypeError — टाइप ही ग़लत है। कन्वर्ज़न भूलकर स्ट्रिंग में नंबर जोड़ने की कोशिश की:
qty = input("Quantity: ")
print(qty + 2)Quantity: 3
Traceback (most recent call last):
File "D:\python-lab\lesson-07\ask.py", line 2, in <module>
print(qty + 2)
~~~~^~~
TypeError: can only concatenate str (not "int") to strqty में स्ट्रिंग "3" है, और स्ट्रिंग के साथ + से सिर्फ़ दूसरी स्ट्रिंग जोड़ी जा सकती है, नंबर नहीं। पायथन यह अंदाज़ा नहीं लगाता कि आप जोड़ (addition) चाहते थे या स्ट्रिंग जोड़ना — इसलिए रुक जाता है।
कोई एरर नहीं — बस ग़लत जवाब। अब + की जगह * लिखिए, कन्वर्ज़न अब भी नहीं है:
qty = input("Quantity: ")
print(qty * 2)Quantity: 3
33इस बार कोई एरर नहीं आया। "3" * 2 का मतलब है स्ट्रिंग दो बार — "33"। प्रोग्राम चला, जवाब ग़लत। चुपचाप ग़लत जवाब एरर से भी बुरा है, क्योंकि कोई आपको रोककर बताता नहीं।
ValueError — टाइप सही है, लेकिन अंदर की स्ट्रिंग नंबर नहीं है:
age = int(input("Your age: "))Your age: twenty
Traceback (most recent call last):
File "D:\python-lab\lesson-07\ask.py", line 1, in <module>
age = int(input("Your age: "))
^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base 10: 'twenty'int() काम करने को तैयार है, लेकिन 'twenty' के साथ नहीं कर सकता। मैसेज वजह भी बता रहा है — कौन-सी वैल्यू नहीं मानी गई, वह आख़िर में कोटेशन के अंदर लिखी है।
एक बारीक लेकिन असली जाल:
count = int(input("Count: "))12.5 लिखेंगे तो यह भी ValueError देगा — क्योंकि int() दशमलव वाली स्ट्रिंग नहीं लेता। दशमलव आने की संभावना हो तो float() से लीजिए, फिर ज़रूरत हो तो int() कीजिए।
इन एरर को रोकने का पूरा तरीक़ा अभी हमारे पास नहीं है — उसके लिए शर्तें (conditions) और लूप दोनों चाहिए, और दोनों आगे के अध्यायों में आ रहे हैं। अभी के लिए एरर को पहचानना और मैसेज पढ़ना सीख लीजिए।
इनपुट साफ़ कर लीजिए
लोग टाइप करते समय फ़ालतू स्पेस डाल देते हैं, बड़े-छोटे अक्षर मिला देते हैं। पिछले अध्याय के मेथड यहीं काम आते हैं:
full_name = input("Name: ").strip().title()
answer = input("Continue? (yes/no) ").strip().lower()
print(f"Name is {full_name}")
print(f"Answer is {answer}")Name: rafi ahmed
Continue? (yes/no) YES
Name is Rafi Ahmed
Answer is yesinput() से आई स्ट्रिंग पर .strip() चलाने की आदत डाल लीजिए। यूज़र के एक फ़ालतू स्पेस से प्रोग्राम टूटने की कोई वजह नहीं है।
एक पूरा उदाहरण
bill.py:
# Ask for one order and print a small bill
print("--- Order entry ---")
customer = input("Customer name : ").strip().title()
item = input("Item : ").strip()
quantity = int(input("Quantity : "))
unit_price = float(input("Unit price : "))
subtotal = quantity * unit_price
tax = subtotal * 0.05
total = subtotal + tax
print()
print("--- Bill ---")
print(f"Customer : {customer}")
print(f"Item : {item} x {quantity}")
print(f"Subtotal : {subtotal:.2f}")
print(f"Tax (5%) : {tax:.2f}")
print(f"Total : {total:.2f}")--- Order entry ---
Customer name : rafi ahmed
Item : notebook
Quantity : 4
Unit price : 85.50
--- Bill ---
Customer : Rafi Ahmed
Item : notebook x 4
Subtotal : 342.00
Tax (5%) : 17.10
Total : 359.10चार इनपुट, चार तरह का बर्ताव: नाम साफ़ करके सजाया गया, सामान का नाम सिर्फ़ साफ़ किया गया, मात्रा पूर्णांक में, और क़ीमत दशमलव में। हर इनपुट के लिए आपको दो चीज़ें तय करनी होती हैं — कौन-सा टाइप चाहिए, और उसे कैसे साफ़ करना है।
कुछ टूटी हुई हालतें और उनका हल
TypeError: can only concatenate str (not "int") to str कन्वर्ज़न छूट गया है। int(input(...)) या float(input(...)) लिखिए।
गुणा करना चाहता था, लेकिन स्ट्रिंग बार-बार प्रिंट हो रही है "3" * 2 देता है "33"। वैल्यू को int में नहीं बदला गया। एरर नहीं आता, इसीलिए यह बग ख़तरनाक है — शक हो तो type() प्रिंट करके देखिए।
ValueError: invalid literal for int() with base 10 यूज़र ने जो लिखा वह पूर्णांक नहीं है — या तो कोई शब्द, या दशमलव, या कुछ भी नहीं (सिर्फ़ Enter)। दशमलव की संभावना हो तो float() इस्तेमाल कीजिए।
प्रोग्राम कुछ दिखाए बिना रुका हुआ है वह आपके इनपुट का इंतज़ार कर रहा है। input() में कोई सवाल न दें तो स्क्रीन पर कुछ नहीं आता, और लगता है प्रोग्राम अटक गया। हमेशा एक सवाल दीजिए।
एडिटर के अंदर चलाने पर input() काम नहीं कर रहा कुछ एडिटर या ऑनलाइन ब्लॉक में इनपुट नहीं लिया जा सकता। टर्मिनल खोलकर python bill.py से चलाइए।
Enter दबाने के बाद एक फ़ालतू ख़ाली लाइन आ रही है input() आपका लिखा लेता है, लेकिन आख़िर की नई लाइन नहीं रखता। फ़ालतू ख़ाली लाइन दिखे तो वह लगभग पक्का आपके अपने किसी print() से आ रही है।
चरण 4 / 6 — अनुमान
अपनी समझ की जाँच करें
यूज़र ने 42 लिखकर Enter दबाया। दूसरी लाइन क्या प्रिंट करेगी?
value = input("Number: ")
print(type(value))- A<class 'input'>
- B<class 'int'>
- C<class 'float'>
- D<class 'str'>
यूज़र ने 3 लिखा, और प्रोग्राम ने प्रिंट किया Doubled: 33। कोई एरर नहीं आया। ऐसा क्यों हुआ, और हल क्या है?
qty = input("Quantity: ")
print("Doubled:", qty * 2)- A`qty * 2` की जगह `qty + qty` लिखने से ठीक हो जाएगा
- B`print` में कॉमा की जगह `+` लगाना होगा
- C`input()` नंबर नहीं ले सकता, इसलिए कोई दूसरा फ़ंक्शन चाहिए
- D`qty` एक `str` है, और स्ट्रिंग को नंबर से गुणा करने पर वह दोहराई जाती है — `int(qty) * 2` लिखना होगा
यूज़र 12.5 लिखे तो क्या होगा?
count = int(input("Count: "))
print(count + 1)- A`ValueError` — `int()` दशमलव वाली स्ट्रिंग नहीं लेता; ज़रूरत हो तो `float()` से लेना होगा
- B`count` होगा `12`, क्योंकि `int()` दशमलव के बाद का हिस्सा काट देता है
- C`TypeError` — क्योंकि इनपुट और वेरिएबल का टाइप मेल नहीं खाता
- D`count` होगा `13`, क्योंकि `int()` सबसे पास वाले पूर्णांक में राउंड करता है
उत्तर देने के लिए अकाउंट आवश्यक है
अपने उत्तर जाँचने के लिए साइन इन करें
प्रश्न ऊपर दिए गए हैं, और मन में उत्तर सोचना ही मुख्य कार्य है। सही उत्तर, व्याख्या और तीन-स्तरीय संकेत देखने के लिए साइन इन करें।
आपकी बारी
travel.py नाम की एक फ़ाइल लिखिए, जो चार सवाल पूछे और एक छोटा हिसाब दिखाए:
- यात्री का नाम (साफ़ करके, पहला अक्षर बड़ा)
- कितने यात्री (पूर्णांक)
- प्रति यात्री किराया (दशमलव)
- छूट की दर प्रतिशत में (दशमलव)
फिर प्रिंट करे — कुल किराया, छूट की रक़म, और आख़िर में कितना देना है, तीनों दशमलव के बाद दो अंकों तक।
काम पूरा होने पर तीन बार जान-बूझकर तोड़ने की कोशिश कीजिए:
- यात्रियों की संख्या में
twoलिखिए — कौन-सा एरर आता है, और मैसेज क्या कह रहा है? - यात्रियों की संख्या में
2.5लिखिए — क्या होता है, और क्यों? - नाम के आगे-पीछे कुछ स्पेस डालिए — क्या आउटपुट सही रहता है?
आख़िरी सवाल का जवाब अगर "हाँ" है, तो आप अभी से एक आम शुरुआती से बेहतर कोड लिख रहे हैं। बाक़ी दोनों का हल शर्तें और लूप सीखने के बाद आएगा।
इस मिशन में और भी है
ऊपर आपने जो पढ़ा वही पूरा मिशन है — उसमें से कुछ नहीं काटा गया। प्रो इसमें जोड़ता है:
- भीतर वास्तव में क्या होता है — पायथन इसे कैसे निष्पादित करता है
- अभ्यास का संपूर्ण समाधान, चरण-दर-चरण स्पष्टीकरण के साथ
- कठिन अतिरिक्त अभ्यास
- इस विषय पर साक्षात्कार में क्या पूछा जाता है और उसका आदर्श उत्तर
चरण 6 / 6
चुनौती — अध्याय की क्विज़
सरल से कठिन — दस प्रश्न, अंतिम वाले जानबूझकर चुनौतीपूर्ण बनाए गए हैं।
क्विज़ देने के लिए साइन इन करें