Python列表重复统计问题:骰子游戏实现结果不符求助
嘿,我来帮你搞定这个骰子游戏的统计问题!
先说说你代码里的问题
你现在的统计逻辑有两个小问题:
- 你遍历的是
range(6),也就是0到5,但骰子的点数是1到6,这就漏掉了对6的统计; - 每次循环都会把
count直接覆盖成当前数字的出现次数,最后count只会保留最后一次循环(也就是数字5的出现次数),这显然不是你要的结果。而且你说输出是列表长度,估计是不小心写错了循环逻辑,但没关系,我们重新梳理一下。
两种解决方法,适合不同场景
方法1:基于你现有代码修改,新手友好
这种方法完全用你已经学过的列表和循环知识,容易理解:
import random # 初始化空列表存骰子结果 dice = [] # 掷5次骰子,把结果加入列表 for _ in range(5): roll_result = random.randint(1, 6) dice.append(roll_result) max_occurrence = 0 # 遍历1到6的所有可能点数 for num in range(1, 7): current_count = dice.count(num) # 如果当前点数的出现次数比记录的最大值大,就更新最大值 if current_count > max_occurrence: max_occurrence = current_count print("Player rolled:", dice) print("重复次数最多的数字出现了", max_occurrence, "次")
方法2:用Python内置工具,简洁高效
如果你想更简洁,可以用Python标准库的Counter类,它专门用来统计元素出现次数,一行就能搞定统计:
import random from collections import Counter # 用列表推导式简化掷骰子的代码,一行生成结果列表 dice = [random.randint(1, 6) for _ in range(5)] # 统计每个数字的出现次数 counts = Counter(dice) # most_common(1)返回出现次数最多的元组(比如(3,4)),取第二个值就是次数 max_occurrence = counts.most_common(1)[0][1] print("Player rolled:", dice) print("重复次数最多的数字出现了", max_occurrence, "次")
测试一下
用你给出的两个测试案例验证:
- 当结果是
[3, 3, 3, 1, 3]时,两种方法都会输出4; - 当结果是
[2, 6, 5, 6, 6]时,都会输出3,完全符合你的期望。
内容的提问来源于stack exchange,提问作者Zeek
相关产品推荐
相关产品推荐

