Python 2.7获取用户输入并以不带引号的字符串形式进行操作


144

我想从用户那里获取一个字符串,然后对其进行操作。

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

没有我让用户在引号中键入其响应的方法,testVar是否可以成为字符串?即“你好”与你好

如果用户输入Hello,则会出现以下错误:

NameError:名称“ Hello”未定义


请参阅文档。从python 2.7开始,input自动调用eval()
0x45

Answers:


261

使用raw_input()代替input()

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

input()实际上将输入评估为Python代码。我建议不要使用它。 raw_input()返回用户输入的逐字字符串。


107
尽管对于任何使用Python 3进行阅读的人来说,input现在都可以这样工作,并且raw_input消失了。
Thomas K

3
您想在什么情况下让用户将python代码插入您自己的代码中?
JFA 2014年

1
@JFA:我认为这不是input()有用的功能,因此不建议使用它。
Sven Marnach 2014年

11

该函数input还将评估刚读取为python代码的数据,这并不是您真正想要的。

通用方法是将(来自的sys.stdin)用户输入像其他文件一样对待。尝试

import sys
sys.stdin.readline()

如果您想使其简短,可以使用raw_input与相同的方法,input但忽略评估。


2
另外,如果您正在编写一个交互式程序,请考虑导入readline-这将提供类似于bash的功能(历史记录开箱即用,自动完成将需要一些功夫)
Foo Bah

做得好!我使用相同的功能已有很长时间了,并且效果很好。
CFV

11

我们可以raw_input()在Python 2和input()Python 3中使用该函数。默认情况下,输入函数采用字符串格式的输入。对于其他数据类型,您必须强制转换用户输入。

在Python 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

在Python 3中,我们使用input()函数返回用户输入值。

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

如果输入字符串,则为int,float,eval,它将作为字符串输入

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

如果输入用于int cast的字符串 ValueError: invalid literal for int() with base 10:

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

如果输入用于float转换的字符串 ValueError: could not convert string to float

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

如果输入用于eval cast的字符串,那么NameError: name ' ' is not defined 这些错误也适用于Python 2。


5

如果您想在python 2.x中使用input而不是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

这是我的工作,以防万一我将来需要转移到python 3时失败。

def _input(msg):
  return raw_input(msg)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.