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文件

  • 相关阅读:
    PAT甲级——1095 Cars on Campus (排序、映射、字符串操作、题意理解)
    PAT甲级——1096 Consecutive Factors (数学题)
    PAT甲级——1097 Deduplication on a Linked List (链表)
    博客作业06--图
    博客作业05--查找
    博客作业04--树
    博客作业03--栈和队列
    博客作业2---线性表
    博客作业01-抽象数据类型
    C语言最后一次作业--总结报告
  • 原文地址:https://www.cnblogs.com/hhhkm/p/10872809.html
Copyright © 2011-2022 走看看