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()

运行结果:

猜你喜欢

转载自www.cnblogs.com/xieyuhua/p/12928176.html