面試題 前端常見專有名詞
1)模擬體育競技分析:(不同學號選做不同題目,必做題)
b.採用排球比賽規則(學號尾號為4,5,6同學必做及格題)。賽制規定:
前4局比賽採用25分制,每個隊只有贏得至少25分,並同時超過對方2分時 ,才勝1局。
正式比賽採用5局3勝制,決勝局的比賽採用15分制,一隊先得8分後,兩隊交換場區,按原位置順序繼續比賽到結束。
在決勝局(第五局)之比賽,先獲15分並領先對方2分為勝。
from random import random def printIntro(): print("36號程式設計師的程式模擬兩個選手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 gameOver1(a,b): return (a>=25 and a-b>2) or (b>=25 and b-a>2) def gameOver2(a,b): return (a>=15 and a-b>2) or (b>=15 and b-a>2) def simOneGame(probA,probB): for i in range (5): winsA,winsB=0,0 scoreA,scoreB=0,0 serving="A" while not gameOver1(scoreA,scoreB): if serving=="A": if random()<probA: scoreA+=1 else: scoreB+=1 serving="B" else: if random()<probB: scoreB+=1 else: serving="A" scoreA+=1 if scoreA>scoreB: winsA+=1 else: winsB+=1 if winsA==3 or winsB==3: break if winsA==2 and winsB==2: simtowGame(probA,probB) return winsA,winsB def simtowGame(probA,probB): for i in range (1): scoreA,scoreB=0,0 serving="A" while not gameOver2(scoreA,scoreB): if serving=="A": if random()<probA: scoreA+=1 else: scoreB+=1 serving="B" else: if random()<probB: scoreB+=1 else: serving="A" scoreA+=1 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(): printIntro() probA,probB,n=getInputs() winsA,winsB=simNGames(n,probA,probB) printSummary(winsA,winsB) main()