Python字典作业疑问:生成1000次两骰子点数和的字典为何错误?
分析你的骰子统计代码问题
Hey Romina! Let's break down why your code didn't pass the assignment check.
你的当前代码做了什么
你的代码创建了一个字典,其中每个键是掷骰子的次数序号(从1到1000),对应的值是该次掷两个骰子的点数和。简单来说,它是按掷骰子的顺序记录每一次的结果——但这并不是作业要求的目标。
作业实际要求的是什么
题目要求生成的字典需要包含1000次掷骰子的点数和结果,意思是你需要统计每个可能的点数和(2到12)在1000次投掷中出现的次数。正确的字典结构应该是:键为点数和(2、3……12),值为该点数和出现的次数。
修正后的代码示例
这里提供两种可行的修正方案:
1. 手动统计(无需额外库)
from random import randrange dosdados = {sum_val: 0 for sum_val in range(2, 13)} # 初始化2-12每个点数和的计数为0 for _ in range(1000): # 不需要记录次数序号,用_作为占位符即可 dado1 = randrange(1,7) dado2 = randrange(1,7) total = dado1 + dado2 dosdados[total] += 1 # 对应点数和的计数加1 print(dosdados)
2. 使用collections.Counter(更简洁的写法)
如果老师允许使用标准库模块,这种方式会更简洁:
from random import randrange from collections import Counter roll_sums = [] for _ in range(1000): roll_sums.append(randrange(1,7) + randrange(1,7)) dosdados = Counter(roll_sums) # 如果你想确保2-12的所有点数和都在字典里(哪怕次数为0),可以合并初始字典: dosdados = {**{sum_val:0 for sum_val in range(2,13)}, **dosdados} print(dosdados)
核心错误点总结
你误解了字典的用途:作业需要的是每个点数和的出现次数统计,而不是按投掷顺序记录每一次的结果。这就是你的代码被判定错误的原因!
内容的提问来源于stack exchange,提问作者Romina Alarcon
相关产品推荐
相关产品推荐

