鱼C论坛

 找回密码
 立即注册
查看: 1482|回复: 3

[已解决]体育竞技比赛

[复制链接]
发表于 2020-7-20 22:53:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目标:
11.png
我的代码:
  1. """
  2. 体育竞技分析
  3. """
  4. import random

  5. def main():
  6.     printIntro() # 打印程序的介绍性信息
  7.     probA, probB, n = getInputs() # 获得程序运行参数:proA, proB, n
  8.     winsA, winsB = simNGames(n, probA, probB)  # 利用球员A和B的能力值,模拟n局比赛
  9.     printSummary(winsA, winsB) # 输出球员A和B获胜比赛的场次及概率
  10.    
  11. def printIntro():
  12.     print("这个程序模拟两个选手A和B的某种竞技比赛")
  13.     print("程序运行需要A和B的能力值(以0到1之间的小数表示)")

  14. def getInputs():
  15.     a = eval(input("请输入选手A的能力值(0-1): "))
  16.     b = eval(input("请输入选手B的能力值(0-1): "))
  17.     n = eval(input("模拟比赛的场次: "))
  18.     return a, b, n # 返回元祖类型

  19. def printSummary(winsA, winsB):
  20.     n = winsA + winsB
  21.     print("竞技分析开始,共模拟{}场比赛".format(n))
  22.     print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA/n))
  23.     print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB/n))

  24. def simNGames(n, probA, probB):
  25.     winsA, winsB = 0, 0
  26.     for i in range(n):
  27.         scoreA, scoreB = simOneGame(probA, probB)
  28.         if scoreA > scoreB:
  29.             winsA += 1
  30.         else:
  31.             winsB += 1
  32.     return winsA, winsB

  33. def simOneGame(probA, probB):
  34.     scoreA, scoreB = 0, 0
  35.     serving = "A"
  36.     while not gameOver(scoreA, scoreB):
  37.         if serving == "A":
  38.             if random() < probA:
  39.                 scoreA += 1
  40.             else:
  41.                 serving="B"
  42.         else:
  43.                 if random() < probB:
  44.                     scoreB += 1
  45.                 else:
  46.                     serving="A"
  47.     return scoreA, scoreB
  48.                     
  49. def gameOver(a,b):
  50.     return a==15 or b==15

  51. main()
复制代码

111.jpg
最佳答案
2020-7-20 23:12:31


random() 函数是 random 模块的方法,当你 import random 时候要使用 randon() 函数应该这样写代码: random.random()

而你像 random() 就应该这样导入模块:from random inport random

而你的 gameOver 函数应该改成这样 a + b == n 然后多设置个 n 的参数传入


更改后的代码:
  1. """
  2. 体育竞技分析
  3. """
  4. from random import random


  5. def main():
  6.     printIntro()  # 打印程序的介绍性信息
  7.     probA, probB, n = getInputs()  # 获得程序运行参数:proA, proB, n
  8.     winsA, winsB = simNGames(n, probA, probB)  # 利用球员A和B的能力值,模拟n局比赛
  9.     printSummary(winsA, winsB)  # 输出球员A和B获胜比赛的场次及概率


  10. def printIntro():
  11.     print("这个程序模拟两个选手A和B的某种竞技比赛")
  12.     print("程序运行需要A和B的能力值(以0到1之间的小数表示)")


  13. def getInputs():
  14.     a = eval(input("请输入选手A的能力值(0-1): "))
  15.     b = eval(input("请输入选手B的能力值(0-1): "))
  16.     n = eval(input("模拟比赛的场次: "))
  17.     return a, b, n  # 返回元祖类型


  18. def printSummary(winsA, winsB):
  19.     n = winsA + winsB
  20.     print("竞技分析开始,共模拟{}场比赛".format(n))
  21.     print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))
  22.     print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))


  23. def simNGames(n, probA, probB):
  24.     winsA, winsB = 0, 0
  25.     for i in range(n):
  26.         scoreA, scoreB = simOneGame(n,probA, probB)
  27.         if scoreA > scoreB:
  28.             winsA += 1
  29.         else:
  30.             winsB += 1
  31.     return winsA, winsB


  32. def simOneGame(n,probA, probB):
  33.     scoreA, scoreB = 0, 0
  34.     serving = "A"
  35.     while not gameOver(n,scoreA, scoreB):
  36.         if serving == "A":
  37.             if random() < probA:
  38.                 scoreA += 1
  39.             else:
  40.                 serving = "B"
  41.         else:
  42.             if random() < probB:
  43.                 scoreB += 1
  44.             else:
  45.                 serving = "A"
  46.     return scoreA, scoreB


  47. def gameOver(n, a, b):
  48.     return a+b == n

  49. main()
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-20 23:12:31 | 显示全部楼层    本楼为最佳答案   


random() 函数是 random 模块的方法,当你 import random 时候要使用 randon() 函数应该这样写代码: random.random()

而你像 random() 就应该这样导入模块:from random inport random

而你的 gameOver 函数应该改成这样 a + b == n 然后多设置个 n 的参数传入


更改后的代码:
  1. """
  2. 体育竞技分析
  3. """
  4. from random import random


  5. def main():
  6.     printIntro()  # 打印程序的介绍性信息
  7.     probA, probB, n = getInputs()  # 获得程序运行参数:proA, proB, n
  8.     winsA, winsB = simNGames(n, probA, probB)  # 利用球员A和B的能力值,模拟n局比赛
  9.     printSummary(winsA, winsB)  # 输出球员A和B获胜比赛的场次及概率


  10. def printIntro():
  11.     print("这个程序模拟两个选手A和B的某种竞技比赛")
  12.     print("程序运行需要A和B的能力值(以0到1之间的小数表示)")


  13. def getInputs():
  14.     a = eval(input("请输入选手A的能力值(0-1): "))
  15.     b = eval(input("请输入选手B的能力值(0-1): "))
  16.     n = eval(input("模拟比赛的场次: "))
  17.     return a, b, n  # 返回元祖类型


  18. def printSummary(winsA, winsB):
  19.     n = winsA + winsB
  20.     print("竞技分析开始,共模拟{}场比赛".format(n))
  21.     print("选手A获胜{}场比赛,占比{:0.1%}".format(winsA, winsA / n))
  22.     print("选手B获胜{}场比赛,占比{:0.1%}".format(winsB, winsB / n))


  23. def simNGames(n, probA, probB):
  24.     winsA, winsB = 0, 0
  25.     for i in range(n):
  26.         scoreA, scoreB = simOneGame(n,probA, probB)
  27.         if scoreA > scoreB:
  28.             winsA += 1
  29.         else:
  30.             winsB += 1
  31.     return winsA, winsB


  32. def simOneGame(n,probA, probB):
  33.     scoreA, scoreB = 0, 0
  34.     serving = "A"
  35.     while not gameOver(n,scoreA, scoreB):
  36.         if serving == "A":
  37.             if random() < probA:
  38.                 scoreA += 1
  39.             else:
  40.                 serving = "B"
  41.         else:
  42.             if random() < probB:
  43.                 scoreB += 1
  44.             else:
  45.                 serving = "A"
  46.     return scoreA, scoreB


  47. def gameOver(n, a, b):
  48.     return a+b == n

  49. main()
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 02:42:30 | 显示全部楼层
Twilight6 发表于 2020-7-20 23:12
random() 函数是 random 模块的方法,当你 import random 时候要使用 randon() 函数应该这样写代码: r ...

这个n的参数是做什么的?为啥要设置n啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-21 02:45:55 | 显示全部楼层
Twilight6 发表于 2020-7-20 23:12
random() 函数是 random 模块的方法,当你 import random 时候要使用 randon() 函数应该这样写代码: r ...

程序能运行了,但是运算结果不对啊

111.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 01:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表