1.將羽毛球比賽分析分解爲如下幾個小步驟dom
1.1打印程序的介紹性信息式
1.2得到程序運行參數:A(A的能力值),B(B的能力值),n(比賽場次)
1.3利用球員AB的能力值,模擬n場比賽
1.4輸出球員AB獲勝的場次及機率函數
2.將各個步驟定義成函數來實現:spa
代碼以下:設計
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. author@foldline 學號:2018310143029 """ from random import * #頂層設計 def main(): printIntroduce()#打印程序的介紹信息 probabilityA,probabilityB,n=getInputs()#經過getsInputs函數來獲取2個球員的能力值和比賽次數 winsA,winsB=simulateNGames(n,probabilityA,probabilityB)#經過simulateNGames()求得2個球員在n次比賽中獲勝的次數 printSummary(winsA,winsB)#經過printSummary()來輸出比賽的結果信息 #第二階段 def printIntroduce(): print('學號:2018310143029') print('這個程序模擬兩個選手A和B的羽毛球競技比賽') print('程序運行須要A和B的能力值') def getInputs(): a=eval(input('請輸入選手A的能力值(0~1):')) b=eval(input('請輸入選手A的能力值(0~1):')) n=eval(input('比賽勝利至少須要的局數:')) return a,b,n def simulateNGames(n,probabilityA,probabilityB): '''定義球員A,B贏得比賽的次數,初始值爲0, 經過for循環來模擬n次比賽 用simulateOneGame()來模擬一場比賽''' winsA,winsB=0,0 while not judge(n,winsA,winsB): '''返回本場比賽2個球員的得分,根據得分來肯定本場比賽的勝負''' scoreA,scoreB=simulateOneGame(probabilityA,probabilityB) if scoreA>scoreB: winsA+=1 else: winsB+=1 return winsA,winsB def printSummary(winsA,winsB): n=winsA+winsB print('\n比賽開始,共模擬%d場比賽'%n) print('選手A獲勝{}場比賽,佔比{:0.1%}'.format(winsA,winsA/n)) print('選手B獲勝{}場比賽,佔比{:0.1%}'.format(winsB,winsB/n)) #第三階段 def simulateOneGame(probabilityA,probabilityB): '''每場比賽,2個球員的得分初始爲0,設定每場比賽老是A先發球, 用random函數生成一個隨機小數,範圍在【0,1)內''' scoreA,scoreB=0,0 starting='A' while not gameOver(scoreA,scoreB): if starting=='A': if random()<probabilityA: scoreA+=1 else: scoreB+=1 starting='B' else: if random()<probabilityB: scoreB+=1 else: scoreB+=1 starting='A' return scoreA,scoreB def gameOver(a,b): '''任意一方達到20分就結束比賽''' if a>29 or b>29: return True elif a>20 or b>20: if abs(a-b)>1: return True else: return False def judge(n,winsA,winsB): if winsA==n or winsB==n: return True else: return False main()
3.運行結果如圖:3d
3.1.能力值高:code
3.2.能力值低:orm
4.用pyinstaller打包可執行文件:blog