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

时间:2011-02-10 17:00:35

标签: python string

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

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

有没有办法使testVar成为一个字符串而不让我让用户在引号中键入他的响应?即"你好"与你好

如果用户输入Hello,我会收到以下错误:

NameError:name' Hello'未定义

8 个答案:

答案 0 :(得分:250)

使用raw_input()代替input()

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

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

答案 1 :(得分:11)

函数input也会将它刚刚读取的数据评估为python代码,这不是你想要的。

通用方法是将用户输入(来自sys.stdin)视为任何其他文件。尝试

import sys
sys.stdin.readline()

如果您想保持简短,可以使用与raw_input相同的input,但省略评估。

答案 2 :(得分:9)

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

在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 cast 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。

答案 3 :(得分:5)

如果你想在python 2.x中使用输入而不是raw_input,那么这个技巧会派上用场

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

之后,

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

工作得很好。

答案 4 :(得分:2)

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

答案 5 :(得分: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!")

答案 6 :(得分:0)

如果我将来需要迁移到python 3,这是我的失败安全工作。

def _input(msg):
  return raw_input(msg)

答案 7 :(得分:-4)

问题似乎在Python 3.4.2版中得到了解决。

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

工作正常。