python编程比赛_Python编程预测比赛成绩

任务要求:

编写程序,模拟体育竞技分析

C.羽毛球比赛规则

>21分制,3局2胜为佳

>每球得分制

>每回合中,取胜的一方加1分

>当双方均为20分时,领先对方2分的一方赢得该局比赛

>当双方均为29分时,先取得30分的一方赢得该局比赛

>一局比赛的获胜方在下一局率先发球

一.首先编写程序

步骤一:顶层设计

from random import *

#顶层设计

def main():

printIntroduce()#打印程序的介绍信息

probabilityA,probabilityB,n=getInputs()#通过getsInputs函数来获取2个球员的能力值和比赛次数

winsA,winsB=simulateNGames(n,probabilityA,probabilityB)#通过simulateNGames()求得2个球员在n次比赛中获胜的次数

printSummary(winsA,winsB)#通过printSummary()来输出比赛的结果信息

步骤二:

#第二阶段

def printIntroduce():

print('这个程序模拟两个选手A和B的羽毛球竞技比赛')

print('程序运行需要A和B的能力值')

def getInputs():

a=eval(input('请输入选手A的能力值(0~1):'))

b=eval(input('请输入选手B的能力值(0~1):'))

n=eval(input('比赛胜利达到多少局获胜:'))

return a,b,n

def simulateNGames(n,probabilityA,probabilityB):

'''定义球员A,B赢得比赛的次数,初始值为0,

通过for循环来模拟n次比赛

用simulateOneGame()来模拟一场比赛'''

winsA,winsB=0,0

while not judge(n,winsA,winsB):

'''返回本场比赛2个球员的得分,根据得分来确定本场比赛的胜负'''

scoreA,scoreB=simulateOneGame(probabilityA,probabilityB)

if scoreA>scoreB:

winsA+=1

else:

winsB+=1

return winsA,winsB

def printSummary(winsA,winsB):

n=winsA+winsB

print('\n比赛开始,共模拟%d场比赛'%n)

print('选手A获胜{}场比赛,占比{:0.1%}'.format(winsA,winsA/n))

print('选手B获胜{}场比赛,占比{:0.1%}'.format(winsB,winsB/n))buzhousan

步骤三:

#第三阶段

def simulateOneGame(probabilityA,probabilityB):

'''每场比赛,2个球员的得分初始为0,设定每场比赛总是A先发球,

用random函数生成一个随机小数,范围在【0,1)内'''

scoreA,scoreB=0,0

starting='A'

while not gameOver(scoreA,scoreB):

if starting=='A':

if random()

scoreA+=1

else:

scoreB+=1

starting='B'

else:

if random()

scoreB+=1

else:

scoreB+=1

starting='A'

return scoreA,scoreB

def gameOver(a,b):

'''任意一方达到20分就结束比赛'''

if a>29 or b>29:

return True

elif a>20 or b>20:

if abs(a-b)>1:

return True

else:

return False

def judge(n,winsA,winsB):

if winsA==n or winsB==n:

return True

else:

return False

main()

二.执行效果

1622012-20190515163126585-764196923.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值