python网球比赛模拟_python 排球比赛模拟

代码如下:

from random import random

def printIntro(): # 打印程序介绍信息

print(‘这个程序模拟两个队伍A和B的排球竞技比赛‘)

print(‘程序运行需要A和B的能力值(以0到1之间的小数表示)‘)

def getInputs(): # 获得程序运行参数

a = eval(input(‘请输入队伍A的能力值(0-1):‘))

b = eval(input(‘请输入队伍B的能力值(0-1):‘))

n = eval(input(‘模拟比赛场次:‘))

return a,b,n

def simOneGame(probA,probB):

scoreA,scoreB=0,0

serving=‘A‘

while not gameOver(scoreA,scoreB):

if serving==‘A‘:

if random()>probA:

scoreB += 1

serving=‘B‘

else:

scoreA += 1

else:

if random()>probB:

scoreA += 1

serving = ‘A‘

else:

scoreB += 1

return scoreA,scoreB

def simfirstgame(probA,probB):

scoreA,scoreB=0,0

for i in range(4):

s1,s2=0,0

while not gameover(s1,s2):

if random()

s1 += 1

elif random()

s2 += 1

if s1>s2:

scoreA += 1

else:

scoreB += 1

return scoreA,scoreB

def simNGames(n,probA,probB):

winsA,winsB=0,0

for i in range(n):

k,l=simfirstgame(probA,probB)

if k==1:

winsB += 1

continue

elif k==3:

winsA += 1

continue

scoreA,scoreB=simOneGame(probA,probB)

if scoreA>scoreB:

winsA += 1

else:

winsB += 1

return winsA,winsB

def gameOver(c,d):

return(c>=15 and c-d>=2) or (d>=15 and d-c>=2)

def ameover(scoreA,scoreB):

return (scoreA>=25 and scoreA-scoreB>=2) or (scoreB>=25 and scoreB-scoreA>=2)

def printSummary(n,winA,winB):

print(‘竞技分析开始,共模拟{}场比赛‘.format(n))

print(‘队伍A获胜{}场比赛,占比{:.2f}%‘.format(winA, winA/n*100))

print(‘队伍B获胜{}场比赛,占比{:.2f}%‘.format(winB, winB / n * 100))

def main():

printIntro()

probA, probB, n =getInputs()

winsA, winsB = simNGames(n, probA, probB)

printSummary(n,winsA,winsB)

main()

运行结果:

20200521092122137851.png

原文地址:https://www.cnblogs.com/xieyuhua/p/12928176.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值