1. 程式人生 > 實用技巧 >乒乓球模擬

乒乓球模擬

from random import random
def printInfo():
    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 simNGames(n, probA, probB):
    winsA, winsB 
= 0, 0 for i in range(n): scoreA, scoreB = simOneGame(probA, probB) if scoreA > scoreB: winsA += 1 else: winsB += 1 return winsA, winsB def gameOver(a,b): if a>=10 and b>=10: if abs(a-b)==2: return 1 elif a<10 and
b<10: if a==11 or b==11: return 1 else: return 0 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 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 main(): printInfo() probA,probB,n=getInputs() winsA,winsB=simNGames(n,probA,probB) printSummary(winsA,winsB) main() python3: input("please input any key to exit!")