मैं संख्याओं के रूप में इनपुट कैसे पढ़ सकता हूं?
क्यों कर रहे हैं x
और y
नीचे दिए गए कोड में ints के बजाय तार?
(नोट: पायथन में 2.x का उपयोग raw_input()
। पायथन में 3.x का उपयोग input()
। पायथन 3.x में raw_input()
इसका नाम बदल दिया गया था input()
)
play = True
while play:
x = input("Enter a number: ")
y = input("Enter a number: ")
print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)
if input("Play again? ") == "no":
play = False
जवाब
TLDR
- पायथन 3
input
फ़ंक्शन के साथ प्राप्त डेटा का मूल्यांकन नहीं करता है , लेकिन पायथन 2 काinput
कार्य करता है (निहितार्थ को समझने के लिए अगला भाग पढ़ें)। - अजगर 3 की अजगर 2 के बराबर
input
हैraw_input
समारोह।
अजगर 2.x
उपयोगकर्ता इनपुट प्राप्त करने के लिए दो कार्य थे, कहा जाता है input
और raw_input
। उनके बीच का अंतर, raw_input
डेटा का मूल्यांकन नहीं करता है और जैसा है वैसा ही रिटर्न देता है। लेकिन, input
आपने जो भी दर्ज किया है उसका मूल्यांकन करेंगे और मूल्यांकन का परिणाम वापस आ जाएगा। उदाहरण के लिए,
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
डेटा 5 + 17
का मूल्यांकन किया जाता है और परिणाम होता है 22
। जब यह अभिव्यक्ति का मूल्यांकन करता है 5 + 17
, तो यह पता लगाता है कि आप दो नंबर जोड़ रहे हैं और इसलिए परिणाम भी उसी int
प्रकार का होगा। तो, प्रकार रूपांतरण मुफ्त में किया जाता है और चर में संग्रहीत और संग्रहीत होने 22
के परिणामस्वरूप वापस आ जाता है । आप सोच सकते हैं के रूप में एक साथ बना कॉल।input
data
input
raw_input
eval
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
नोट: जब आप input
पाइथन 2.x का उपयोग कर रहे हैं तो आपको सावधान रहना चाहिए । मैंने बताया कि इस उत्तर में इसका उपयोग करते समय किसी को सावधान क्यों रहना चाहिए ।
लेकिन, raw_input
इनपुट और रिटर्न का मूल्यांकन नहीं करता है क्योंकि यह एक स्ट्रिंग के रूप में है।
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
अजगर 3.x
Python 3.x's input
और Python 2.x raw_input
समान हैं और raw_input
Python 3.x में उपलब्ध नहीं है।
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)
समाधान
अपने प्रश्न का उत्तर देने के लिए, चूंकि Python 3.x डेटा प्रकार का मूल्यांकन और रूपांतरण नहीं करता है, इसलिए आपको स्पष्ट रूप से int
s के साथ बदलना होगा int
, जैसे कि
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
आप किसी भी आधार के नंबरों को स्वीकार कर सकते हैं और उन्हें int
फंक्शन के साथ सीधे बेस -10 में बदल सकते हैं
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
दूसरा पैरामीटर बताता है कि दर्ज किए गए अंकों का आधार क्या है और फिर आंतरिक रूप से इसे समझता है और इसे रूपांतरित करता है। यदि दर्ज किया गया डेटा गलत है तो वह उसे फेंक देगा ValueError
।
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'
उन मानों के लिए जिनमें एक भिन्नात्मक घटक हो सकता है, प्रकार इसके float
बजाय होगा int
:
x = float(input("Enter a number:"))
इसके अलावा, आपके प्रोग्राम को थोड़ा बदला जा सकता है, जैसे
while True:
...
...
if input("Play again? ") == "no":
break
आप play
चर का उपयोग करके छुटकारा पा सकते हैं break
और while True
।
पायथन 3.x में, raw_input
का नाम बदल दिया गया input
और पायथन 2.x input
हटा दिया गया।
इसका मतलब है कि, जैसे raw_input
, input
अजगर 3.x में हमेशा एक स्ट्रिंग वस्तु देता है।
समस्या को ठीक करने के लिए, आपको उन इनपुटों को स्पष्ट रूप से पूर्णांक में बनाना होगा int
:
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
एक ही लाइन में कई पूर्णांक के लिए, map
बेहतर हो सकता है।
arr = map(int, raw_input().split())
यदि संख्या पहले से ही ज्ञात है, (जैसे 2 पूर्णांक), तो आप उपयोग कर सकते हैं
num1, num2 = map(int, raw_input().split())
input()
(पायथन 3) और raw_input()
(पायथन 2) हमेशा तार लौटाते हैं। परिणाम को पूर्णांक में स्पष्ट रूप से परिवर्तित करें int()
।
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
एकाधिक प्रश्नों के लिए सिंगल लाइन पर कई पूर्णांकों के इनपुट की आवश्यकता होती है। सबसे अच्छा तरीका है कि संख्याओं के पूरे स्ट्रिंग को एक एक पंक्ति में इनपुट करें और फिर उन्हें पूर्णांक में विभाजित करें। यहाँ एक पायथन 3 संस्करण है:
a = []
p = input()
p = p.split()
for i in p:
a.append(int(i))
इसके अलावा एक सूची समझ का उपयोग किया जा सकता है
p = input().split("whatever the seperator is")
और स्ट्रिंग से इंट तक सभी इनपुट को बदलने के लिए हम निम्नलिखित करते हैं
x = [int(i) for i in p]
print(x, end=' ')
सूची तत्वों को एक सीधी रेखा में प्रिंट करेगा।
पूर्णांक में बदलें:
my_number = int(input("enter the number"))
इसी प्रकार फ्लोटिंग पॉइंट संख्याओं के लिए:
my_decimalnumber = float(input("enter the number"))
n=int(input())
for i in range(n):
n=input()
n=int(n)
arr1=list(map(int,input().split()))
लूप के लिए कई बार 'एन' चलेगा। दूसरी 'एन' सरणी की लंबाई है। अंतिम विवरण पूर्णांक को एक सूची में मैप करता है और अंतरिक्ष से अलग रूप में इनपुट लेता है। आप लूप के अंत में ऐरे को भी लौटा सकते हैं।
मुझे CodeChef पर एक समस्या हल करते समय पूर्णांक इनपुट लेने की समस्या का सामना करना पड़ा , जहां दो पूर्णांक - अंतरिक्ष द्वारा अलग किए गए - एक पंक्ति से पढ़े जाने चाहिए।
जबकि int(input())
एक पूर्णांक के लिए पर्याप्त है, मुझे दो पूर्णांक इनपुट करने का एक सीधा तरीका नहीं मिला। मैंने यह कोशिश की:
num = input()
num1 = 0
num2 = 0
for i in range(len(num)):
if num[i] == ' ':
break
num1 = int(num[:i])
num2 = int(num[i+1:])
अब मैं num1 और num2 को पूर्णांक के रूप में उपयोग करता हूं। उम्मीद है की यह मदद करेगा।
def dbz():
try:
r = raw_input("Enter number:")
if r.isdigit():
i = int(raw_input("Enter divident:"))
d = int(r)/i
print "O/p is -:",d
else:
print "Not a number"
except Exception ,e:
print "Program halted incorrect data entered",type(e)
dbz()
Or
num = input("Enter Number:")#"input" will accept only numbers
जबकि अपने उदाहरण में, int(input(...))
किसी भी मामले में काम कर देता है, python-future
के builtins.input
लायक विचार है कि बनाता है, क्योंकि दोनों ही अजगर 2 और 3 के लिए सुनिश्चित करें कि आपके कोड काम करता है और की से अक्षम को Python2 का डिफ़ॉल्ट व्यवहार input
"चालाक" इनपुट डेटा प्रकार के बारे में होने की कोशिश कर ( builtins.input
मूल रूप से बस जैसा व्यवहार करता है raw_input
)।