from random import random
def printTntro():
print("typist : 23")
print("模拟比赛")
print("需要A和B的能力值(以0到1之间的小数表示)")
def getInputs():
a = eval(input("请输入A的能力值(0-1):"))
b = eval(input("请输入B的能力值(0-1):"))
return a,b
def printSummary(winsA,winsB):
if winsA==2:
print("A获胜")
return True
else:
print("B获胜")
return False
def gameOver(a,b):
return a==11 or b==11
def simOneGame(probA,probB):
scoreA,scoreB = 0,0
s1,s2 = 0,0
serving = 'A'
while not gameOver(scoreA,scoreB):
if scoreB==scoreA and scoreA==10:
while not s1==2 or s2==2:
if serving == 'A':
if random()<probA:
serving = 'B'
else:
s2 += 1
else:
if random()<probB:
serving = 'A'
else:
s1 += 1
if serving == 'A':
if random()<probA:
serving = 'B'
else:
scoreB += 1
else:
if random()<probB:
serving = 'A'
else:
scoreA += 1
if s1==2:
s2=0
else:
s1=0
return scoreA+s1,scoreB+s2
def simNGames(probA,probB):
winsA,winsB = 0,0
for i in range(3):
scoreA,scoreB = simOneGame(probA,probB)
print("第{}局".format(i+1))
print("{} --- {}".format(scoreA,scoreB))
if scoreA>scoreB:
winsA += 1
if winsA==2:
break
else:
winsB += 1
if winsB==2:
break
return winsA,winsB
class player:
def __init__(self,name,prob):
self.name = name
self.prob = prob
def gameBetwen(pA,pB):
print('参赛双方:'+pA.name + '-' + pB.name)
winsA, winsB = simNGames(pA.prob, pB.prob)
if printSummary(winsA, winsB):
return True
else:
return False
def main():
printTntro()
playerA = player(input('输入该选手名字:'), eval(input('输入该选手的能力值:')))
playerB = player(input('输入该选手名字:'), eval(input('输入该选手的能力值:')))
playerC = player(input('输入该选手名字:'), eval(input('输入该选手的能力值:')))
playerD = player(input('输入该选手名字:'), eval(input('输入该选手的能力值:')))
players = [playerA,playerB,playerC,playerD]
scores = [0,0,0,0]
for i in range(4):
for j in range(4-i-1):
if gameBetwen(players[i],players[i+j+1]):
scores[i] += 1
else:
scores[i+j+1] += 1
print('总分如下:')
for score in scores:
print(score)
main()