python学习2019/06/02

体育竞技分析

计算思维:抽象+自动化

比赛规则
双人击球比赛,a&b,回合制,5局3胜
开始时一方先发球,直至判分,接下来胜者发球
球员只能在发球局得分,15分胜一局

程序总体框架及步骤
1,打印程序的介绍性信息式 -printInfo()
2,获得程序运行参数,proA,proB,n -getIputs()
3,利用球员A和B的能力值,模拟n局比赛 -simNGames()
4,输出球员A和B获胜比赛的场次及概率 -printSummary()

from random import random
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(‘请输入模拟比赛场次:’))
#把用户输入的数字转换为数值
return a, b, n
#返回a,b,n
def simNGames(n, probA, probB):
#模拟N局比赛,使用用户输入的值进行计算
winsA, winsB = 0, 0
#设胜场A,B,初始值均为0
for i in range(n):
#遍历
scoreA, scoreB = simOneGames(probA, probB)
#分数A,B = 模拟单场比赛函数内(运动员A,B的值)
if scoreA > scoreB:
#如果A>B
winsA += 1
#A胜场+1
else:
#反之
winsB += 1
#B胜场+1
return winsA, winsB
def gameOver(a, b):
return a == 15 or b == 15
def simOneGames(probA, probB):
#单场比赛,获取运动员A,B
scoreA, scoreB = 0, 0
#设置A,B分数初始值为0
serving = ‘A’
#开球者为A
while not gameOver(scoreA, scoreB):
#无限循环,直到不满足gameover函数条件,输入A,B的分数
if serving == ‘A’:
#如果发球者为A
if random() < probA:
#如果随机函数小于运动员A的值
scoreA += 1
#A分数+ 1
else:
#否则
serving = ‘B’
#发球转至B
else:
if random() < probB:
scoreB += 1
else:
serving = ‘A’
return scoreA, scoreB
def printSummary(winsA, winsB):
#输出A,B获胜场次
n = winsA +winsB
#总场次 = A,B获胜场次之和
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()
#运动员A,B,比赛N次 = 需要获取输入信息
winsA, winsB, = simNGames(n, probA, probB)
#胜者A,B = 比赛次数(n,运动员A,B)
printSummary(winsA, winsB)
#输出结果,A,B
main()

自顶向下

解决复杂问题的有效方法
将一个总问题表达为若干个小问题组成的形式
使用同样方法进一步分解小问题
直至,小问题可以用计算机简单明了的解决

自顶向下,设计

自底向上,执行
逐步组件复杂系统的有效测试方法
分单元测试,逐步组装
按照自顶向下相反的路径操作
直至系统各部分以组装的思路都经过测试和验证

理解自顶向下的设计思维:分而治之
理解自底向上的执行思维:模块化集成
自顶向下是系统思维的简化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值