Python计算生态


Python计算生态
 




一、计算思维
利用计算机求解问题的思维——计算思维

三种基本的思维特征
思维种类 特征 代表
实证思维 实验和验证 物理学科
逻辑思维 推理和演绎 数学学科
计算思维  设计和构造 计算机学科

二、程序设计方法论

A:自顶向下

Python计算生态

 

#该python程序命名为:main(MatchAnalysis两个球员A和B分别赢得比赛的概率)
#MatchAnalysis.py

from random import random
#调用random函数

def printIntro():
#必要的说明
    print("这个程序模拟两个选手的某种竞技比赛")
    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)
        #设计了一个新的函数simOneGame()来模拟一场比赛
        #这个函数需要知道每个球员赢得比赛的概率,返回两个球员的最终得分。
        if scoreA > scoreB:
            winsA +=1
        else:
            winsB +=1
    return winsA,winsB
def gameOver(a,b):
#当任一个球员达到15分时比赛结束
    return a==15 or b==15
def simOneGame(probA,probB):
# 尽可能地去细节模拟比赛的过程
    scoreA,scoreB=0,0
    serving='A'
    #球员A发球
    while not gameOver(scoreA,scoreB):
    #设计了gameOver():函数,来表示比赛结束的条件
    #’while‘封装原因:简化根据不同规则修改函数的代价,提高代码可维护性
        if serving=="A":
            if random()<probA/(probA+probB):
                scoreA+=1
            else:
                serving="B"
        else:
            if random()<probB/(probA+probB):
                scoreB+=1
            else:
                serving="A"
    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()

结果演示:

Python计算生态

 

 

 

 

 


 


 

设计方法的比较
  程序规模 运行思维
自顶向下 小规模 把大问题分解成多个小问题
再将碎片组合起来
自底向上 中、大规模 先运行和测试每一个小函数
再测试由基础函数组成的整体函数

 



 

 

B.自底向上

原理:借助python解释器提供import保留字辅助开展单元测试

语法格式:import<源文件名称>

例如:对gameOver()函数进行单元测试

 

 

原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/275868.html

(0)
上一篇 2022年7月21日
下一篇 2022年7月21日

相关推荐

发表回复

登录后才能评论