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
相关产品推荐
相关产品推荐

