我对作业有这个问题:
您的朋友设计了一个有两个玩家的游戏。两位选手 称为A和B,轮流滚动一个普通的六边形模具,其中A为 第一个开始。
第一个掷出6的玩家赢得比赛。 您和您的朋友不同意A获胜的概率 游戏,因此您决定使用 电脑。
因此:编写一个执行10个试验的Python程序,每个试验包括 10000场比赛,并且每次审判都印制出 玩家A。
这是到目前为止我得到的代码,每次都只是在1667年左右返回一个数字。我主要是想知道如何区分赢得比赛的A或B。
任何帮助将不胜感激!
编辑代码
setInterval(() =>
fetch('/api/dedicated-server/{{ object.id }}/')
.then(response => response.json())
.then(json => {
this.dedicated_server = json;
}),
5000);
答案 0 :(得分:0)
获得清晰代码的最佳方法是将functions
中的每个任务分开,这意味着:
1.运行游戏->每个骰子滚动
2.运行游戏->在A和B之间交替进行游戏,直到第一个骰子在骰子上得到6(这里考虑到如果A得到6,B甚至不需要玩,因为A赢了)
3.进行试验->由特定数量的剧本组成
4.运行主程序->包含所需的所有尝试次数
因此,下面是可能的解决方案之一(在这里您可以看到我的play
函数已经返回了结果,即玩家是否赢了):
import random
def play():
won = True
keepPlaying = False
rollDice = random.choice([1,2,3,4,5,6])
if rollDice == 6:
return won
return keepPlaying
def run_game(winsA, winsB):
while True:
playA = play()
playB = play()
if playA:
winsA += 1
return winsA, winsB
elif playB:
winsB += 1
return winsA, winsB
def run_trial(numGames):
winsA = 0
winsB = 0
for i in range(numGames):
wins = run_game(winsA, winsB)
winsA = wins[0]
winsB = wins[1]
print("winsA:", winsA, "| winsB:", winsB, "| Fraction of A wins:", "{} %".format(winsA / ( winsA + winsB ) * 100))
numTrials = 10
numGames = 10000
for i in range(numTrials):
run_trial(numGames)
答案 1 :(得分:0)
您实际上只需要计算玩家A的获胜次数。由于您每次尝试玩10000场比赛,因此,如果您知道A赢了的游戏数,那么您就知道B必赢了其他游戏,并且A + B = 10000。
您似乎是随机决定谁拥有第一回合,但任务指出,应该始终是玩家A进行第一回合。
您可以使用布尔值isPlayerA
来知道轮到谁了。以isPlayerA = True
开头,然后以isPlayerA = not isPlayerA
进行切换。
您可以在此处进行编码:
import random
def rollDie():
return random.choice([1,2,3,4,5,6])
def winFraction(): # Perform one trial of 10000 games and return fraction of wins for A
winsA = 0 # only count wins for A
for numTrow in range(10000):
isPlayerA = True # Player A always takes the first turn
throw = rollDie()
while throw != 6: # While the game is not over yet:
isPlayerA = not isPlayerA # Switch to the other player
throw = rollDie()
if isPlayerA:
winsA += 1 # Only count the wins for player A
return winsA/10000.0 # This is the fraction: we know the number of played games
def sim():
for trial in range(10): # Perform 10 trials
print(winFraction()) # Print the result of the trial
sim() # Start the simulation