python 乒乓球_python – 乒乓球模拟器

我会用dict在玩家之间“切换”:

other = {'A':'B', 'B':'A'}

然后,如果服务等于’A’,那么其他[服务]将等于’B’,如果服务等于’B’,则其他[服务]将等于’A’.

In [1]: import collections

In [2]: score = collections.Counter()

In [3]: score['A'] += 1

In [4]: score['A'] += 1

In [5]: score['B'] += 1

In [6]: score

Out[6]: Counter({'A': 2, 'B': 1})

还要注意这段代码中的内容

if serving == "A":

for i in range(2):

if random() < probA:

scoreA += 1

else:

scoreB += 1

else:

for i in range(2):

if random() < probB:

scoreB +=1

else:

scoreA += 1

有两个块基本上是相同的想法重复两次.这表明可以通过使用函数来加强代码.例如,我们可以定义一个函数服务,当给出概率概率时,玩家(A或B)返回获胜的玩家:

def serve(prob, player):

if random.random() < prob:

return player

else:

return other[player]

然后上面的代码就会变成

for i in range(2):

winner = serve(prob[serving], serving)

score[winner] += 1

因此,您可以通过以下方式使代码紧凑:

import random

import collections

other = {'A':'B', 'B':'A'}

def serve(prob, player):

if random.random() < prob:

return player

else:

return other[player]

def simOneSet(probA, probB):

prob = {'A':probA, 'B':probB}

score = collections.Counter()

serving = "A"

while not setOver(score['A'], score['B']):

for i in range(2):

winner = serve(prob[serving], serving)

score[winner] += 1

if score['A'] == 10 and score['B'] == 10:

winner = serve(prob[serving], serving)

score[winner] += 1

serving = winner

return score['A'], score['B']

def setOver(scoreA, scoreB):

return max(scoreA, scoreB) >= 21

print(simOneSet(0.5,0.5))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值