用户输入错误地附加到Python列表

时间:2018-03-26 16:48:07

标签: python python-3.x list data-structures append

Python新手在这里。

我的程序会提示用户输入他们的名字。只有一个“正确”的名字,即约翰。当用户输入错误的名称(即不是John)时,程序会将错误的名称添加到列表中。输入正确的名称后,我想输入错误名称列表。

我遇到/不理解的问题是,当输入John时,它已被附加到错误名称列表中。以下是我的代码:

incorrectNames = []
name = ""

while name != "John":
    name = input("Enter your name: \n")
    incorrectNames.append(name)
    if name == "John":
        print("Incorrect names", incorrectNames)

此代码返回[Andy,Sam,John]而不仅仅是[Andy,Sam](如果这些是在John之前输入错误的两个名字)。这是由于操作的顺序?我认为一旦变量名称是约翰会绕过附加指令吗?

任何形式的清晰度都会受到赞赏或指向正确的方向。

提前致谢!

4 个答案:

答案 0 :(得分:1)

Python按照您提供的顺序执行您的说明。这就像一个食谱 - 如果你在第1步写“将蛋糕放入烤箱”和第2步“预热烤箱”,你将把蛋糕放在冷烤箱中。

所以,你可以像这样解决它:

if name == "John":
    print("Incorrect names", incorrectNames)
incorrectNames.append(name)

但是,这仍然会将John添加到列表中。打印列表后会添加它,因此它不会显示在输出中,但仍然可能根本不需要添加它。所以更好的答案可能是:

if name == "John":
    print("Incorrect names", incorrectNames)
else:
    incorrectNames.append(name)

或者,也许更容易想到将名称打印为循环之后的内容,而不是有条件地在循环中:

while name != "John":
    name = input("Enter your name: \n")
    if name != "John":
        incorrectNames.append(name)

print("Incorrect names", incorrectNames)

此时,您可能会认为双重检查有点多余,并执行此操作:

incorrect_names = []

while True:
    name = input("Enter your name: \n")
    if name == "John":
        break
    incorrectNames.append(name)

print("Incorrect names", incorrectNames)

这种食谱式排序是大多数编程语言的工作方式,它被称为“命令式”执行。一些“功能”语言可以避免这种混淆,只是不让你写多个指令;你必须明确地说“这个函数组成了这两个其他函数”或类似的东西。其他“数据流”和“逻辑”语言更像是一个电子表格,您可以在其中告诉每个变量如何依赖于其他变量,然后让它找出序列以获取您要求的变量值。但一般来说,让你按顺序编写一堆指令的语言就像Python那样强制执行它们,就像Python一样。

答案 1 :(得分:0)

实际上非常简单。无论名称是否等于“John”,您都要将名称附加到列表中。要解决此问题,只需在if语句后添加else语句。

incorrectNames = []
name = ""

while name != "John":
    name = input("Enter your name: \n")
    if name == "John":
        print("Incorrect names", incorrectNames)
    else:
        incorrectNames.append(name)

注意:您可能需要添加break语句来告诉程序退出循环,否则您的应用程序将永远不会退出。

答案 2 :(得分:0)

我将在下面提供更正的代码,然后给出解释:

守则:

incorrectNames = []
name = ""

while name != "John":
    name = input("Enter your name: \n")
    if name != "John":
        incorrectNames.append(name)
    if name == "John":
        print("Incorrect names", incorrectNames)

<强>解释
尝试描绘运行代码时发生的情况。假设我们在用户每次输入后都遵循变量name和列表incorrectNames的值。

输入安迪后,name的价值变为“安迪”。由于输入声明。现在,请注意紧跟在输入语句后面的是行 incorrectNames.append(name)。这会导致列表incorrectNames变为[&#39; Andy&#39;]。

在此之后,同样的程序发生在&#39; Sam&#39;。首先它输入name,然后将其附加到列表中,使incorrecNames成为[&#39; Andy&#39; Sam&#39;]。

然后是最后一个循环,当真实动作发生时。

现在,用户输入了John&#39;。但问题在于:紧跟在输入语句之后的是行 incorrectNames.append(name)。这意味着即使不检查 name的值,它也会附加到incorrectNames

您只需插入一些代码来检查name的值,如果是约翰,则不要将其附加到incorrecNames

答案 3 :(得分:0)

当输入John时,您在while循环(下一次迭代)内。接下来,您将John添加到列表中,然后测试name John。如果您在追加之前测试John,您将获得所需的结果:

incorrectNames = []
name = ""

while name != "John":
    name = input("Enter your name: \n")
    if name == "John":
        print("Incorrect names", incorrectNames)
    incorrectNames.append(name)