You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:24