模拟体育竞技分析:采用乒乓球比赛规则
作者:互联网
即:
一局比赛:在一局比赛中,先得11分的一方为胜方;10平后,先多得2分的一方为胜方。
一场比赛:单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。
from
random
import
random
#打印程序介绍信息
def
printIntro():
print
(
"这个程序模拟两个选手A和B的乒乓球比赛"
)
print
(
"程序运行需要A和B的能力值(以0到1之间的小数表示)"
)
#获得程序运行参数
def
printInputs():
a
=
eval
(
input
(
"请输入选手A的能力值(0-1): "
))
b
=
eval
(
input
(
"请输入选手B的能力值(0-1): "
))
n
=
eval
(
input
(
"模拟比赛的场次: "
))
return
a, b, n
# 进行N场比赛
def
simNGames(n, probA, probB):
winsA, winsB
=
0
,
0
for
i
in
range
(n):
for
j
in
range
(
7
):
#进行7局4胜的比赛
scoreA, scoreB
=
simOneGame(probA, probB)
if
scoreA > scoreB:
winsA
+
=
1
else
:
winsB
+
=
1
return
winsA,winsB
#进行一场比赛
def
simOneGame(probA, probB):
scoreA, scoreB
=
0
,
0
#初始化AB的得分
serving
=
"A"
while
not
gameOver(scoreA, scoreB):
#用while循环来执行比赛
if
scoreA
=
=
10
and
scoreB
=
=
10
:
return
(simOneGame2(probA,probB))
if
serving
=
=
"A"
:
if
random() < probA:
##用随机数生成胜负
scoreA
+
=
1
else
:
serving
=
"B"
else
:
if
random() < probB:
scoreB
+
=
1
else
:
serving
=
"A"
return
scoreA, scoreB
def
simOneGame2(probA,probB):
scoreA,scoreB
=
10
,
10
serving
=
"A"
while
not
gameOver2(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
gameOver(a,b):
#正常比赛结束
return
a
=
=
11
or
b
=
=
11
def
gameOver2(a,b):
#进行抢12比赛结束
if
abs
((a
-
b))>
=
2
:
return
a,b
#输出数据
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
=
printInputs()
winsA, winsB
=
simNGames(n, probA, probB)
printSummary(winsA, winsB)
main()
标签:winsB,winsA,scoreA,scoreB,probB,比赛规则,乒乓球,体育竞技,probA 来源: https://www.cnblogs.com/fangxiaolog/p/14018239.html