一、自顶向下的基本思想
是以一个总问题开始,试图把它表达为很多小问题组成的解决方案。
二、本问题的基本思路
因此我们只要写出一个个函数,在对他们进行调用就可以了。
三、代码(以篮球比赛为例)
import random def printIntro(): print("这个程序模拟两支球队A和B的篮球比赛") print("程序运行需要球队A和B的能力值(以0到1之间的小数表示)") print("作者:Regan_White_Lin 12") def getInputs(): a = eval(input("请输入球队A的能力值(0-1): ")) b = eval(input("请输入球队B的能力值(0-1): ")) n = random.randint(1,1000) return a, b, n def simOneGame(n,probA, probB): scoreA, scoreB = 0, 0 serving = "A" a=0 while (a<=n) or (a>n) and (scoreA==scoreB): if serving == "A": if random.random() < probA: scoreA += 1 else: serving="B" else: if random.random() < probB: scoreB += 1 else: serving="A" a+=1 return scoreA, scoreB def printSummary(n, scoreA, scoreB): print("竞技分析开始,共模拟{}个回合".format(n)) print("球队A获得{}分".format(scoreA)) print("球队B获得{}分".format(scoreB)) if scoreA>scoreB: char='A' else: char='B' print("获胜方是球队{}".format(char)) def main(): printIntro() probA, probB, n = getInputs() scoreA, scoreB = simOneGame(n,probA, probB) printSummary(n, scoreA, scoreB) main() input("按下任意键退出程序......")
四.模拟体育竞技分析(假设谁先获得100分谁胜利)
代码如下
from random import random def printIntro(): print("by 2018310143103") 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 gameOver(a,b): return a==100 or b==100 def simOneGame(probA, probB): scoreA, scoreB = 0, 0 serving = "A" while not gameOver(scoreA, scoreB): if serving == "A": if random() < probA: scoreA += 1 else: scoreB += 1 else: if random() < probB: scoreB += 1 else: scoreA += 1 return scoreA, scoreB 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 = getInputs() winsA, winsB = simNGames(n, probA, probB) printSummary(winsA, winsB) main()