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


261

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

जवाबों:


313

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_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


क्या कोई और तरीका है, जैसे कोई फंक्शन या कुछ ऐसा जिससे हमें int में कन्वर्ट करने की आवश्यकता न हो 3. int के लिए स्पष्ट रूपांतरण करने के अलावा अन्य में ??
श्रेयन मेहता

@ShreyanMehta evalकाम करेगा, लेकिन उसके लिए मत जाओ जब तक कि आपके पास दबाव के कारण न हों।
thefourtheye

2
@thefourtheye उसके ast.literal_evalलिए कम से कम उपयोग करें । इसकी सुरक्षा संबंधी चिंताएँ नहीं हैं eval
चश्मा

4
मैं इस क्यू एंड ए का उपयोग एक ठग लक्ष्य के रूप में करता हूं, लेकिन हो सकता है कि आप अजगर 3 समाधान के साथ टीडीएलआर जोड़ सकते हैं, अर्थात int(input()... शीर्ष पर? अजगर 2 जीवन के अंत के करीब है और अजगर 3 जानकारी भी IMO दफन है
क्रिस_और जूल 24'18

एक चर के रूप में खेलने को हटाने के बारे में अंतिम बिट इतना सुविधाजनक नहीं है जितना चर खेल अधिक कोड को समझने योग्य बनाता है। और बिना किसी कारण के कोड कैसे बदल सकता है इसके लिए सुझाव देना अच्छा व्यवहार नहीं है। अन्यथा, यह एक अच्छा जवाब है :)
OuuGiii

44

पायथन 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: "))

27

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

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

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

num1, num2 = map(int, raw_input().split())

16

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

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

11

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

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

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

इसी प्रकार फ्लोटिंग पॉइंट नंबरों के लिए:

my_decimalnumber = float(input("enter the number"))

4
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

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


3

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


यह बहुत दिलचस्प लग रहा है। हालाँकि, लूप से बाहर निकलने पर iनष्ट नहीं होता forहै?

@hosch250जब एक लूप बाहर निकलता है, तो सूचकांक चर (यहां, i) का मूल्य रहता है। मैंने इस टुकड़े को आज़माया, और यह सही ढंग से काम करता है।
अरविंद

1
इस तरह के इनपुट हेरफेर के लिए, आप या num1, num2 = map(int, input().split())तो यह जान सकते हैं कि आप कितने पूर्णांकों का सामना करेंगे या nums = list(map(int, input().split()))यदि आप नहीं करते हैं।
301_Moved_Permanently

3
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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.