如何编写函数模拟3枚骰子1000次投掷并统计恰好两数相同的次数
嘿,我来帮你搞定这个骰子统计的问题!下面是详细的实现思路和示例代码:
实现思路
- 首先,我们需要用
random库的randint(1,6)方法生成1到6之间的随机数,模拟单枚骰子的投掷结果,单次投掷要生成3个这样的数。 - 接下来要判断单次投掷是否符合恰好两枚骰子点数相同的要求:这个条件的核心是「既不是三枚全同,也不是三枚全不同」。我们可以用两种简单方式判断:
- 方式一:把三个骰子的结果转成集合,集合的长度为2时,说明有且仅有两个相同的点数(全不同集合长度是3,全同是1)。
- 方式二:统计每个点数出现的次数,当结果中存在一个出现2次的点数和一个出现1次的点数时,就符合条件。
- 最后,循环执行1000次投掷,每次判断是否符合条件,统计符合条件的次数后打印结果。
示例代码
import random def throw(): # 生成3枚骰子的投掷结果,返回一个包含三个整数的列表 return [random.randint(1, 6) for _ in range(3)] # 初始化计数器 match_count = 0 total_throws = 1000 for _ in range(total_throws): dice_result = throw() # 用集合方式判断:集合长度为2,说明恰好有两枚相同 if len(set(dice_result)) == 2: match_count += 1 print(f"1000次投掷中,恰好两枚骰子点数相同的次数为:{match_count}")
代码说明
throw()函数:用列表推导式一次性生成3个1-6的随机数,返回这三个骰子的结果,简洁高效。- 判断逻辑:这里用了集合的方式,代码更简洁。如果你想更直观地统计点数出现频率,也可以换成下面的判断方式:
# 统计每个点数出现的次数 freq = {} for num in dice_result: freq[num] = freq.get(num, 0) + 1 # 检查是否有一个点数出现2次,另一个出现1次 if sorted(freq.values()) == [1, 2]: match_count += 1 - 循环1000次后,输出最终的统计结果,你可以多次运行看看结果的波动情况(毕竟是随机事件)。
内容的提问来源于stack exchange,提问作者jacky chen
相关产品推荐
相关产品推荐

