安装python shell
运行python
# 导入python资源包
from random import random
# 用户体验模块
def printIntro():#输出文本即本程序的作用
print("这个程序模拟两个选手A和B的某种竞技比赛")#打印
print("程序运行需要A和B的能力值(以0到1之间的小数表示)")#打印
# 获得A和B的能力值与场次模块
def getIntputs():#获得A,B的能力值
a = eval(input("请输入A的能力值(0-1):"))#获得A的能力值
b = eval(input("请输入B的能力值(0-1):"))#获得B的能力值
n = eval(input("模拟比赛的场次:"))#获得比赛场次数
return a, b, n
# 模拟n局比赛模块
def simNGames(n, probA, probB):
winsA, winsB = 0, 0#初始化A,B的获胜次数
for i in range(n):#根据比赛的场次数进行
scoreA, scoreB = simOneGame(probA, probB)#保存A,B的分数
if scoreA > scoreB:#比较A、B的分数
winsA += 1 #A的获胜次数加一
else:
winsB += 1#B的获胜次数加一
return winsA, winsB #返回A、B的获胜次数,这个好像有点多余
# 判断比赛结束条件
def gameOver(a, b):#比赛是否结束
return a == 15 or b == 15#任意一队获得15分判定为胜利
# 模拟n次单局比赛=模拟n局比赛
def simOneGame(probA, probB):#模拟比赛
scoreA, scoreB = 0, 0#初始化A,B队获得的分数
serving = "A"#A队获得主动权
while not gameOver(scoreA, scoreB):#A队与B队比赛未结束就循环
if serving == "A":#A队获得主动权
if random() < probA:#根据A队能力及随机数判断A队能否得分
scoreA += 1
else:
serving = "B"#B队伍获得主动权
else:
if random() < probB:#根据B队能力及随机数判断A队能否得分
scoreB += 1
else:
serving = "A"#A队获得主动权
return scoreA, scoreB
# 打印结果模块
def printSummary(winsA, winsB):#打印仿真比赛结果
n = winsA + winsB#计算A与B队获胜场数
print("竞技分析开始,共模拟{}场比赛".format(n))#打印仿真比赛总场数
print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))#打印仿真比赛A胜率
print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))#打印仿真比赛B胜率
def main():
printIntro()
probA, probB, n = getIntputs() # 获得用户A、B能力值与比赛场次N
winsA, winsB = simNGames(n, probA, probB) # 获得A与B的场次
printSummary(winsA, winsB) # 返回A与B的结果
main()
编写程序
运行结果
注意区分全局变量与局部变量