#!usr/bin/python
listofnames = []
names = input("Pls enter how many of names:")
x = 1
for x in range(0, names):
inname = input("Enter the name " + str(x))
listofnames.append(inname)
print listofnames
错误
inname = input("Enter the name " + str(x))
文件“”,第1行,in NameError:名称'Jhon'未定义
答案 0 :(得分:4)
请改用raw_input
。见http://docs.python.org/library/functions.html#raw_input。 input
将执行与eval(raw_input(prompt))
相同的操作,因此输入Jhon
会尝试在文件中找到符号Jhon
(不存在)。因此,对于现有脚本,您必须在提示符中输入'Jhon'
(注意引号集),以便eval将值转换为字符串。
以下是input
文档中的摘录警告。
警告强>
此功能对用户不安全 错误!它期望有效的Python 表达作为输入;如果输入是 没有语法上的有效,一个SyntaxError 将被提出。其他例外可能 如果在期间出现错误则被提出 评价。 (另一方面, 有时这正是你的意思 在编写快速脚本时需要 专家使用。)
以下是更正后的版本:
#!usr/bin/python
# The list is implied with the variable name, see my comment below.
names = []
try:
# We need to convert the names input to an int using raw input.
# If a valid number is not entered a `ValueError` is raised, and
# we throw an exception. You may also want to consider renaming
# names to num_names. To be "names" sounds implies a list of
# names, not a number of names.
num_names = int(raw_input("Pls enter how many of names:"))
except ValueError:
raise Exception('Please enter a valid number.')
# You don't need x=1. If you want to start your name at 1
# change the range to start at 1, and add 1 to the number of names.
for x in range(1, num_names+1)):
inname = raw_input("Enter the name " + str(x))
names.append(inname)
print names
注意:这适用于Python2.x。 Python3.x修复了输入与raw_input的混淆,如其他答案所述。
答案 1 :(得分:1)
input
从用户处获取文本,然后将其解释为Python代码(因此它正在尝试评估您输入的内容,Jhon
)。你需要raw_input
两个,你需要将输入的数字(因为它是一个字符串)转换为range
的整数。
#!usr/bin/python
listofnames = []
names = 0
try:
names = int(raw_input("Pls enter how many of names:"))
except:
print "Problem with input"
for x in range(0, names):
inname = raw_input("Enter the name %d: "%(x))
listofnames.append(inname)
print listofnames
答案 2 :(得分:0)
在python3中,input()
现在的工作方式与raw_input()
类似。但是,要使代码与Python3一起使用,仍需要进行一些更改
#!usr/bin/python3
listofnames = []
names = int(input("Pls enter how many of names:"))
x = 1
for x in range(0, names):
inname = input("Enter the name " + str(x))
listofnames.append(inname)
print(listofnames)