羽毛球比賽模擬
#體育競技
from random import random
def printInfo():
print("這個程式模擬兩個選手A和B的羽毛球競技比賽")
print("程式需要兩個選手的能力值0-1")
print("規則:三局兩勝--21分制")
def getInput():
a = eval(input("請輸入選手A的能力值(0-1):"))
b = eval(input("請輸入選手B的能力值(0-1):"))
m=eval(input("比賽的局數:"))
n = eval(input("模擬比賽的場次:"))
return a,b,m,n
def printSummary(winsA,winsB):
n = winsA + winsB
print("競技分析開始,共模擬{}場比賽".format(n))
print("選手A獲勝{}場比賽,佔比{:0.1%}".format(winsA,winsA/n))
print("選手B獲勝{}場比賽,佔比{:0.1%}".format(winsB,winsB/n))
def simNGames(m,n,probA,probB):
winsA,winsB = 0,0
wa,wb=0,0
for i in range(n):
for i in range(m):
scoreA,scoreB = simOneGame(probA,probB)
if scoreA > scoreB:
wa += 1
else:
wb += 1
if wa==2:
winsA+=1
wa,wb=0,0
break
if wb==2:
winsB+=1
wa,wb=0,0
break
return winsA,winsB
def simOneGame(probA,probB):
scoreA,scoreB = 0,0
serving = "A"
while not gameOver(scoreA,scoreB):
if serving == "A":
if random() < probA:
scoreA += 1
else:
serving = "B"
else:
if random() < probB:
scoreB += 1
else:
serving = "A"
return scoreA,scoreB
def gameOver(a,b):
if(a>=20 or b>=20):
if(abs(a-b)==2 and a<=29 and b<=29):
return True
else:
return a==30 or b==30
else:
return False
def main():
printInfo()
probA,probB,m,n = getInput()
winsA,winsB = simNGames(m,n,probA,probB)
printSummary(winsA,winsB)
main()