请求优化d6骰子投掷统计代码:计算各类平均值与总和
优化后的单d6投掷统计代码
import random # 配置参数 repeat = 5 # 组数 numRolls = 3 # 每组投掷次数 group_totals = [] total_all_rolls = 0 print("=== 每组投掷统计 ===") for group in range(1, repeat + 1): group_sum = 0 for _ in range(numRolls): roll = random.randint(1, 6) group_sum += roll total_all_rolls += roll group_avg = group_sum / numRolls group_totals.append(group_sum) print(f"第 {group} 组: 总和={group_sum}, 平均值={group_avg:.2f}") # 全局统计 total_rolls = repeat * numRolls overall_avg = total_all_rolls / total_rolls if total_rolls > 0 else 0 group_total_avg = sum(group_totals) / repeat if repeat > 0 else 0 print("\n=== 全局统计 ===") print(f"总投掷次数: {total_rolls}") print(f"所有投掷的总平均值: {overall_avg:.2f}") print(f"各组总和的平均值: {group_total_avg:.2f}")
关键优化说明
- 移除冗余变量:删除原代码中重复计数、临时存储单骰子结果的冗余变量,仅保留核心统计变量(
group_totals存储各组总和、total_all_rolls存储所有投掷总点数)。 - 精准统计核心指标:
- 总投掷次数直接通过
repeat * numRolls计算,避免循环累加可能出现的计数错误; - 所有投掷的总平均值通过
total_all_rolls除以总投掷次数得到,结果无偏差; - 各组总和的平均值通过
sum(group_totals) / repeat计算,复用存储的各组数据,逻辑清晰。
- 总投掷次数直接通过
- 模块化逻辑:每组统计与全局统计分离,每组循环内仅处理当前组的投掷、求和与平均值计算,全局统计在所有组完成后统一计算,可读性更强。
- 鲁棒性处理:添加除数为0的判断(当
repeat或numRolls为0时),避免程序报错。
内容的提问来源于stack exchange,提问作者Ob Anon
相关产品推荐
相关产品推荐

