python 排球比赛模拟
2021-01-16 07:13
标签:com sim val 能力 else alt http def port 代码如下: from random import random def simNGames(n,probA,probB): def gameOver(c,d): def printSummary(n,winA,winB): 运行结果: python 排球比赛模拟 标签:com sim val 能力 else alt http def port 原文地址:https://www.cnblogs.com/xieyuhua/p/12928176.html
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()
elif random()
if s1>s2:
scoreA += 1
else:
scoreB += 1
return scoreA,scoreB
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
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)
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()