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

Python Craps游戏获胜概率计算无输出问题排查与修正

Craps游戏胜率计算代码错误排查与修正

我写好了Craps游戏的逻辑代码,但运行它计算10000次试验的获胜概率时没有任何输出。已知该游戏理论获胜概率约为49%,附上我的代码,请求排查错误并提供修正方案。

原代码

from random import seed, randint


def simulate():
  die1 = randint(1, 6)
  die2 = randint(1, 6)
  roll = die1 + die2

  first_roll = roll

  if first_roll == 7 or first_roll == 11:
    return True
  elif first_roll == 2 or first_roll == 3 or first_roll == 12:
    return False
  else:
    second_roll = randint(1, 6) + randint(1, 6)
    while second_roll != first_roll and second_roll != 7:
      if second_roll == first_roll:
        return True
      elif second_roll == 7:
        return False
         

  
## Main

def probability(n):
  simulate()
  wins = 0
  for i in range(n):
    if simulate() == 1:
      wins += 1
  return 

print(probability(10000))

代码错误点

  • simulate函数循环逻辑错误:循环条件为second_roll != first_roll and second_roll !=7,此时循环内的判断永远无法触发——进入循环的前提就是这两个条件都不满足,需要在循环内重新掷骰子并判断结果。
  • probability函数无返回值:缺少返回计算结果的语句,导致print无法输出有效内容。
  • 布尔值判断错误:判断获胜时错误地将simulate返回的布尔值与1比较,应直接判断返回值为True。
  • 冗余调用:probability函数开头的simulate()调用无意义,浪费一次模拟且不影响结果。

修正后的代码

from random import randint

def simulate():
    die1 = randint(1, 6)
    die2 = randint(1, 6)
    roll = die1 + die2
    first_roll = roll
    if first_roll == 7 or first_roll == 11:
        return True
    elif first_roll == 2 or first_roll == 3 or first_roll == 12:
        return False
    else:
        while True:
            second_roll = randint(1, 6) + randint(1, 6)
            if second_roll == first_roll:
                return True
            elif second_roll == 7:
                return False

def probability(n):
    wins = 0
    for _ in range(n):
        if simulate():
            wins += 1
    return wins / n

print(probability(10000))

内容的提问来源于stack exchange,提问作者roTenshi2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:26