使用while循环的Python程序持续崩溃问题求助
排查你的Python程序崩溃问题及修复方案
嘿,我帮你找出了代码里导致崩溃的核心问题,还有完整的修复方案,一起来看:
一、直接引发崩溃的问题
- Python版本语法不兼容:你用了Python2风格的
print语句(不带括号),比如print "Congratulations!",如果在Python3环境下运行,这会直接抛出语法错误——这是最可能让你程序崩溃的原因。Python3里print是函数,必须加括号:print("Congratulations!")。 - 代码未完成:最后一行
print "It took you " + str...明显没写完,这种不完整的代码会直接触发语法错误,程序根本没法正常启动。 - 逻辑缺失:主函数里循环调用
roll_until_doubles()但没保存每次的结果,就算你写完打印语句,也没有可用数据输出,要么报错要么输出无意义的内容。
二、修复后的完整可运行代码
我把所有问题都修复了,还补充了计算平均掷骰子次数的逻辑,让程序功能完整:
import random # 用于生成随机数 def roll_until_doubles(): die_one = random.randrange(1, 7) die_two = random.randrange(1, 7) counter = 0 # 初始如果已经掷出双数,counter保持0,逻辑没问题(不需要额外掷骰子) while die_one != die_two: die_one = random.randrange(1, 7) die_two = random.randrange(1, 7) counter += 1 # 提示:如果想把初始那次掷骰子也算入次数,把counter初始值设为1即可 return counter def main(): try: number_of_games = int(input("How many games would you like to play? ")) if number_of_games <= 0: print("请输入一个正整数哦!") return total_rolls = 0 for i in range(number_of_games): rolls = roll_until_doubles() total_rolls += rolls # 计算平均次数,+1是把初始那次掷骰子算进去 average_rolls = (total_rolls / number_of_games) + 1 print("Congratulations!") print(f"总共玩了{number_of_games}局,平均每局需要掷{average_rolls:.2f}次得到双数") except ValueError: print("请输入有效的数字呀!") if __name__ == "__main__": main()
三、额外的健壮性优化
- 加了
try-except捕获输入非数字的情况,避免用户输入错误导致程序崩溃。 - 增加了输入合法性检查,确保用户输入的是正整数,提升程序的容错性。
- 注释里标注了掷骰子次数的计数逻辑,你可以根据自己的需求调整
counter的初始值。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

