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

如何编写函数模拟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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:25:34