【问题标题】:Why does this print the error message twice?为什么这会打印两次错误消息?
【发布时间】:2017-11-29 23:35:42
【问题描述】:

stackoverflow 的新手,python (python-3) 的新手。目前在edx.org上学习,遇到如下错误。

我创建了一个函数来检查用户输入 str 与答案 str 并返回 TrueFalse.

在测试函数时,我创建了一个 while 循环以在第 3 次不成功的尝试时停止。但是,每当尝试不成功时,该函数会打印两次错误消息,而它应该只打印一次。

我通过将函数的返回 Bool 值存储到变量中而不是直接在 whileif 条件中调用该函数来修复了错误/strong> 循环。但是,我想了解两次打印错误消息背后的逻辑。这是两次打印错误消息的原始代码:

def letter_guess(letter, guess):

    if len(guess) == 1 and guess.isalpha() and guess < letter:
        print(guess,"is lower than the answer. Try again.\n")
        return False

    elif len(guess) == 1 and guess.isalpha() and guess > letter:
        print(guess,"is higher than the answer. Try again.\n")
        return False

    elif len(guess) == 1 and guess.isalpha() and guess == letter:
        print("Correct answer!")
        return True

    else:
        print("Please only enter one alphabet for the letter. Try again.\n")
        return False

answer2 = "m"
guess2 = input("Please enter a single alphabet : ")    

i = 0

while i < 3:


    if letter_guess(answer2, guess2):
        break

    elif letter_guess(answer2, guess2) == False and i == 2:
        print("You have reached 3 guesses. Game over.")
        break

    else:
        i += 1
        guess2 = input("Please guess again : ")

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您想在while 循环内调用input()

    # ...
    answer2 = "m"
    i = 0
    while i < 3:
        guess2 = input("Please enter a single alphabet : ")
        # ...
    

    否则用户没有机会改变他们的答案,guess2 永远不会改变,他们会多次收到相同的错误消息。

    【讨论】:

    • 嗨 Andrea,guess2while 循环的末尾已经有了一个新的输入。
    • @J.Choi:我的错,对不起,我错过了
    【解决方案2】:

    您两次调用该函数,第一次是 if 和 elif,但猜测相同。你修复了它,只调用一次并存储返回值。

    我试图更好地解释它:函数总是由第一个 if 调用,以评估其条件;如果返回值为 false,则再次调用以评估 elif 条件,参数与之前相同。

    【讨论】:

    • 你的意思是当条件不满足的时候,由于代码运行了ifelif,所以会运行两次才结束else?如果是这样,我现在明白了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2016-11-01
    • 1970-01-01
    相关资源
    最近更新 更多