python开智书

  • 完成作业方式的转变
    上班族的时间永远不够,视频没时间看?总想看完以后再动手?怎么破?

《程序员思维修炼》7.1中写到:“我们似乎有一种文化倾向,那就是本末倒置:首先努力获取信息,然后希望以后再用到它。这是大多数正规教育和公司培训的基础。但是现实世界不是这样运转的。”

读到这段话的时候思维冲击很大,其实这个道理,采铜在其《深度学习的艺术》中也反复提到:不被调用的知识是学了没用的。
所以,直接原始的方式来面对任务吧。不要等一切都准备好了才上路。

  • 作业需求分析
    一个简易的画图板,关键是要保存操作序列,实现回放

  • 任务拆解

    • 画图功能:查api,画圆;推测坐标系的原点和x,y轴;多边形实现三角形和正方形,需要根据某个点计算其它点坐标
    • 控件实现形状和颜色输入
    • 记录鼠标点击坐标和输入参数
    • 回放实现
    • 回放参数实现
    • 文件读写
  • 走过的坑

    • 理解画布的刷新机制 目标:点击鼠标的时候画出图来:

    已知:鼠标事件处理和画图都有各自的事件处理 def mouse_handler(points) def draw_handler(canvas)

    以前的认知:“画布画图是注册的时候就画好了的“ 但是,怎么接受一个鼠标事件重新画呢? 行动:重新翻看画布的例子,发现其实画布其实也是一个时间事件驱动的,simplegui是每秒画60次 验证:在draw_handler打印时间

    这个机制实际上在课程中有提到的,但没看视频,可能在基本的问题上纠结

    • 动态语言的成员访问
      将画图对象用类似c语言结构体的方式存入list,但是怎么取出来了? 理解turple的使用方式,完全不同于裹脚布一样的c系列结构体访问,干净清爽: draw_one_obj(canvas, draw_obj_list[index][0], draw_obj_list[index][1], draw_obj_list[index][2])

    • 定时器的倍数实现 定时器创建后是没法修改时间间隔,通过对最小时间间隔的倍数来实现;

    • 本地库的定时器的坑 SimpleGUICS2Pygame.simpleguics2pygame 本地调试的时候使用的是这个模块,发现回放的时候居然时间不准,怀疑是代码问题,查不出原因。 对比检查:将代码用codesculptor运行,发现定时器时间是对的。不在纠结本地库的问题。

    • to do list: 输出文件,codeskulptor是不支持的; 所以要用到其它的模块;

附录:

唯一作业:

  • 可回放的点彩画板
  • 期待:
    • 三种形状画笔可选: 三角/方形/圆形
    • 颜色可定义: 颜色名 或是 RGB 声明
    • 每次 鼠标 点击画板任意一处,都绘制一个当前画笔可用彩色形状
    • 可记录1024次点彩绘制行为
    • 可回放整个记录的绘制行为
  • 要求:
    • 基础: 有画笔,可点绘
    • 可用: 有画笔,有颜色,可点绘
    • 合格: 有画笔,有颜色,可点绘,可回放
    • 天才: 有画笔,有颜色,可点绘,可回放,回放速度可调节,回放可输出为文件

教程期待:

  • 向 6个月前的自己认真描述
  • 这个游戏整体怎么设计最简单?
  • 有哪些理解上的坑,如何能理解之?
  • 各种坑怎么证明自个儿的理解是对的?