关于体育的python毕业设计_Python程序设计思维练习---体育竞技分析

体育竞技分析:模拟N场比赛

计算思维:抽象 + 自动化

模拟:抽象比赛过程,自动模拟N场比赛,当N越大时,比赛结果分析越科学。

本次比赛规则:回合制,15分一局,先由一方发球,如胜利,则得1分并继续发球,如失败,则双方分数不改变并交换球权。球员AB的能力为0-1之间的一个数值

思维方式:自顶向下即将一个复杂问题分解成几个问题,再细分成一个个具体的小问题,从而来解决复杂问题。自底向上为自顶向下的逆过程,即解决复杂问题的方法,逐步解决一个个小问题,来达成目的。

1.将体育竞技分析分解为以下几个小步骤

1.1打印程序的介绍性信息式

1.2获得程序运行参数:probA(A的能力值),probB(B的能力值),n(比赛场次)

1.3利用球员AB的能力值,模拟n场比赛

1.4输出球员AB获胜的场次及概率

2.将各个步骤定义成函数来实现

e64453e1f826?utm_source=oschina-app

分解

e64453e1f826?utm_source=oschina-app

定义函数

3.完整代码

from random import random

def printInfo(): # 打印程序介绍信息

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('模拟比赛场次:'))

return a, b, n

def simOneGame(probA, probB): # 进行一场比赛

scoreA, scoreB = 0, 0 # 初始化AB的得分

serving = 'A' # 首先由A发球

while not gameOver(scoreA, scoreB): #用while循环来执行比赛

if serving == 'A':

if random() < probA: # random() 方法返回随机生成的一个实数,它在[0,1)范围内。

scoreA += 1 # 用随机数来和能力值比较从而分出胜负

else:

serving = 'B'

else:

if random() < probB:

scoreB += 1

else:

serving = 'A'

return scoreA, scoreB

def simNGames(n, probA, probB): #进行N场比赛

winsA, winsB = 0, 0 # 初始化AB的胜场数

for i in range(n):

scoreA, scoreB = simOneGame(probA, probB)

if scoreA > scoreB:

winsA += 1

else:

winsB += 1

return winsA, winsB

def gameOver(c, d): #比赛结束

return c==15 or d==15

def printSummary(n ,winA, winB): #打印比赛结果

print('竞技分析开始,共模拟{}场比赛'.format(n))

print('选手A获胜{}场比赛,占比{:.2f}%'.format(winA, winA/n*100))

print('选手B获胜{}场比赛,占比{:.2f}%'.format(winB, winB / n * 100))

def main():

printInfo()

probA, probB, n =getInputs()

winsA, winsB = simNGames(n, probA, probB)

printSummary(n, winsA, winsB)

main()

4.运行结果分析

e64453e1f826?utm_source=oschina-app

菜鸟互啄

e64453e1f826?utm_source=oschina-app

中阶对抗

e64453e1f826?utm_source=oschina-app

皇城PK

分析以上数据得知:对于两位能力相差相同的选手(都为0.05),能力越大的选手竞技时,胜负概率越接近。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值