Python骰子游戏无限循环问题修复:play_again函数逻辑优化
修复Python骰子游戏的play_again逻辑问题
嘿,我一眼就看出问题出在哪了——你的play_again()函数里的条件判断写法不对,这才导致不管输入啥都会重新跑游戏。
你写的if again == 'y' or 'Y',Python会把它拆成(again == 'y') or ('Y')来解析。而在布尔判断里,非空字符串'Y'会被当成True,所以这个条件永远成立,不管你输入的是啥,都会执行main()重启游戏。第二个if的写法也犯了同样的错误。
给你两种修复方案,选哪种都可以:
方案一:修正条件判断逻辑
直接把每个判断都写完整,确保两边都是和again的比较:
def play_again(): again = input('Would you like to roll again? ') if again == 'y' or again == 'Y': main() elif again == 'n' or again == 'N': print('Exiting the game.') else: print("请输入'y'或'n'哦!") play_again() # 遇到无效输入时,让用户重新输入
方案二:更简洁健壮的写法
把输入转成小写并去掉首尾空格,这样用户输入Y或者y都能识别,代码也更简洁:
def play_again(): again = input('Would you like to roll again? ').strip().lower() if again == 'y': main() elif again == 'n': print('Exiting the game.') else: print("无效输入!请输入'y'(继续)或'n'(退出)。") play_again()
另外,我还把result()里的字符串拼接改成了Python更推荐的f-string写法,可读性更好。下面是完整的修正后代码:
import random def play_again(): again = input('Would you like to roll again? ').strip().lower() if again == 'y': main() elif again == 'n': print('Exiting the game.') else: print("Please enter 'y' (yes) or 'n' (no)") play_again() def roll(): print('Rolling the dice.') def result(): print(f'The number is {random.randint(1,6)}.') def main(): roll() result() play_again() main()
这样修改后,输入y/Y就会重新游戏,输入n/N就会退出,其他输入会提示用户重新输入,逻辑就完全正常啦!
内容的提问来源于stack exchange,提问作者idkidk
相关产品推荐
相关产品推荐

