我的python代码有什么问题?

时间:2010-08-16 07:28:47

标签: python

#!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'未定义

3 个答案:

答案 0 :(得分:4)

请改用raw_input。见http://docs.python.org/library/functions.html#raw_inputinput将执行与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)