python選手試合シミュレーション
4258 ワード
中国の大学moocでpythonを勉強してからしばらく経って、やっと統合の段階になって、嵩天先生の授業で双方の選手に模擬試合の実例をあげました.プログラムは双方の選手の能力(0-1)を入力し、nラウンドの試合の進行をシミュレートし、双方の勝利の統計を得る.その上でいくつかの修正を行いました
1.データ有効性検査を加えた
2.入力データ試行錯誤終了メカニズム
3.終了時間カウントダウン
キーコードは次のとおりです.
全文コードは以下の通りです.
これに基づいて、ゲームの単輪のルールを変更したり、必要な統計を追加したりするなど、再度変更することができます.
参照リンク:https://www.icourse163.org/learn/BIT-268001?tid=1206073223#/learn/content(第8週目コンテンツ例13)
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)