Skip to content

Latest commit

 

History

History
253 lines (181 loc) · 5.79 KB

217-910578-画松树_draw_pine.sy.md

File metadata and controls

253 lines (181 loc) · 5.79 KB
show version enable_checker
step
1.0
true

画松树

回忆上次内容

  • time 是一个 module
    • import time 可以做 和时间相关的 事情
    • time.time()
      • 得到 当前时间戳
      • 也就是 Epoch
    • time.localtime()
      • local为本地
      • 得到 本地时间元组
    • time.asctime()
      • asc 为 ascii
      • 得到 时间日期字符串
  • 完整写法为
    • 三个函数层层嵌套
    • asc_time = time.asctime(time.localtime(time.time()))
  • 简略的写法为
    • asc_time = time.asctime()

图片描述

  • 可以自己定义层层嵌套的函数吗?

  • 都是层层嵌套调用

  • 一层层嵌套的

  • 这次我们来画一颗松树

松树

  • 松树可以分成两块
    • 树冠
    • 树干

图片描述

  • 那么我们来定义函数

分工细化

图片描述

  • 具体怎么画呢?

直接画

图片描述

图片描述

  • 可以出现
  • 但是有点像一个箭头

再定义一个新的函数

  • draw_pine_triangle专门画三角
def draw_pine():
    draw_pine_head()
    draw_pine_body()

def draw_pine_head():
    draw_pine_triangle()
    draw_pine_triangle()

def draw_pine_triangle():
    for i in range(6):
        for j in range(6-i):
            print(" ",end="",sep="")
        for k in range(2*i+1):
            print("*",end="",sep="")
        print()


def draw_pine_body():
    for i in range(5):
        for j in range(5):
            print(" ",end="",sep="")
        for k in range(3):
            print("*",end="",sep="")
        print()
    for i in range(6):
        for j in range(6-i):
            print(" ",end="",sep=",")

if __name__ == '__main__':
    draw_pine()

效果

  • 效果还可以

图片描述

  • 不过太固定了
  • 可以给一个数量参数
  • 来决定树的大小么?

代码改造

def draw_pine(n=5):
    draw_pine_head(n)
    draw_pine_body(n)

def draw_pine_head(n):
    draw_pine_triangle(n)
    draw_pine_triangle(n)

def draw_pine_triangle(n):
    for i in range(n):
        for j in range(n+1-i):
            print(" ",end="",sep="")
        for k in range(2*i+1):
            print("*",end="",sep="")
        print()


def draw_pine_body(n):
    for i in range(n):
        for j in range(n):
            print(" ",end="",sep="")
        for k in range(3):
            print("*",end="",sep="")
        print()
    for i in range(n+1):
        for j in range(n+1-i):
            print(" ",end="",sep=",")

if __name__ =='__main__':
    draw_pine(5)

加入参数

  • n=6

图片描述

  • n=9

图片描述

调用流程

图片描述

  • 我们试着调试一下
  • step into draw_pine_triangle

调用堆栈

图片描述

  • 我们一步步step into进去之后
  • 看到一层层函数的调用
  • 压成的一个函数堆栈
  • 好像一层层下命令

下命令

  • 当然上面还有python来对draw_pine调用(call)

图片描述

大蒲扇

  • 函数调用就像一个大蒲扇

图片描述

  • 从主干开始
  • 有各种分支
  • 最终最主要的还是主干
  • 就像天津海河

海河

  • 天津号称
    • 九河下梢天津卫
    • 三道浮桥两道关

图片描述

  • 无数支流汇成九条河
    • 九条河汇成海河入海
    • 海河虽然很短
    • 起名字还得是海河水系
    • 他是汇总
    • 起关键作用
  • 就像大蒲扇的手柄

颗粒度

  • 原来写在一个函数里面的
  • 现在细分成了多个函数
  • 增加了颗粒度

图片描述

细颗粒度 粗颗粒度
Fine-grained Coarse-grained
指代码被分解为较小的、相对独立的单元 代码被组织成较大的模块或函数,执行相对复杂的任务
这样的代码通常更加灵活,因为可以对小的单元进行独立修改和测试,但也可能导致代码结构较为复杂,因为有更多的小单元需要管理。 这种代码可能更容易理解整体的逻辑,但在修改时可能会影响较大的范围。
  • 对齐颗粒度是什么意思?

对齐颗粒度

  • Aligning Granularity 通常指的是
    • 在不同层次或组件之间调整和统一处理数据、任务或操作的精细程度
    • 以确保系统的高效、一致和可管理性

图片描述

  • 交流在同一位面
    • 要抽象就都抽象
    • 要细节就都细节

分工细化

  • 定义了四个函数
    • 函数可以调用函数
    • 每个函数有自己的代码段
      • 从零开始
      • 完成一系列指令
      • 产生返回返回值
      • 并且return回到调用的位置
      • 继续进行
  • 为什么要搞成这样一层层的呢?
  • 我们先去总结一下

总结

  • 我们这次完成了画松树工作
    • 通过一层层的工作的细分
    • 定义了五个函数
    • 然后使用函数调用完成工作
  • 每个函数都有自己的代码段
    • 负责各自的任务
  • 如何理解这个职业分工各司其职呢?🤔
  • 我们下次再说👋