为什么我一直收到此错误?我猜raw_input()被读作输入(),它不能将用户输入视为字符串。我不知道如何改变它以便它可以工作。而且,不,问题是:“Python 2.7获取用户输入并以字符串形式操作而不引用”并不能回答我的问题。
options = ["An animal", "A food", "A fruit", "A number", "A superhero name", "A country", "A dessert", "A year"]
#"options" become variables
for i in options:
if i[0:3] == "An ":
exec("%s = %s" % (i[3::], raw_input("Enter " + i + " ")))
else:
exec("%s = %s" % (i[2::], raw_input("Enter " + i + " ")))
我一直收到这个错误:
NameError: name 'input' is not defined
答案 0 :(得分:2)
你没有提供足够的信息,但我的心灵力量告诉我,当你提示"输入动物"时,你输入了input
。
尝试精神上了解您的代码正在做什么,特别是当您到达时:
exec("%s = %s" % (i[3::], raw_input("Enter " + i + " ")))
因此,对于循环的第一次迭代,这变为:
exec("%s = %s" % ("animal", "input"))
然后当替换发生时:
exec("animal = input")
这相当于输入:
animal = input
直接进入Python解释器。 input
未定义,因此您获得:
NameError: name 'input' is not defined
你可能想要在右侧包含引号,以便在执行时将其视为字符串:
exec("%s = '%s'" % ("animal", "input")) # Note that this is unsafe. See the note below.
所有这一切,我觉得有义务说这段代码非常脆弱。当循环迭代到"超级英雄名称"时,它也会中断,因为superhero name
不是有效的标识符。您可能应该将字符串拆分为空格,也许应该使用第二个单词,或者只是将所有空格替换为下划线。此外,您需要清理用户输入,以便用户无法通过在输入中提供引号来逃避。 (或者更好的方法是避免完全使用exec
用户输入。你真的需要变量名吗?为什么不使用Python字典将提示的字符串映射到输入字符串?)