Python 为什么While循环返回一个变量而不是另一个?
我试着自学Python,并为自己制作了一个基本的刽子手游戏。我还有一点路要走,但现在我被卡住了 我试着将大部分用于猜测的“计数器”放在一个函数中,然后引用另一个函数来实际计算猜测是否正确 下面是我的计数器函数: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("__")
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