try except函數測試程序函數

對一個體育競技模擬程序的各個函數進行測試app

原程序代碼以下dom

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Wed May 15 15:25:46 2019  4 
 5 @author: Benny  6 """
 7 
 8 #兩個選手A,B的羽毛球競技比賽預測
 9 from random import random 10 def printIntro(): 11     print("這個程序模擬兩個選手A和B的羽毛球競技比賽") 12     print("程序運行須要A和B的能力值(以0到1之間的小數表示)") 13 def getInputs(): 14     a = eval(input("請輸入選手A的能力值(0-1): ")) 15     b = eval(input("請輸入選手B的能力值(0-1): ")) 16     n = eval(input("模擬比賽的場次: ")) 17     m = eval(input("模擬次數:")) 18     return a, b, n, m 19 def simNGames(n, probA, probB): 20     winsA, winsB = 0, 0 21     scoreA_ls=[] 22     scoreB_ls=[] 23     for i in range(n): 24         scoreA, scoreB = simOneGame(probA, probB) 25  scoreA_ls.append(scoreA) 26  scoreB_ls.append(scoreB) 27         if scoreA > scoreB: 28             winsA += 1
29         else: 30             winsB += 1
31     return winsA, winsB,scoreA_ls,scoreB_ls 32 def gameOver(a,b): 33     if(a>=20 or b>=20): 34         if(abs(a-b)==2 and a<=29 and b<=29): 35             return True 36         else: 37             return a==30 or b==30
38     else: 39         return False 40 def simOneGame(probA, probB): 41     scoreA, scoreB = 0, 0 42     serving = "A"
43     while not gameOver(scoreA, scoreB): 44         if serving == "A": 45             if random() < probA: 46                 scoreA += 1
47             else: 48                 serving="B"
49         else: 50             if random() < probB: 51                 scoreB += 1
52             else: 53                 serving="A"
54     return scoreA, scoreB 55 def printSummary(winsA, winsB,scoreA_ls,scoreB_ls): 56     n = winsA + winsB 57     print("競技分析開始,共模擬{}場比賽".format(n)) 58     print("A選手各場次得分比分:") 59     print(scoreA_ls) 60     print("B選手各場次得分比分:") 61     print(scoreB_ls) 62     print("選手A獲勝{}場比賽,佔比{:0.1%}".format(winsA, winsA/n)) 63     print("選手B獲勝{}場比賽,佔比{:0.1%}".format(winsB, winsB/n)) 64 def main(): 65  printIntro() 66     probA, probB, n, m= getInputs() 67     for i in range(m): 68         winsA, winsB,scoreA_ls,scoreB_ls = simNGames(n, probA, probB) 69  printSummary(winsA, winsB,scoreA_ls,scoreB_ls) 70     n=input("按任何鍵退出") 71     
72 main()

一、首先對函數gameOver(a,b)進行測試函數

 1 def gameOver(a,b):  2     if(a>=20 or b>=20):  3         if(abs(a-b)==2 and a<=29 and b<=29):  4             return True  5         else:  6             return a==30 or b==30
 7     else:  8         return False  9 if gameOver(1,21): 10     print('Ture') 11 else: 12     print('False')

輸入幾種特殊狀況測試

 1 def gameOver(a,b):  2     if(a>=20 or b>=20):  3         if(abs(a-b)==2 and a<=29 and b<=29):  4             return True  5         else:  6             return a==30 or b==30
 7     else:  8         return False  9 ai=[] 10 bi=[] 11 try: 12     for a,b in ((1,20),(1,21),(20,20),(21,22),(23,30)): 13         if gameOver(a,b): 14  ai.append(a) 15  bi.append(b) 16 except: 17     print('Error') 18 
19 print(ai) 20 print(bi)

函數能正常輸出以下:spa

1 [23] 2 [30]

可是理想輸出應該爲code

[1, 23]
[21, 30]orm

而後觀察程序代碼發現第2,3行應改成以下blog

1 if(a>20 or b>20): 2         if(abs(a-b)>=2 and a<=29 and b<=29):

更改後獲得預期結果utf-8

二、如今對simOneGame(proA,proB)函數進行測試(改寫部分代碼方便測試)get

 

 1 from random import random  2 try:  3     probA,probB=0.5,0.5
 4     scoreA,scoreB=0,0  5     serving = "A"
 6     if serving == "A":  7         if random() < probA:  8             scoreA += 1
 9         else: 10             serving="B"
11     else: 12         if random() < probB: 13             scoreB += 1
14         else: 15             serving="A"
16     print(scoreA) 17     print(scoreB) 18 except: 19     print('Error') 20

 

程序運行成功並且結果無誤:結果爲1   0

三、最後對simNGames(n, probA, probB)進行測試(改寫部分代碼方便測試)

 1 try:  2     n,scoreA,scoreB=1,1,21
 3     winsA, winsB = 0, 0  4     scoreA_ls=[]  5     scoreB_ls=[]  6     for i in range(n):  7  scoreA_ls.append(scoreA)  8  scoreB_ls.append(scoreB)  9         if scoreA > scoreB: 10             winsA += 1
11         else: 12             winsB += 1
13     print(winsA, winsB,scoreA_ls,scoreB_ls) 14 except: 15     print('Error')

程序運行正常,結果爲0 1 [1] [21]

相關文章
相關標籤/搜索