148

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

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

有没有办法让 testVar 成为一个字符串,而无需我让用户用引号输入他的响应?即“你好”与你好

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

NameError:未定义名称“Hello”

4

8 回答 8

266

使用raw_input()代替input()

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

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

于 2011-02-10T17:01:33.653 回答
13

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

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

import sys
sys.stdin.readline()

如果你想保持简短,你可以使用raw_inputwhich 相同input但省略评估。

于 2011-02-10T17:02:00.767 回答
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

如果您输入一个字符串进行浮点转换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。

于 2017-08-30T11:51:28.117 回答
5

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

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

之后,

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

会工作得很好。

于 2015-11-18T11:28:11.807 回答
2
testVar = raw_input("Ask user for something.")
于 2011-02-10T17:04:18.927 回答
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!")
于 2016-03-31T02:18:40.947 回答
0

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

def _input(msg):
  return raw_input(msg)
于 2017-01-23T05:43:02.410 回答
-6

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

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

会正常工作。

于 2014-11-20T09:00:44.340 回答