मैं संख्याओं के रूप में इनपुट कैसे पढ़ सकता हूं?

Dec 08 2013

क्यों कर रहे हैं 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

जवाब

328 thefourtheye Dec 08 2013 at 10:08

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के परिणामस्वरूप वापस आ जाता है । आप सोच सकते हैं के रूप में एक साथ बना कॉल।inputdatainputraw_inputeval

>>> 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_inputPython 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 डेटा प्रकार का मूल्यांकन और रूपांतरण नहीं करता है, इसलिए आपको स्पष्ट रूप से ints के साथ बदलना होगा 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

47 Noname Dec 08 2013 at 10:09

पायथन 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: "))
29 user1341043 Nov 11 2014 at 07:32

एक ही लाइन में कई पूर्णांक के लिए, mapबेहतर हो सकता है।

arr = map(int, raw_input().split())

यदि संख्या पहले से ही ज्ञात है, (जैसे 2 पूर्णांक), तो आप उपयोग कर सकते हैं

num1, num2 = map(int, raw_input().split())
18 MartijnPieters Dec 08 2013 at 10:09

input()(पायथन 3) और raw_input()(पायथन 2) हमेशा तार लौटाते हैं। परिणाम को पूर्णांक में स्पष्ट रूप से परिवर्तित करें int()

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
12 gumboy Jul 08 2014 at 07:13

एकाधिक प्रश्नों के लिए सिंगल लाइन पर कई पूर्णांकों के इनपुट की आवश्यकता होती है। सबसे अच्छा तरीका है कि संख्याओं के पूरे स्ट्रिंग को एक एक पंक्ति में इनपुट करें और फिर उन्हें पूर्णांक में विभाजित करें। यहाँ एक पायथन 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=' ')

सूची तत्वों को एक सीधी रेखा में प्रिंट करेगा।

6 HemanthSavasere Apr 17 2016 at 23:20

पूर्णांक में बदलें:

my_number = int(input("enter the number"))

इसी प्रकार फ्लोटिंग पॉइंट संख्याओं के लिए:

my_decimalnumber = float(input("enter the number"))
4 ravitanwar Aug 03 2018 at 23:30
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

लूप के लिए कई बार 'एन' चलेगा। दूसरी 'एन' सरणी की लंबाई है। अंतिम विवरण पूर्णांक को एक सूची में मैप करता है और अंतरिक्ष से अलग रूप में इनपुट लेता है। आप लूप के अंत में ऐरे को भी लौटा सकते हैं।

3 Aravind May 23 2014 at 18:32

मुझे 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 को पूर्णांक के रूप में उपयोग करता हूं। उम्मीद है की यह मदद करेगा।

3 Sanyal Jun 30 2015 at 16:16
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
2 TobiasKienzler Nov 23 2016 at 19:19

जबकि अपने उदाहरण में, int(input(...))किसी भी मामले में काम कर देता है, python-futureके builtins.inputलायक विचार है कि बनाता है, क्योंकि दोनों ही अजगर 2 और 3 के लिए सुनिश्चित करें कि आपके कोड काम करता है और की से अक्षम को Python2 का डिफ़ॉल्ट व्यवहार input"चालाक" इनपुट डेटा प्रकार के बारे में होने की कोशिश कर ( builtins.inputमूल रूप से बस जैसा व्यवहार करता है raw_input)।