【发布时间】:2019-05-09 23:16:46
【问题描述】:
我有一个作业问题:
你的朋友设计了一个有两个玩家的游戏。两位选手, 叫 A 和 B,轮流掷一个普通的六面骰子,A 是 第一个滚动。
第一个掷出 6 的玩家赢得游戏。 你和你的朋友不同意 A 获胜的概率 游戏是,因此您决定使用 电脑。
因此:编写一个执行 10 次试验的 Python 程序,每个试验包括 10000 场比赛,并且每次试验都会打印获胜的比赛的分数 玩家A。
这是我目前得到的代码,它每次只返回一个 1667 左右的数字。我主要想知道如何区分A或B赢得比赛。
任何帮助将不胜感激!
编辑代码
import random
def rollDie():
return random.choice([1,2,3,4,5,6])
def roll_first():
if random.choice([0,1]) == 0:
return 'A'
else:
return 'B'
def rollSim():
while True:
turn = roll_first()
numTrials = 10
numThrows = 10000
totalThrows = numTrials*numThrows
game_on = True
winsA = 0
winsB = 0
while game_on:
for n in range(numTrials):
games = 0
for i in range(numThrows):
throw = rollDie()
if turn == 'A':
if throw == 6:
winsA += 1
games += 1
break
else:
turn = 'B'
else:
if throw == 6:
winsB += 1
games += 1
break
else:
turn = 'A'
return winsA/totalThrows
【问题讨论】:
-
我相信你误解了你的问题。您只为 A 创建了一个函数,但它是 A 对 B 的游戏。所以您应该为 diceRow 创建一个函数,然后循环交互次数,每一行属于一个玩家,并检查分数。在所有的试验之后,然后计算 A 赢得比赛的分数。
-
感谢磨坊!如何创建一个知道抛出是 A 还是 B 的函数?
-
您应该为 A 的得分和 B 的得分创建变量,例如,为每个播放添加一个
for循环。每次游戏运行此diceRow两次,一次将结果分配给玩家 A,另一次分配给玩家 B,并检查结果是否因骰子结果为 6 而获胜。清楚吗? -
好的,所以如果 A 先抛出,我如何检查抛出是否是 A,我可以使用 if numThrows %2 != 0 之类的东西吗?因为所有的 As throw 都是奇怪的
-
简单一点,@user10551611,只需创建两个变量:
aThrow和bThrow
标签: python python-3.x montecarlo dice stochastic