Python 为什么While循环返回一个变量而不是另一个?

Python 为什么While循环返回一个变量而不是另一个?,python,Python,我试着自学Python,并为自己制作了一个基本的刽子手游戏。我还有一点路要走,但现在我被卡住了 我试着将大部分用于猜测的“计数器”放在一个函数中,然后引用另一个函数来实际计算猜测是否正确 下面是我的计数器函数: def game(generated_word): hangman_lst = [] guess_num = 0 for i in range(0, len(generated_word)): hangman_lst.append("__")

我试着自学Python,并为自己制作了一个基本的刽子手游戏。我还有一点路要走,但现在我被卡住了

我试着将大部分用于猜测的“计数器”放在一个函数中,然后引用另一个函数来实际计算猜测是否正确

下面是我的计数器函数:

def game(generated_word):
    hangman_lst = []
    guess_num = 0
    for i in range(0, len(generated_word)):
        hangman_lst.append("__")
    print(" ".join(hangman_lst))

    while "__" in hangman_lst:
        if guess_num == 0:
            l = input("This is your first guess. Guess a letter!")
            guess(l, random_word_stripped, hangman_lst, guess_num)
        elif guess_num == 9:
            print("Sorry - you lose!")
            print("The word was " + str(random_word_stripped))
            break
        else:
            l = input("This is guess #" + str(guess_num + 1) + ":")
            guess(l, random_word_stripped, hangman_lst, guess_num)

    if "__" not in hangman_lst:
        print("**Ta-da!** You're a winner!")
这是我用来判断猜测是否正确的函数:

def guess(ltr, word, lst, try_num):
    upper_ltr = ltr.upper()
    if len(upper_ltr) > 1:
        print("That's more than 1 letter, try again:")
        print(" ".join(lst))
    elif len(upper_ltr) < 1:
        print("You didn't enter a letter, try again:")
        print(" ".join(lst))
    elif upper_ltr in lst:
        print("You already guessed that letter, try again:")
        print(" ".join(lst))
    elif upper_ltr not in word:
        print("Sorry, that's incorrect. Try again.")
        print(" ".join(lst))
        try_num += 1
        return try_num
    else:
        for n in range(0, len(word)):
            if word[n] == upper_ltr:
                lst[n] = upper_ltr
        print("Nice job. That's one. You get a bonus guess.")
        print(" ".join(lst))
        return lst
但是,似乎
lst
guess
函数返回ok,那么为什么不
try_num


干杯

您需要增加
guess_num
。在while循环的末尾添加
guess\u num=guess\u num+1
可以解决这个问题,但是您只希望在错误的猜测中增加
guess\u num
,所以您可以这样做。(我还没有测试过这个)

然后在guess函数中,您需要添加行
return True
return False
,以根据猜测是否有效返回适当的真/假值

所以猜测函数的一部分

if len(upper_ltr) > 1:
    print("That's more than 1 letter, try again:")
    print(" ".join(lst))
将需要更改为

if len(upper_ltr) > 1:
    print("That's more than 1 letter, try again:")
    print(" ".join(lst))
    return False

然后对每个if条件都这样做。一旦python看到一个return语句,它将退出函数并返回您告诉它返回的任何内容,在我们的例子中,返回的内容将是True或False。

当您使用
return
关键字时,这表示您正试图将计算值返回给函数的调用者。由于使用
return
将返回一个值给调用者,因此在函数完成后,您希望将该值分配给某个对象……而这是您没有做的

如果你不明白,这里有一个例子

假设我的主函数调用了一个名为
add()
的函数,并希望该函数计算传入的两个整数的值。然后,我必须
将计算出的值返回给调用者以供进一步使用

def main():
    a = 5
    b = 20
    sum = add(a, b)
    print(sum)

def add(num1, num2):
    return num1 + num2

然后,此代码将打印
a+b
,或者在本例中,
25

您可能误解了
return
的作用,因为您从未使用
guess
的返回值。是的,更可能的是:-)我一直在编东西。但有时我想我可能弄错了方向…哦,太酷了,谢谢-这很有帮助!我以前确实尝试过在while循环中递增,但不知道如何处理错误猜测中的递增。但是我没有考虑像你建议的那样返回真/假值——我会试试看!希望对你有用。如果是这样的话,如果你继续投票支持我的答案,那就太好了;)谢谢-我投了赞成票,但不幸的是,我的代表票不够高,无法计数:-(。我基本上采用了与你建议的方法相似的方法,只是我使用了一个
flag=#
,而不仅仅是
True
False
,因为我想使用两个以上的结果。可能不是最漂亮的代码,但它工作得很好!
if len(upper_ltr) > 1:
    print("That's more than 1 letter, try again:")
    print(" ".join(lst))
    return False
def main():
    a = 5
    b = 20
    sum = add(a, b)
    print(sum)

def add(num1, num2):
    return num1 + num2