首页 > 编程语言 > 详细

python循环乒乓球赛模拟

时间:2020-11-23 09:08:47      阅读:37      评论:0      收藏:0      [点我收藏+]
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()

 

python循环乒乓球赛模拟

原文:https://www.cnblogs.com/eastlord/p/14022494.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!