1. 程式人生 > 其它 >羽毛球比賽模擬

羽毛球比賽模擬

#體育競技
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()