如何在元组列表中检查字符串,如果找不到则仅输出一次?

时间:2018-11-23 17:09:13

标签: python list tuples

我有一个元组列表,其中包含有关人的信息(每个元组一个,带有(名称,年龄等)信息)。我想检查列表以查看是否有任何名称与用户输入匹配。我的问题是,如果使用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”。

由于我想了解有关元组的更多信息,请不要建议使用对象。我知道这样做会更有意义,但这并不能帮助我理解元组。

3 个答案:

答案 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”表示不匹配。 另外,通过这种方式,您可以说出匹配项位于/位于哪个索引。