zoukankan      html  css  js  c++  java
  • 【Python】以模块化做比赛模拟

    import random   #随机
    #主函数-打印基本信息-获取数据-判断赢场数-打印赢场
    def main():
    printIntro()
    probA, probB, n = getInputs()
    winsA, winsB = simNGames(n, probA, probB)
    printSummary(winsA, winsB)
    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
    def simNGames(n,probA,probB):
    winsA, winsB = 0, 0 #设置赢场数
    for i in range(n):
    scoreA,scoreB = simOneGame(probA,probB)
    if scoreA > scoreB:
    winsA += 1
    else:
    winsB += 1
    return winsA , winsB
    def simOneGame(probA,probB):
    scoreA, scoreB = 0, 0 #设置分数
    serving = "A"
    while not gameOver(scoreA,scoreB): #没有结束就……
    if serving == "A":
    if random.random() < probA: #以随机数作为运气
    scoreA += 1
    else:
    serving = "B"
    else:
    if random.random() < probB:
    scoreB += 1
    else:
    serving = "A"
    return scoreA , scoreB


    def gameOver(a,b):
    return a==15 or b==15 #如果超过15分就结束一场
    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))

    main()
  • 相关阅读:
    Lucky Permutation Triple 构造
    HDU4283:You Are the One(区间DP)
    D. Match & Catch 后缀数组
    数学选讲 orz
    D
    一步一步线段树
    湖科大校赛第三题
    最大流部分
    bfs题目集锦
    hdu1429 bfs+状态压缩
  • 原文地址:https://www.cnblogs.com/naraka/p/8993613.html
Copyright © 2011-2022 走看看