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之前输入错误的两个名字)。这是由于操作的顺序?我认为一旦变量名称是约翰会绕过附加指令吗?
任何形式的清晰度都会受到赞赏或指向正确的方向。
提前致谢!
答案 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)