zoukankan      html  css  js  c++  java
  • 排球比赛规则的程序化

    一、排球比赛规则

    比赛采用每球得分制,前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文件

  • 相关阅读:
    Eclipse下,修改MAVEN 中央仓库地址,解决maven下载慢问题
    C语言中头文件string的用法
    Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
    Curl
    LDAP是什么
    Linux网络基本网络配置
    vim
    request,session,cookie的比较
    J2EE开发过程中遇到的问题
    实现弹出登录窗口
  • 原文地址:https://www.cnblogs.com/lzxbs/p/10863963.html
Copyright © 2011-2022 走看看