我正在尝试创建一个 for 循环,提示用户一项爱好 3 次,然后将每个爱好附加到爱好中。
这是我到目前为止所想到的:
hobbies = []
for tries in range(3):
hobby = raw_input(input("what's your favorite hobby?: "))
hobbies.append(hobby)
在用户输入提示处输入响应后,假设我的响应是“竞争性饮食”,我在终端中收到以下错误:
Traceback (most recent call last):
File "hobbyprompt.py", line 12, in <module>
hobby = raw_input(input("what's your favorite hobby?: "))
File "<string>", line 1, in <module>
NameError: name 'competitive eating' is not defined
我确信我在这里犯了一个非常愚蠢的错误,但我似乎无法弄清楚我做错了什么。
input
相当于 eval(raw_input)
。在你的例子中它是完全多余的。只需放下它并仅保留 raw_input
:
hobby = raw_input("what's your favorite hobby?: ")
编辑:
为了回答评论中的问题,
input
获取字符串并尝试将其计算为Python表达式(有关详细信息,请参阅eval
的文档)。由于“竞争性饮食”不是您已经定义的变量,因此无法对其进行评估,因此NameError
。
您只需要
raw_input
,而不是 input
后跟 raw_input
。使用
hobby = raw_input("what's your favorite hobby?: ")
在 python 3.x 中,
input
的作用与 raw_input
在之前版本中的作用相同。但在 Python 3 之前,input
除了从 stdin 读取一行之外,还对该行进行计算,就好像它是一个有效的 Python 表达式一样。 raw_input
是替代方案,因此您应该使用其中之一,而不是同时使用两者。这里,raw_input
是合适的。