我的脚本中引发了NameError异常,不确定原因

2024-04-19 00:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该构建一个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 []

Tags: 字符串用户name程序most列表ifnames
2条回答

缩进不正确;while循环和if的主体必须缩进。你知道吗

在那之后,编译器是非常正确的:由于ifwhile处于同一级别,因此不能保证输入的名称在那一点上有值。你知道吗

即使你解决了这个问题,你也有其他问题:

  1. 在循环之前,您将name强制为“John”,您将永远不会进入循环。你知道吗
  2. 当你找到“约翰”时,你会打印一个空的列表。你知道吗
  3. 没有代码将其他名称附加到列表中。你知道吗

我希望这能让你动起来;它仍然不会在列表中累积名字;那是给你的。你知道吗

name = ""
while name != 'John':
    names_entered = raw_input('Enter your name: ')

    if names_entered == "John":
        print []

我可以给你一些逻辑上的帮助。您正在WHILE循环之前将“name”变量设置为“John”,检查“name”变量是否等于“John”。这意味着WHILE条件在您接受任何类型的输入之前就已经满足了。这也意味着while循环中声明的任何内容都不会被触及,因此实际上也不会被声明。因此,当您在WHILE循环下面的IF语句中访问“names\u entered”时,“names\u entered”从未被赋值(它没有被声明),因此您会得到一个错误。你知道吗

我的逻辑解决方案是:

在获取to WHILE循环之前,将“name”变量设置为空字符串。当您命中循环时,条件将不会得到满足(空字符串不等于“John”),因此将考虑循环的内容。你知道吗

你要做的是建立一个名字列表,你知道最终会以“John”结束。因此,在进入WHILE循环之前,需要一个列表(字符串数组)来添加所有这些名称。在声明“name”变量的地方声明一个空字符串数组(您的“names\u entered”)。然后,当您接受来自用户的输入(输入到“name”变量中)时,您将把得到的每个条目添加到“names\u entered”变量中,并最终打印出来。你知道吗

在代码中,您试图将用户输入直接放入列表中。相反,将输入指定给“name”,然后(在您将“name”添加到“names\u entered”之后)由WHILE循环测试它是否等于“John”。当“name”等于“John”时,WHILE条件将被满足,WHILE循环下面的代码将被处理。你知道吗

至于打印出列表,您必须循环遍历已收集的名称数组,并将每个名称打印到控制台。也许是“for”循环?你知道吗

很抱歉缺少代码,但希望逻辑帮助会有所帮助。你知道吗

祝你好运!你知道吗

相关问题 更多 >