用python实行羽毛球比赛规则。

羽毛球比赛规则:

1、21分制,三局两胜为佳

2、每球得分制

3、每回合中取胜的一方的一分

4、双方均为20分时,领先对方2分一方获胜

5、双方均为29分时,先到达30分一方获胜

6、一局比赛中获胜方在下一局率先开球

代码如下:

from random import random

print("学号尾数08")

def printIntro():

print("这个程序模拟两个选手A和B的羽毛球竞技比赛")
print("程序运行需要A和B的能力值(以0到1之间的小数表示)")
def getInputs():
a = eval(input("请输入选手A的能力值(0-1): "))
b = eval(input("请输入选手B的能力值(0-1): "))
n = eval(input("模拟比赛的场次: "))
m = eval(input("模拟次数:"))
return a, b, n, m
def simNGames(n, probA, probB):
winsA, winsB = 0, 0
scoreA_ls=[]
scoreB_ls=[]
for i in range(n):
scoreA, scoreB = simOneGame(probA, probB)
scoreA_ls.append(scoreA)
scoreB_ls.append(scoreB)
if scoreA > scoreB:
winsA += 1
else:
winsB += 1
return winsA, winsB,scoreA_ls,scoreB_ls
def gameOver(a,b):
if(a>=20 or b>=20):
if(abs(a-b)==2 and a<=29 and b<=29):
return True
else:
return a==30 or b==30
else:
return False
def simOneGame(probA, probB):
scoreA, scoreB = 0, 0
serving = "A"
while not gameOver(scoreA, scoreB):
if serving == "A":
if random() < probA:
scoreA += 1
else:
serving="B"
else:
if random() < probB:
scoreB += 1
else:
serving="A"
return scoreA, scoreB
def printSummary(winsA, winsB,m,scoreA_ls,scoreB_ls):
n = winsA + winsB
print("模型模拟次数{}".format(m))
print("竞技分析开始,共模拟{}场比赛".format(n))
print("A选手各场次得分比分:")
print(scoreA_ls)
print("B选手各场次得分比分:")
print(scoreB_ls)
print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))
def main():
printIntro()
probA, probB, n, m= getInputs()
for i in range(m):
winsA, winsB,scoreA_ls,scoreB_ls = simNGames(n, probA, probB)
printSummary(winsA, winsB,m,scoreA_ls,scoreB_ls)

main()

运行结果如下:

学号尾数08
这个程序模拟两个选手A和B的羽毛球竞技比赛
程序运行需要A和B的能力值(以0到1之间的小数表示)
请输入选手A的能力值(0-1): 0.4
请输入选手B的能力值(0-1): 0.3
模拟比赛的场次: 6
模拟次数:8
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[30, 20, 30, 30, 30, 30]
B选手各场次得分比分:
[15, 18, 11, 11, 7, 18]
选手A获胜6场比赛,占比100.0%
选手B获胜0场比赛,占比0.0%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[21, 30, 30, 30, 21, 30]
B选手各场次得分比分:
[19, 23, 19, 13, 23, 12]
选手A获胜5场比赛,占比83.3%
选手B获胜1场比赛,占比16.7%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[18, 30, 30, 30, 30, 22]
B选手各场次得分比分:
[20, 20, 15, 18, 14, 20]
选手A获胜5场比赛,占比83.3%
选手B获胜1场比赛,占比16.7%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[30, 30, 30, 30, 30, 30]
B选手各场次得分比分:
[7, 10, 18, 8, 17, 20]
选手A获胜6场比赛,占比100.0%
选手B获胜0场比赛,占比0.0%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[20, 21, 21, 23, 21, 30]
B选手各场次得分比分:
[18, 19, 19, 25, 19, 23]
选手A获胜5场比赛,占比83.3%
选手B获胜1场比赛,占比16.7%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[30, 30, 30, 30, 30, 26]
B选手各场次得分比分:
[12, 20, 18, 4, 13, 28]
选手A获胜5场比赛,占比83.3%
选手B获胜1场比赛,占比16.7%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[18, 30, 30, 18, 30, 30]
B选手各场次得分比分:
[20, 21, 15, 20, 18, 19]
选手A获胜4场比赛,占比66.7%
选手B获胜2场比赛,占比33.3%
模型模拟次数8
竞技分析开始,共模拟6场比赛
A选手各场次得分比分:
[30, 30, 30, 20, 28, 30]
B选手各场次得分比分:
[15, 13, 14, 18, 26, 21]
选手A获胜6场比赛,占比100.0%
选手B获胜0场比赛,占比0.0%

原文地址:https://www.cnblogs.com/gsd-tt/p/10868815.html

时间: 2024-10-28 17:04:42

用python实行羽毛球比赛规则。的相关文章

【python】羽毛球竞技模拟

一.体育竞技模拟分析简要介绍 体育竞技模拟分析,是个IPO问题,大致过程如下: 输入:两个球员(球员A和B)的能力概率,模拟比赛的场次 处理:模拟比赛过程 输出:球员A和B分别赢得球赛的概率 二.程序设计方法 程序设计有自顶向下和自底向上两种方法,此处重点介绍自顶向下. 自顶向下的基本思想:以一个总问题出发,试图把它表达为很多小问题组成的解决方案,再用同样的技术依次攻破每个小问题,最终问题变得非常小,也就是化整为零.然后把所有的碎片组合起来,就可以得到一个程序. 自顶向下设计: 1.顶层设计 体

在树莓派(Debian系统)上通过usb摄像头扫描识别QR二维码

树莓派(Debian系统)自带Python开发环境IDLE(Python 2.7.3),接上摄像头,就能通过Python实行对QR code的创建和识别: 首先,需要在树莓派上安装如下工具: sudo apt-get install python-imaging sudo apt-get install zbar-tools sudo apt-get install qrencode sudo apt-get install python-pygame 然后创建qrcode.py文件: #!/u

羽毛球竞技模拟

一.体育竞技模拟分析简要介绍 体育竞技模拟分析,是个IPO问题,大致过程如下: 输入:两个球员(球员A和B)的能力概率,模拟比赛的场次 处理:模拟比赛过程 输出:球员A和B分别赢得球赛的概率 二.程序设计方法 程序设计有自顶向下和自底向上两种方法,此处重点介绍自顶向下. 自顶向下的基本思想:以一个总问题出发,试图把它表达为很多小问题组成的解决方案,再用同样的技术依次攻破每个小问题,最终问题变得非常小,也就是化整为零.然后把所有的碎片组合起来,就可以得到一个程序. 自顶向下设计: 1.顶层设计 体

python日常-list

什么事list: list 觉得算是python日常编程中用的最多的python自带的数据结构了.但是python重的list跟其他语言中的并不相同. 少年..不知道你听说过python中的append方法比insert方法的效率高非常多呢?什么,你不知道?请容老衲慢慢道来. 其他编程语言中list也叫链表,大抵就是除了最后一个元素外,所有元素的中都有一个指针,这个指针只想下一个元素节点的引用. 如果你想添加元素的话 把最后一个元素里的指针指向你想要app元素即可,插入呢?嘿嘿 这个时候你只要把

Python 中的进程、线程、协程、同步、异步、回调

进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 在刚刚结束的 PyCon2014 上海站,来自七牛云存储的 Python 高级工程师许智翔带来了关于 Python 的分享<Python中的进程.线程.协程.同步.异步.回调>. 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状

Python自动化部署

# -*- coding: utf-8 -*- #!/bin/env python ''' #Auth: tyk #Function: released version #Date:2017/6/27 #Version:V1.0 ''' import  sys,re,os,time,datetime import  paramiko import logging import socket import ConfigParser import traceback from progressbar

22.python中的面向对象和类的基本语法

当我发现要写python的面向对象的时候,我是踌躇满面,坐立不安呀.我一直在想:这个坑应该怎么爬?因为python中关于面向对象的内容很多,如果要讲透,最好是用面向对象的思想重新学一遍前面的内容.这个坑是如此之大,犹豫再三,还是只捡一下重要的内容来讲吧,不足的内容只能靠大家自己去补充了. 惯例声明一下,我使用的版本是 python2.7,版本之间可能存在差异. 好,在开讲之前,我们先思考一个问题,看代码: 为什么我只创建是为 a 赋值,就可以使用一些我没写过的方法? 可能会有小伙伴说:因为 a

python核心编程一书笔记之第一篇

#!/usr/bin/env python# -*- coding:utf-8 -*- #env 是一个命令用来寻找系统中的python解释器.第二条解释使用utf-8编码 在类unix系统中允许python为了防止出现找不到命令经常会加上一段申明,在python3以下的版本需要加上编码申明来实行兼容: 在python中的第一个案例: 1 print 'Hello World!' 2 #你好这个世界 嘿嘿! print 这个命令用于输出,常用来查看变量里面的内容,或者输出一些内容显示给用户. 变

python爬虫:使用urllib.request和BeautifulSoup抓取新浪新闻标题、链接和主要内容

案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSoup import requests url = 'http://news.sina.com.cn/china/' web_data = requests.get(url) web_data.encoding = 'utf-8' soup = BeautifulSoup(web_data.text,'