首页 > 解决方案 > python中的while循环和集合

问题描述

我正在编写一个函数,该函数int从预定义列表中获取用户的输入并将其添加到集合中。代码运行良好,直到所有 (11) 个项目都已添加到集合中。它只是继续前进。是因为我的代码设置错误还是逻辑错误?

def append_guess(n):

    list_of_numbers = [1, 11, 7, 8, 12, 6, 15, 30, 5, 3, 2]
    guessed = set()

    while (n):
        try:
            n = int(input("Enter an integer between 1-30 >> "))
            if n in list_of_numbers:
                print("right guess")
                guessed.add(n)
                print(guessed)
            else:
                print("Wrong Guess - Keep Trying!! ")
        except:
            if guessed == set(1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 30):
                print("Great Job! You have Guessed All numbers")
                break

append_guess(1)

标签: pythonloopsset

解决方案


你用 tryexcept了。一般来说,它们不应该用于常规程序逻辑。它们仅用于处理异常。此外,您不需要同时包含相同数字的列表和集合来进行正确猜测。

相反,将检查作为 while 循环的条件。所以也许是这样的:

correct_set = {1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 30}
guessed = set()

while guessed != correct_set:
    n = int(input("Enter an integer between 1-30 >> "))
    if n in correct_set:
        print("right guess")
        guessed.add(n)
        print(guessed)
    else:
        print("Wrong Guess - Keep Trying!! ")

print("Great Job! You have Guessed All numbers")

我不确定该函数的用途是什么,但是如果要将其分解为函数,则可以将输入和检查逻辑分开,如下所示。另外我会考虑为“n”使用更好的名称,也许称它为“guess”?所以是这样的:

def append_guess(guess, correct_set, guessed):
    if guess in correct_set:
        print("right guess")
        guessed.add(guess)
        print(guessed)
    else:
        print("Wrong Guess - Keep Trying!! ")
    return guessed

if __name__ == "__main__":
    correct_set = {1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 30}
    guessed = set()

    while guessed != correct_set:
        guess = int(input("Enter an integer between 1-30 >> "))
        guessed = append_guess(guess, correct_set, guessed)

    print("Great Job! You have Guessed All numbers")

推荐阅读