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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:18:00