二级python——计算思维:自顶向下和自底向上

文章目录

  • 计算思维
  • 自顶向下的设计方法
    • 实例
    • 步骤
          • 顶层设计
          • 输出介绍信息
          • 获取参数输入
          • 程序核心:比赛过程
    • 代码
  • 自底向上

计算思维

在这里插入图片描述

  • 实证思维:以实验和验证为特征
  • 逻辑思维:以推理和演绎为特征
  • 计算思维:以设计和构造为特征

计算思维的本质抽象(Abstraction)和自动化(Automation)

自顶向下的设计方法

一个总问题开始,试图把它表达为很小的问题组成的解决办法,进而可以很容易的解决
“大事化小,小事化了”

实例

在这里插入图片描述

步骤

  1. 打印程序的介绍性信息
  2. 获得程序需要的参数probA, probB, n
  3. 利用球员A和B的能力值(获胜概率)模拟n次比赛
  4. 输出结果
    在这里插入图片描述
    这就是自顶向下的顶层设计,程序框架出来了,大的问题化成了一个个具体的小问题
顶层设计
# 自定向下第一步——顶层设计
# --------先将整体思路设计出----------------------
def main():
    # 输出介绍信息
    printIntro()
    
    # 获取用户输入
    probA, probB, n = getInputs() # 能力值(获胜概率)和次数
    
    # 模拟n次比赛
    winsA, winsB = simNGames(n, probA, probB)
    
    # 输出结果
    printSummary(winsA, winsB)
    
main()
输出介绍信息
# 开始向下设计
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):
        random_win = random.randint(0, 1)
        if serving == "A":
            if random_win < probA: # 发球方是否赢得了比分
                scoreA += 1
            else:
                serving = "B"
        else:
            if random_win < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB

def gameOver(a, b):
    return a==15 or b==15 # 谁先到15分就赢下单次比赛

在这里插入图片描述

代码

import random

# 开始向下设计
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):
        random_win = random.randint(0, 1)
        if serving == "A":
            if random_win < probA: # 发球方是否赢得了比分
                scoreA += 1
            else:
                serving = "B"
        else:
            if random_win < probB:
                scoreB += 1
            else:
                serving = "A"
    return scoreA, scoreB

def gameOver(scoreA, scoreB):
    return scoreA==15 or scoreB==15 # 谁先到15分就赢下单次比赛

# ------------------------------------------------
def printSummary(winsA, winsB):
    n = winsA + winsB
    print("竞技分析开始,一共模拟了{}次比赛".format(n))
    print("选手A获胜{}场".format(winsA))
    print("选手B获胜{}场".format(winsB))
    
"""自顶向下设计方法"""

# 自定向下第一步——顶层设计
# --------先将整体思路设计出----------------------
def main():
    # 输出介绍信息
    printIntro()
    
    # 获取用户输入
    probA, probB, n = getInputs() # 能力值和次数
    
    # 模拟n次比赛
    winsA, winsB = simNGames(n, probA, probB)
    
    # 输出结果
    printSummary(winsA, winsB)
    
main()

这个程序模拟两个选手A和B的某种竞技比赛
程序运行时,需要输入A和B的能力值(0~1),模拟比赛次数
请输入选手A的能力值(0~1): 0.5
请输入选手B的能力值(0~1): 0.45
请输入模拟次数: 10
竞技分析开始,一共模拟了10次比赛
选手A获胜3场
选手B获胜7场

自底向上

  • 开展测试的最好办法也是将程序分成小部分逐个测试
  • 执行中等规模程序的最好办法就是从结构图最底层开始,逐步向上升,先运行和测试一个基本函数,再测试由基本函数组成的整体函数,有助于定位错位

将上面代码保存为 Match,py

>>> import Match
>>> Match.gameOver(10, 1)
False
>>> Match.gameOver(15, 10)
True
>>> # 说明gameOver是正确的
>>> Match.simOneGame(0.45, 0.5)
(9, 15)
>>> Match.simOneGame(0.45, 0.5)
(15, 5)
>>># 说明simOneGame正确的
  • 点赞
  • 收藏
  • 分享
    • 文章举报
我是小杨我就这样
发布了198 篇原创文章 · 获赞 48 · 访问量 1万+
私信 关注

猜你喜欢

转载自blog.csdn.net/weixin_44478378/article/details/104550645
二级python——计算思维:自顶向下和自底向上
自底向上和自顶向下的区别
伸展树 自底向上 自顶向下
Algs4-2.2.28自顶向下与自底向上
自顶向下与自底向上的归并排序
算法——归并排序(自顶向下、自底向上)
排序之自底向上?自顶向下?--C++
自顶向下与自底向上编程思想的对比
OOP的弊端:自顶向下还是自底向上
【树】C006_平衡二叉树(自顶向下 | 自底向上)
分治法 —— 快速排序和归并排序(自底向上和自顶向下)
文法分析小结:自底向上的分析方法和自顶向下的分析方法有哪些
(leetcode322)零钱兑换 (贪心+dfs、动态规划之自顶向下和自底向上)
3.1斐波那契数列的递归、自顶向下、自底向上方法
集成测试之自顶向下、自底向上、三明治集成
经典排序之归并排序(自顶向下、自底向上)
归并排序的递归实现(自顶向下)以及迭代法(自底向上)
Huffman 树构建过程是自顶向下, 还是自底向上?
(leetcode 201)数字范围按位与的超级详解(暴力法以及剪枝、数学分析法之自顶向下和自底向上)
增量测试:自顶向下测试&自底向上测试
自底向上分析
opengl 自顶向上
自顶向下的实现
自顶向下的设计
自顶向下分析
自底向上分析总结
《计算机网络 自顶向下方法》第一章计算机网络和因特网思维导图
《计算机网络 自顶向下方法》第二章应用层思维导图
计算机网络自顶向上学习二(应用层协议)
计算机网络自顶向下第二章作业
今日推荐
周排行
AIZU 2224 Save your cats(并查集)
HTTP响应头状态码详解
Python socket编程(2)
MaxCompute Studio使用心得系列7—作业对比
Supervisor安装使用
LeetCode 164. Maximum Gap
mysql面试题: 一张表里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把mysql重启,再insert一条记录,这条记录的ID是18还是15
nutch1.2 DeleteDuplicates IndexMerger 详解
OC - @property与setter,getter方法
SpringBoot @Transactional的rollbackFor属性
每日归档
更多
2024-09-19(0)
2024-09-18(0)
2024-09-17(0)
2024-09-16(0)
2024-09-15(0)
2024-09-14(0)
2024-09-13(0)
2024-09-12(0)
2024-09-11(0)
2024-09-10(0)

玻璃钢生产厂家玻璃钢 造型雕塑透明树脂玻璃钢雕塑济南卡通玻璃钢雕塑订制东莞梵森玻璃钢雕塑厂郑州仿铜玻璃钢雕塑制作庆阳仿真玻璃钢雕塑安装济南玻璃钢雕塑摆件研发湖南公共场所艺术造型玻璃钢雕塑泸州玻璃钢雕塑厂广东户外商场美陈采购烟台清远玻璃钢切面动物雕塑长沙商商场美陈布置沈抚新区哪里有沈阳玻璃钢花盆玉溪市玻璃钢雕塑加盟商衢州玻璃钢雕塑价位绍兴玻璃钢花盆销售企业商场美陈项目施工合同鹿城玻璃钢造型雕塑山东中庭商场美陈批发价四川省玻璃钢雕塑报价太原玻璃钢雕塑专线四平玻璃钢雕塑厂家玻璃钢人体雕塑郑州专业玻璃钢人物雕塑定做价格邯郸玻璃钢卡通雕塑定制玻璃钢小动物雕塑倒模玻璃钢雕塑滁州商场开业美陈金牛玻璃钢卡通雕塑由你玻璃钢雕塑过程香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化