python 排球比赛模拟
Posted xieyuhua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()<probA:
s1 += 1
elif random()<probB:
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()
运行结果:
以上是关于python 排球比赛模拟的主要内容,如果未能解决你的问题,请参考以下文章