爲了使用方即可以安裝pyinstaller來方便本身使用dom
在cmd下輸入函數
pip install pyinstaller
就能夠自動安裝spa
目的:模仿不一樣的兩個隊伍進行模擬比賽設計
原理:經過輸入各自的能力值(Ⅰ),模擬比賽的進行( P ),最後輸出模擬的結果( O )code
P 簡介:經過產生隨機數獲得每局比賽的難度,若小於能力值則表示贏得本局比賽,反之輸掉本局比賽。orm
規則:① 每場比賽採用 5局3勝制。blog
② 前四局採用25分制,每一個隊只有在贏得至少25分,且同時超過對方2分時才勝一局。ip
③ 決勝局(第五局)採用15分制,先得到15分,且同時超過對方2分爲勝。utf-8
# -*- coding: utf-8 -*- """ Created on Sun May 12 23:15:03 2019 @author:zyp26 """ import random import os def printInfo(): print("zyp的這個程序模擬兩個選手A和B的某種競技比賽 : ") print("須要A和B的能力值(以0到1之間的小數表示):") def getInputs(): proA=eval(input("請輸入選手A的能力值(0-1):")) proB=eval(input("請輸入選手B的能力值(0-1):")) n=eval(input("模擬比賽的場次:")) return proA,proB,n def simNGames(proA, proB, n): countA,countB=0,0 for i in range(n): if SimOneGame(proA, proB)==1: countA+=1 else: countB+=1 return countA, countB def SimOneGame(proA, proB): temp=0.5 while temp==0.5: temp=random.random() if temp<0.5: serve="A" else: serve="B" setA,setB=0,0 while not gameOver(setA,setB): scoreA,scoreB=0, 0 while not setOver(scoreA, scoreB,setA+setB+1): if serve=="A": if random.random()<proA: scoreA+=1 else: scoreB+=1 serve="B" else: if random.random()<proB: scoreB+=1 else: scoreA+=1 serve="A" if scoreA>scoreB: setA+=1 else: setB+=1 return (1 if (setA > setB) else 0) def setOver(scoreA, scoreB,sets): if sets==5: if scoreA>=15 or scoreB>=15: if(abs(scoreA-scoreB)>=2): return True else: return False else: return False else: if scoreA>=25 or scoreB>=25: if(abs(scoreA-scoreB)>=2): return True else: return False else: return False def gameOver(setA,setB): if setA==3 or setB==3: return True else: return False def printSummary(countA, countB): print("選手A獲勝{0}場比賽,佔比{1:.2f}%".format(countA, countA/(countA + countB)*100)) print("選手B獲勝{0}場比賽,佔比{1:.2f}%".format(countB, countB/(countA + countB)*100)) if __name__ == "__main__": printInfo() proA, proB, n = getInputs() print("競技分析開始,共模擬{}場比賽".format(n)) countA, countB = simNGames(proA, proB, n) printSummary(countA, countB)
結果get
與排球類似的設計
此代碼與上述主要不一樣之處在於: GameOver(),其餘函數都相似
# -*- coding: utf-8 -*- """ Created on Thu May 16 19:45:17 2019 @author: zyp26 """ from random import * def printIntro(): print("這個程序模擬兩個隊伍A和B的籃球比賽") print("這個程序須要A和B的能力值(0-1)") def getInputs(): a=eval(input('A的能力值爲:')) b=eval(input("B的能力值爲:")) n=eval(input("比賽的場次爲:")) return a,b,n def gameover(i,k): if i>k: return True return False def one(a,b): scorea,scoreb=0,0 x='A' i=1 k=randint(10,40) while not gameover(i,k): if x=='A': if random()<a: scorea+=2 else: x='B' else: if random()<b: scoreb+=2 else: x='A' i+=1 return scorea,scoreb def ones(probA,probB): wa,wb=0,0 for j in range(4): xa,xb=one(probA,probB) wa+=xa wb+=xb while wa==wb: xa,xb=jiashisai(probA,probB) wa+=xa wb+=xb return wa,wb def jiashisai(a,b): scorea,scoreb=0,0 i=1 x='A' while not gameover(i,randint(1,5)): if x=='A': if random()<a: scorea+=2 else: x='B' else: if random()<b: scoreb+=2 else: x='A' i+=1 return scorea,scoreb def simNGames(n,probA,probB): a,b=0,0 for i in range(n): x,y=ones(probA,probB) if x>y: a+=1 else: b+=1 return a,b def printSummary(a,b,n): print("A贏了{}場 B贏了{}場 共{}".format(a,b,n)) print("A贏的機率爲{:0.1%} B贏的機率爲{:0.1%}".format(a/n,b/n)) def main(): printIntro() probA,probB,n=getInputs() winsA,winsB=simNGames(n,probA,probB) printSummary(winsA,winsB,n) main()
結果