首页 > 解决方案 > 根据位置值检查 5 位数字是否在列表中

问题描述

在 Python 中,我试图将 10 个 5 位数字的列表与用户输入的三个 5 位数字进行比较。例如,如果列表中的一个数字是 46590,而用户输入了 46509,则表明用户只正确输入了前三个数字。

该列表位于 txt 文件中。这是我到目前为止编码的内容:

name = input("Enter the file name: ")


number1 = str(input("Enter in your first lottery ticket: "))
number2 = str(input("Enter in your second lottery ticket: "))
number3 = str(input("Enter in your third lottery ticket: "))

f=open("lottery.txt")
exs=f.readlines()
exs = [x for x in exs if x.strip()]
mylist = [line.rstrip('\n') for line in exs]

for line in mylist:
    if line == number1:
        print("entire number equal")
    elif line[0][0] == number1[0]:
        print("first digit equal")
    elif line[0][0] == number1[0] and line[1][0] == number1[1]:
        print("first and second digit equal")
    elif line[0][0] == number1[0] and line[1][0] == number1[1] and line[2][0] == number1[2]:
        print("First second and third digit equal")

我尝试使用布尔表达式,但我不断收到错误消息。现在,当我运行上面的代码时,它会打印出两次“第一个数字相等”。

提前致谢!

标签: python

解决方案


您可以利用这一事实,True并在 python 中False进行评估,10只取布尔值的总和来确定有多少是正确的:

win = "46590"
guess = "46509"

print(sum(a == b  for a, b in zip(win, guess)))
# prints 3

如果要报告每个值,还可以循环遍历:

win = "46590"
guess = "46509"

for i, correct in enumerate(a == b  for a, b in zip(win, guess)):
    print(f"digit {i} correct: {correct}")

印刷:

digit 0 correct: True
digit 1 correct: True
digit 2 correct: True
digit 3 correct: False
digit 4 correct: False

如果你有一个获胜者名单,你可以使用相同的技术来查看每个获胜者有多少是正确的:

winners = ["16129", "46590", "79562", "47597", "25649", "11111"]
guess = "46509"

print([sum(a == b  for a, b in zip(win, guess)) for win in winners])
# [2, 3, 1, 2, 1, 0]

# get max correct:

print("Best:", max(sum(a == b  for a, b in zip(win, guess)) for win in winners))
# Best: 3

推荐阅读