python選手試合シミュレーション

4258 ワード

中国の大学moocでpythonを勉強してからしばらく経って、やっと統合の段階になって、嵩天先生の授業で双方の選手に模擬試合の実例をあげました.プログラムは双方の選手の能力(0-1)を入力し、nラウンドの試合の進行をシミュレートし、双方の勝利の統計を得る.その上でいくつかの修正を行いました
1.データ有効性検査を加えた
2.入力データ試行錯誤終了メカニズム
3.終了時間カウントダウン
キーコードは次のとおりです.
def getInput_player(player):
    global MaxAllowRetryNum
    for tryies in range(MaxAllowRetryNum+1):
        prob=input("     {}    (0-1):".format(player))
        try:
            prob=float(eval(prob))
            if prob >= 0 or prob <= 1:
                break
            else:
                print("       ,   {}   ".format(MaxAllowRetryNum-tryies))
        except:
            print("       ,   {}   ".format(MaxAllowRetryNum-tryies))
            continue
        if tryies==MaxAllowRetryNum:
                for i in range(5):
                    print("\r       ,    {}    ".format(5-i),end="")
                    sleep(1)
                print("
") quit() return prob

全文コードは以下の通りです.
#playGames.py
#coding = utf-8
from random import random
from time import sleep
global MaxAllowRetryNum
MaxAllowRetryNum=3#       ,       

#        
def printIntro():
    print("          A B      ")
    print("      A B    ( 0 1       )")
    print("             3        ")

#        ,                  (0-1),     
#                ,         ,         
def getInputs():
    a=getInput_player("A")
    b=getInput_player("B")
    n=getinput_num()
    return a,b,n

#      
#           
#    0-1   ,            
#                    ,        ,         
#         ,                 ,
def getInput_player(player):
    global MaxAllowRetryNum
    for tryies in range(MaxAllowRetryNum+1):
        prob=input("     {}    (0-1):".format(player))
        try:
            prob=float(eval(prob))#         ,   except  
            if prob >= 0 or prob <= 1:#    ,            
                break
            else:
                print("       ,   {}   ".format(MaxAllowRetryNum-tryies))
        except:
            print("       ,   {}   ".format(MaxAllowRetryNum-tryies))
#         ,         
            if tryies==MaxAllowRetryNum:
                for i in range(5):
                    print("\r       ,    {}    ".format(5-i),end="")
                    sleep(1)
                print("
") quit() return prob # # def getinput_num(): global MaxAllowRetryNum for tryies in range(MaxAllowRetryNum+1): num=input(" :") try: num=int(eval(num)) if num > 0: break else: print(" , {} ".format(MaxAllowRetryNum-tryies),end="") except: print(" , {} ".format(MaxAllowRetryNum-tryies)) if tryies==MaxAllowRetryNum: for i in range(5): print("\r , {} ".format(5-i)) sleep(1) print("
") quit() return num # 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 simNGames(n,probA,probB): winsA,winsB=0,0 for i in range(n): scoreA,scoreB=simOneNGame(probA,probB) if scoreA> scoreB: winsA += 1 else: winsB += 1 return winsA,winsB # #A , A ,A , B,A ;B # , 15 , def simOneNGame(probA,probB): scoreA,scoreB=0,0 serving="A" while not gameOver(scoreA,scoreB): if serving == "A": if random()

これに基づいて、ゲームの単輪のルールを変更したり、必要な統計を追加したりするなど、再度変更することができます.
参照リンク:https://www.icourse163.org/learn/BIT-268001?tid=1206073223#/learn/content(第8週目コンテンツ例13)