• 排球比赛规则的程序化


    一、排球比赛规则

    比赛采用每球得分制,前4局以先得25分,并同时超出对方2分的队获胜。

    决胜局以先得15分,并同时超出对方2分的队获胜。正式比赛采用五局三胜制。

    二、实现排球比赛规则的简单程序

    from random import random
    def printIntro():
        print("36号程序员的程序模拟两个选手A和B的排球比赛")
        print("程序需要A和B的能力值(以0到1之间的小数表示)")
    def getInputs():
        a=eval(input("请输入选手A的能力值(0—1):"))
        b=eval(input("请输入选手B的能力值(0—1):"))
        n=eval(input("模拟比赛的场次:"))
        return a,b,n
    def simNGames(n,probA,probB):
        winsA,winsB=0,0
        for i in range(n):
            scoreA,scoreB=simOneGame(probA,probB)
            if scoreA>scoreB:
                winsA+=1
            else:
                winsB+=1
        return winsA,winsB
    def gameOver1(a,b):
        return (a>=25 and a-b>2) or (b>=25 and b-a>2)
    def gameOver2(a,b):
        return (a>=15 and a-b>2) or (b>=15 and b-a>2)
    def simOneGame(probA,probB):
        
        for i in range (5):
            winsA,winsB=0,0
            scoreA,scoreB=0,0
            serving="A"
            while not gameOver1(scoreA,scoreB):
                if serving=="A":
                    if random()<probA:
                        scoreA+=1
                    else:
                        scoreB+=1
                        serving="B"
                else:
                    if random()<probB:
                        scoreB+=1
                    else:
                        serving="A"
                        scoreA+=1
                if scoreA>scoreB:
                    winsA+=1
                else:
                    winsB+=1
                if winsA==3 or winsB==3:
                    break
                if winsA==2 and winsB==2:
                    simtowGame(probA,probB)
        return winsA,winsB
    def simtowGame(probA,probB):
        
        for i in range (1):
            scoreA,scoreB=0,0
            serving="A"
            while not gameOver2(scoreA,scoreB):
                if serving=="A":
                    if random()<probA:
                        scoreA+=1
                    else:
                        scoreB+=1
                        serving="B"
                else:
                    if random()<probB:
                        scoreB+=1
                    else:
                        serving="A"
                        scoreA+=1
        return scoreA,scoreB
    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 main():
        printIntro()
        probA,probB,n=getInputs()
        winsA,winsB=simNGames(n,probA,probB)
        printSummary(winsA,winsB)
    main()

    •效果图

    • 打包后的exe文件

  • 相关阅读:
    python list dict 去重的两种方式
    python 发送邮件
    mongo 查询总结
    vsftpd 安装配置
    简单配置 nginx 反向代理
    python 检查内存
    python ldap
    Centos 7 vsftpd ldap 配置
    centos7虚拟机开启端口后 外部不能访问的问题
    Linux下安装配置rocketmq (单个Master、双Master)
  • 原文地址:https://www.cnblogs.com/lzxbs/p/10863963.html
Copyright © 2020-2023  润新知