पायथन 2.7 उपयोगकर्ता इनपुट प्राप्त कर रहा है और उद्धरण के बिना स्ट्रिंग के रूप में हेरफेर कर रहा है


144

मैं एक उपयोगकर्ता से एक स्ट्रिंग प्राप्त करना चाहता हूं, और फिर इसे हेरफेर करना चाहता हूं।

testVar = input("Ask user for something.")

क्या TestVar के लिए एक तरीका है कि मेरे बिना एक स्ट्रिंग हो सकता है जिसमें उपयोगकर्ता उद्धरणों में अपनी प्रतिक्रिया लिखें? यानी "हैलो" बनाम हैलो

यदि उपयोगकर्ता हैलो में टाइप करता है, तो मुझे निम्नलिखित त्रुटि मिलती है:

NameError: नाम 'Hello' परिभाषित नहीं है


प्रलेखन देखें । अजगर 2.7 के inputरूप में स्वचालित रूप से कॉल करता हैeval()
0x45

जवाबों:


261

raw_input()इसके बजाय का उपयोग करें input():

testVar = raw_input("Ask user for something.")

input()वास्तव में पायथन कोड के रूप में इनपुट का मूल्यांकन करता है। मेरा सुझाव है कि इसका इस्तेमाल कभी न करें। raw_input()उपयोगकर्ता द्वारा दर्ज किए गए शब्दशः स्ट्रिंग लौटाता है।


107
हालांकि पायथन 3 का उपयोग करके इसे पढ़ने वाले किसी के लिए , inputअब इस तरह से काम करता है, और raw_input चला गया है।
थॉमस के

3
आप किस स्थिति में उपयोगकर्ता को अपने कोड में अजगर कोड सम्मिलित करने देना चाहेंगे?
जेएफए

1
@ जेएफए: मुझे नहीं लगता कि input()यह एक उपयोगी कार्य है, और मैं इसका उपयोग करने की सलाह नहीं देता।
स्वेन मार्नाच

11

फ़ंक्शन inputउस डेटा का मूल्यांकन भी करेगा जिसे वह केवल अजगर कोड के रूप में पढ़ता है, जो वास्तव में आप क्या चाहते हैं।

जेनेरिक दृष्टिकोण sys.stdinकिसी भी अन्य फ़ाइल की तरह उपयोगकर्ता इनपुट (से ) का इलाज करना होगा । प्रयत्न

import sys
sys.stdin.readline()

यदि आप इसे कम रखना चाहते हैं, तो आप इसका उपयोग कर सकते हैं raw_inputजो कि समान है inputलेकिन मूल्यांकन को छोड़ देता है।


2
इसके अलावा, यदि आप एक इंटरैक्टिव प्रोग्राम लिख रहे हैं, तो आयात करने पर विचार करें readline- यह बैश के समान सुविधाएं देगा (इतिहास आउट-ऑफ-द-बॉक्स, ऑटो-पूर्णता के लिए कुछ लेगवर्क की आवश्यकता होगी)
फू बाह

बहुत बढ़िया! मैंने उम्र के लिए समान फ़ंक्शन का उपयोग किया है और इसने कभी अच्छा काम किया है।
सीएफवी

11

हम raw_input()पायथन 2 में फ़ंक्शन और पायथन 3 में फ़ंक्शन का उपयोग कर सकते हैं input()। डिफ़ॉल्ट रूप से इनपुट फ़ंक्शन स्ट्रिंग प्रारूप में एक इनपुट लेता है। अन्य डेटा प्रकार के लिए आपको उपयोगकर्ता इनपुट डालना होगा।

पायथन 2 में हम raw_input()फंक्शन का उपयोग करते हैं। यह उपयोगकर्ता को कुछ इनपुट टाइप करने और प्रेस करने के लिए इंतजार करता है returnऔर हमें हमारी इच्छा डेटा प्रकार के रूप में कास्टिंग करके एक चर में मूल्य को संग्रहीत करने की आवश्यकता है। टाइप कास्टिंग का उपयोग करते समय सावधान रहें

x = raw_input("Enter a number: ") #String input

x = int(raw_input("Enter a number: ")) #integer input

x = float(raw_input("Enter a float number: ")) #float input

x = eval(raw_input("Enter a float number: ")) #eval input

पायथन 3 में हम इनपुट () फ़ंक्शन का उपयोग करते हैं जो उपयोगकर्ता इनपुट मूल्य देता है।

x = input("Enter a number: ") #String input

यदि आप एक स्ट्रिंग दर्ज करते हैं, तो int, float, eval यह स्ट्रिंग इनपुट के रूप में ले जाएगा

x = int(input("Enter a number: ")) #integer input

यदि आप इंट कास्ट के लिए एक स्ट्रिंग दर्ज करते हैं ValueError: invalid literal for int() with base 10:

x = float(input("Enter a float number: ")) #float input

यदि आप फ्लोट कास्ट के लिए एक स्ट्रिंग दर्ज करते हैं ValueError: could not convert string to float

x = eval(input("Enter a float number: ")) #eval input

यदि आप eval कलाकारों के लिए एक स्ट्रिंग दर्ज करते हैं, तो NameError: name ' ' is not defined वह त्रुटि भी पायथन 2 के लिए लागू होती है।


5

यदि आप python 2.x में raw_input के बजाय इनपुट का उपयोग करना चाहते हैं, तो यह ट्रिक काम आएगी

    if hasattr(__builtins__, 'raw_input'):
      input=raw_input

जिसके बाद,

testVar = input("Ask user for something.")

ठीक काम करेगा।



0

फिक्स के साथ मेरा काम कोड:

import random
import math
print "Welcome to Sam's Math Test"
num1= random.randint(1, 10)
num2= random.randint(1, 10)
num3= random.randint(1, 10)
list=[num1, num2, num3]
maxNum= max(list)
minNum= min(list)
sqrtOne= math.sqrt(num1)

correct= False
while(correct == False):
    guess1= input("Which number is the highest? "+ str(list) + ": ")
    if maxNum == guess1:
        print("Correct!")
        correct = True
    else:
        print("Incorrect, try again")

correct= False
while(correct == False):
guess2= input("Which number is the lowest? " + str(list) +": ")
if minNum == guess2:
     print("Correct!")
     correct = True
else:
    print("Incorrect, try again")

correct= False
while(correct == False):
    guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ")
    if sqrtOne >= 2.0 and str(guess3) == "y":
        print("Correct!")
        correct = True
    elif sqrtOne < 2.0 and str(guess3) == "n":
        print("Correct!")
        correct = True
    else:
        print("Incorrect, try again")

print("Thanks for playing!")

0

अगर भविष्य में मुझे अजगर 3 में स्थानांतरित करने की आवश्यकता होगी, तो यह मेरे काम के आसपास सुरक्षित नहीं है।

def _input(msg):
  return raw_input(msg)

-6

इस मुद्दे को पायथन संस्करण 3.4.2 में हल किया जा रहा है।

testVar = input("Ask user for something.")

ठीक काम करेंगे।


3
पायथन 3.x inputपायथन 2.x के बराबर है raw_input(देखें docs.python.org/3.0/whatsnew/3.0.html#builtins ); यह 2.x के लिए विशिष्ट मुद्दा है।
jonrsharpe
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.