求大佬帮忙解答!万分感谢!!!
from random import randomdef printIntro():#程序的介绍性信息
print("这个程序模拟两个选手A和B的某种竞技比赛")
print("程序运行需要A和B 的能力值(0-1之间的小数)")
def getInputs(): #获得程序运行需要的参数a,b,n
a = eval(input("请输入选手A的能力值(0-1):"))
b = eval(input("请输入选手B的能力值(0-1):"))
n = eval(input("模拟比赛的场次:"))
return a,b,n
def simNGames(n,probA,probB): #利用球员AB的能力值probA,probB模拟n场比赛
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() < probA:
scoreA += 1
else:
serving = "B"
else:
if random() < probB:
scoreB += 1
else:
serving = "A"
return scoreA,scoreB
def gameOver(a,b):
return a == 15 or b ==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))
def main():
printIntro()
probA, probB, n = getInputs()
winsA, winsB = simNGames(n, probA, probB)
printSummary(winsA, winsB)
main()
为什么最后一段def() 到 main() 只能放在底部??放在顶部就出错?? 本帖最后由 heidern0612 于 2020-7-7 15:39 编辑
函数定义时候的顺序无所谓,但是你调用的时候就有所谓了。
调用的时候没办法先执行,再往下部去找。
也就是说,你前面定义的顺序怎么换都行,因为函数并不是按从上到下的顺序来进行查找的。
但是你程序执行的时候,是按顺序来的。
如下这种情况是允许的:
def checkname(name):
print(name)
print(x)
x = 10
checkname(456)
但是,这种就会报错了。
def checkname(name):
print(name)
print(x)
checkname(456)
x = 10 heidern0612 发表于 2020-7-7 15:34
函数定义时候的顺序无所谓,但是你调用的时候就有所谓了。
调用的时候没办法先执行,再往下部去找。
意思就是 自己定义的函数在调用的时候只能后执行?意义何在?既然前边已经定义了(比如:def printIntro),为何还要再定义一下def main(): 在它的下面再加 printIntro? 本帖最后由 heidern0612 于 2020-7-7 15:45 编辑
我感觉你没理解我说的意思。
你定义函数的时候,顺序无所谓,但是调用一定要放在最后。你不能先调用,再定义,这种肯定是会报错的。
既然前边已经定义了(比如:def printIntro),为何还要再定义一下def main(): 在它的下面再加 printIntro?
你定义了之后,不是没调用吗? 不是在main函数里面调用的吗?这不就是简单的函数套函数的应用吗?
你不觉得把所有函数的调用都放在一个函数里,只调用一个函数就调用了所有定义的函数,这种写法比较简单明了吗?....
假如说我程序写了一万个定义函数,我还一万个每个都调用一遍?....
我肯定是需要把所有调用的函数都封装到一个函数里面,直接调用这个主函数就好了啊。
heidern0612 发表于 2020-7-7 15:42
hi,5466 发表于 2020-7-7 15:39
意思就是 自己定义的函数在调用的时候只能后执行?意义何在?既然前边已 ...
好的 小白一个 有点迷糊 谢谢大佬 hi,5466 发表于 2020-7-7 15:44
好的 小白一个 有点迷糊 谢谢大佬
以后写的程序复杂了,这种嵌套调用是很实用的,因为你只需要写一个主函数,调用主程序接口就好了。
没必要对每个函数都调用一遍,太傻,改起来也太累人。 heidern0612 发表于 2020-7-7 15:46
以后写的程序复杂了,这种嵌套调用是很实用的,因为你只需要写一个主函数,调用主程序接口就好了。
没 ...
受教了! 万分感谢!
{:5_99:}我刚开始学习 照着课本打 但是没看明白 hi,5466 发表于 2020-7-7 15:50
受教了! 万分感谢!
我刚开始学习 照着课本打 但是没看明白
它山之石可以攻玉,学编程最怕钻牛角尖,如果一时看不懂,可以看看别的类似教程,有时候灵关一闪就明白了。 heidern0612 发表于 2020-7-7 15:54
它山之石可以攻玉,学编程最怕钻牛角尖,如果一时看不懂,可以看看别的类似教程,有时候灵关一闪就明白了 ...
好的!
页:
[1]