码迷,mamicode.com
首页 > 编程语言 > 详细

python 排球比赛模拟

时间:2020-05-21 09:21:22      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:com   sim   val   能力   else   alt   http   def   port   

代码如下:

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 排球比赛模拟

标签:com   sim   val   能力   else   alt   http   def   port   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!