我应该构建一个Python程序,将用户输入作为字符串。该程序需要添加输入到列表中的每个字符串,直到输入“John”,然后打印出列表。
本质上,此程序将所有错误输入的字符串存储在列表中,其中“John”是唯一正确的字符串。
但是,我遇到以下异常:
Traceback (most recent call last):
File "/home/dwayne/doen.py", line 7, in <module>
if names_entered == "John":
NameError: name 'names_entered' is not defined`
这是我到目前为止的代码:
name = "John"
while name != 'John':
names_entered = raw_input('Enter your name: ')
if names_entered == "John":
print []
答案 0 :(得分:3)
你的缩进不正确; while循环的主体和if必须缩进。
之后,编译器非常正确:由于 if 与同时处于同一级别,因此无法保证 names_entered 那个时候会有一个价值。
即使你解决了这个问题,你还有其他问题:
我希望这会让你感动;它仍然没有在列表中累积名称;那是给你的。
name = ""
while name != 'John':
names_entered = raw_input('Enter your name: ')
if names_entered == "John":
print []
答案 1 :(得分:0)
我可以逻辑地给你一些帮助。您在WHILE循环之前将“name”变量设置为“John”,这将检查“name”变量是否等于“John”。这意味着在你接受任何类型的输入之前满足WHILE条件。这也意味着永远不会触及在while循环中声明的任何内容,因此从未实际声明过。因此,当您在WHILE循环下方的IF语句中访问“names_entered”时,“names_entered”从未被赋予任何值(它未被声明),因此您会收到错误。
我的逻辑解决方案是:
在获得WHILE循环之前,将“name”变量设置为空字符串。当你点击循环时,不满足条件(空字符串不等于“John”),因此将考虑循环的内容。
您要对输入执行的操作是构建一个名称列表,您知道这些名称最终将以“John”结尾。所以你需要一个列表(一个字符串数组)来添加所有这些名称,直到你进入WHILE循环。在声明“name”变量的位置声明一个空字符串数组(您的“names_entered”)。那么,当你接受来自用户的输入(进入“名称”变量)时,你会将你得到的每个条目添加到“names_entered”变量中,你最终会打印出来。
在您的代码中,您试图将用户输入直接放入列表中。相反,将输入分配给您的“名称”,然后(在您将“name”添加到“names_entered”之后)由WHILE循环进行测试以查看它是否等于“John”。当“name”等于“John”时,将满足WHILE条件,然后将处理WHILE循环下面的代码。
对于打印列表,您必须遍历已收集的名称数组,并将每个名称打印到控制台。也许是一个“for”循环?
很抱歉缺少代码,但希望逻辑帮助会有所帮助。
祝你好运!