纪录的第二天,写写自己这两天学了些什么吧。
今日金句:
3:22 我们不至消灭、是出于耶和华诸般的慈爱、是因他的怜悯、不至断绝。
3:23 每早晨这都是新的.你的诚实、极其广大。
体育竞技模拟,题目如下:
回合制,先由一方发球,如胜利,则得1分并继续发球,如失败,则双方分数不改变并交换球权。球员AB的能力为0-1之间的一个数值
#INPUT
def InputIntro():
print('这个程序模拟两个选手A和B之间的竞技比赛')
print('这个程序需要输入A,B两个选手的能力值')
def Process(n,winA,winB):
import random
serving = winA
scoreA = 0;scoreB = 0;i = 0
a = random.random()
while i < n+1:
if a < winA:
scoreB += 1
serving = winB
else:
scoreA += 1
i += 1
a = random.random()
#Output
print('竞技比赛开始,共模拟{}次回合'.format(n))
print('A选手获胜场次为{},占比{}'.format(scoreA,scoreA/n))
print('B选手获胜概率为{},占比{}'.format(scoreB,scoreB/n))
InputIntro()
Process(1000,0.45,0.47)
输出结果如下:
这个程序模拟两个选手A和B之间的竞技比赛
这个程序需要输入A,B两个选手的能力值
竞技比赛开始,共模拟1000次回合
A选手获胜场次为526,占比0.526
B选手获胜概率为475,占比0.475
对于先达到某分数即判定胜利的比赛,可对代码作出如下修改
def InputIntro():
print('这个程序模拟两个选手A和B之间的竞技比赛')
print('这个程序需要输入A,B两个选手的能力值')
print('先达到15分即获胜')
def Process(score,winA,winB):
import random
serving = winA
scoreA = 0;scoreB = 0;i = 0
a = random.random()
while scoreA < score and scoreB < score:
if a < winA:
scoreB += 1
serving = winB
else:
scoreA += 1
i += 1
a = random.random()
print('竞技比赛开始,共进行了{}次回合'.format(i))
print('A选手得分为{}'.format(scoreA))
print('B选手得分为{}'.format(scoreB))
if scoreA > scoreB:
print('获胜者为A')
else:
print('获胜者为B')
InputIntro()
Process(15,0.45,0.47)
运行结果如下:
这个程序模拟两个选手A和B之间的竞技比赛
这个程序需要输入A,B两个选手的能力值
先达到15分即获胜
竞技比赛开始,共进行了19次回合
A选手得分为15
B选手得分为4
获胜者为A
再运行一次:
这个程序模拟两个选手A和B之间的竞技比赛
这个程序需要输入A,B两个选手的能力值
先达到15分即获胜
竞技比赛开始,共进行了24次回合
A选手得分为15
B选手得分为9
获胜者为A
这里还有一点小思考,在得到A,B的分数后,我用的是if做判断,比较后手动输出获胜者信息。
但如果用序列,字典或列表把A,B的分数形成一定的对应关系,则可用函数,如
dic = {'A':scoreA,'B':scoreB}
items = list(dic.items())
dic.sort(key = lambda x:x[1])
print(items[0])
这个地方应该还是有更简单的方法,关于字典的遍历。
有兴趣可以研究下字典适用的排序方式,sort(),sorted()等等