我有一个元组列表,其中包含有关人的信息(每个元组一个,带有(名称,年龄等)信息)。我想检查列表以查看是否有任何名称与用户输入匹配。我的问题是,如果使用for循环,那么我将得到多行返回false
的行,而不仅仅是一行。然后,我也无法要求用户重试,直到成功。我当前的代码是:
last_name = input("Please input person's last name")
for person in personList:
if person[0] == last_name.capitalize():
print("success")
else:
print("fail")
这将为每个玩家打印出“失败”,而不仅仅是一次,并且不会提示用户再次尝试。我知道while循环将允许多次尝试,但是我看不到如何将while与for链接起来,并且仍然只输出一次“ fail”。
由于我想了解有关元组的更多信息,请不要建议使用对象。我知道这样做会更有意义,但这并不能帮助我理解元组。
答案 0 :(得分:2)
您需要进行两项修改:找到匹配项时停止循环的方法,以及仅在整个列表中均未找到匹配项时才打印“失败”的方法。
您可以通过在if语句中添加一个break
来进行第一个修改,而您可以通过在for循环中添加一个else
子句来进行第二个修改,这意味着“如果循环完全完成了。”
for person in personList:
if person[0] == last_name.capitalize():
print("success")
break
else:
print("fail")
答案 1 :(得分:0)
您可以像这样简化检查用户输入值是否在personList
中的一行,然后检查输入是否至少匹配一次,以及是否确实打印了“成功”和中断循环,否则打印了“失败”并再次询问用户。
personList = [('Abc', 'Cba'), ('Xyz', 'Zyx')]
while True:
last_name = input("Please input person's last name: ").capitalize()
if any(last_name == i[0] for i in personList):
print("success")
break
else:
print("fail")
输出:
Please input person's last name: random
fail
Please input person's last name: xyz
success
答案 2 :(得分:0)
因此,首先让我们了解发生了什么。 对于元组中的每个人,您都询问他的名字是否为X。
因此,每个人都会回答您:“否” ,直到您找到合适的人为止,只有该人会说:“是” ,甚至此外,除非他是最后一位,否则它将一直持续到最后。
最后,您要让每个元组说出它是否与用户输入匹配。
但是还有一种简单的方法可以解决此问题。那我们该怎么办呢?
我们将只收集每个答案,然后检查收集的内容中是否存在我们的输入。
让我们写下代码:
total_collection = []
for person in personList:
if person[0] == last_name.capitalize():
total_collection.append("1")
else:
total_collection.append("0")
if "1" in total_collection:
print("Success!")
else:
print("Fail...")
在此代码中,字符串“ 1”表示匹配,而字符串“ 0”表示不匹配。 另外,通过这种方式,您可以说出匹配项位于/位于哪个索引。