Python掷骰子游戏输入“yes”后无法重开,进程直接退出
核心问题梳理
- 判断逻辑引用错误:二次询问是否重玩时,用户的输入结果被存在
dice变量中,但后续分支判断错误地拿Python内置的input函数对象和字符串"yes"/"no"做对比,函数和字符串永远不可能相等,两个分支判断全部失效,无论用户输入什么,程序都会直接走到代码末尾退出。 - 缺少循环结构:现有代码为纯顺序执行逻辑,没有可重复触发游戏流程的循环块,即便修正了判断条件,也没有机制能重新运行掷骰流程。
- 基础依赖缺失:代码调用
random.randint生成随机数,但没有写import random的导入语句,实际运行会直接触发NameError报错。 - 冗余逻辑失效:开头的
dicegame=input("wanna play dice? yes/no : ")没有做任何校验,不管用户输入什么都会直接进入掷骰环节,和初始问询的预期逻辑不符。
修正后的可运行代码
import random # 用无限循环包裹游戏核心流程,满足重玩需求 while True: # 生成双方随机骰子值 userdice1 = random.randint(1, 6) userdice2 = random.randint(1, 6) pythondice1 = random.randint(1, 6) pythondice2 = random.randint(1, 6) # 展示骰子结果 print(f"you got {userdice1} and {userdice2}") print(f"and i got {pythondice1} and {pythondice2}") # 计算点数并判断胜负 user_score = userdice1 + userdice2 python_score = pythondice1 + pythondice2 if user_score == python_score: print("its a tie!") elif user_score < python_score: print("i won!") else: print("you won!, great job") # 询问是否继续游玩 user_choice = input("wanna play again? yes/no : ") if user_choice == "no": print("cya later.") # 跳出循环,结束程序 break
修正说明
- 把分支判断的对比对象改成实际存储用户输入的变量,不会再出现判断永远失效的问题。
- 用
while True循环包裹全部游戏流程,只有用户输入no时才会触发break跳出循环,输入yes(或其他非no的内容)都会自动回到循环开头重新跑一遍掷骰流程。 - 补充了
random模块的导入语句,解决随机数调用报错的问题。
内容的提问来源于stack exchange,提问作者mishuf
相关产品推荐
相关产品推荐

