主控程序
回忆上次内容
- 上次把 apple.py 拆分成了
- 输入
- 主函数
- 引用模块中变量的时候
- 要带上包(module)名
- get_fruits.a
- get_fruits.b
- 要带上包(module)名
- 最终
- 拆分代码 成功!
- 可以将程序
- 再拆分成
- 输入
- 输出
- 然后 再由主函数调用吗?🤔
- 再拆分成
建立主控
- 新建一个 main.py 文件
- 导入 input、output 两个包
- 然后运行
- vi -o main.py get_fruits.py output.py
- 增大窗口宽度
- ctrl+w , +
- 减小窗口宽度
- ctrl+w , -
运行
- 运行成功
程序结构
- 既然我在 main.py 里面已经导入了 input 这个包
- 我还有必要在 output 中导入这个包么?
- 实践出真知
- 试着删除output中的第一句
尝试
- 失败!
- 还是需要在 output 中导入 get_fruits 这个包的
- 虽然 main 认识了 get_fruits
- 但是 output 不认识也不行
- 不认识 就无从得到输入的数值
- 我们跳出具体文件
- 去观察文件架结构
文件结构
- 可以看到出现了
- 两个被引用包的 pyc 文件
- 能对比一下吗?
对比
- 编译后的pyc文件
- 依稀能够看到
- 字符串
- 变量名
- 函数名
- 依稀能够看到
- 模块隐隐约约
- 是可以看懂的
顺序过程
- 其实代码可以分成三块
- 输入
- 处理
- 输出
- 这是一个典型的
面向过程
的 程序面向过程
就是 Procedure Oriented- 按部就班
- 把复杂的过程
- 分解成 相对简单明确的模块
- 每个模块 做自己简单明确的事情
- 专业分工
- 提高效率
- 把复杂的过程
- 这是工业时代
- 提高效率的思维模式
分工明确
- 铁路警察
- 各管一段
- 不要想着怎么发明轮子
- 轮子有现成的
- 拿来用就完事了
- 接下来把模块分成三块
功能 | 作用 | 模块名 |
---|---|---|
输入 | 接收到什么信号 | get_fruits |
处理 | 怎么处理信号 | process |
输出 | 最终输出什么信号 | output |
- 那建立 process.py
三步走
- main
- 需要 3 个包都导入
- process
- 只需要导入 get_fruits
- get_fruits
- 虽然被导入了两次
- 但是输入数值的部分
- 只被执行一次
- output
- 只需要 process 模块求和的结果
- 而不需要导入 get_fruits 模块
- 需要明确 total 来自于 process 包
- 测试结果
- 数字(123)当做测试用例的话
- 能成功
- 但是用字母(abc)当测试用例的话
- 会如何呢?
- 数字(123)当做测试用例的话
不成功 🙅🏻♀️
- 问题出在process.py中
- int(a) + int(b)那一步
- 所以需要在那里
- try
- except
处理异常
- 修改代码
运行结果
- 字母的测试用例
- 可以顺利地报错
- 但是现在还面临一个问题
- 就是不明确
- 不知道
- 是 a 出了问题
- 还是 b 出了问题
- 报错细节不明确
修改代码
- 在process模块中
- 分别try…except…
- 这样运行是没有问题的
优化代码
- 不过应该还有更好的方式
- 转化工作
- 其实应该在输入部分完成
- 输入变量的容错处理
- 应该在输入的时候 就第一时间做
- 不要留到数据处理时 才做
总结
-
我们细化了主控程序(main.py)
- 导入(get_fruits.py)
- 处理(process.py)
- 输出(output.py)
-
使用了 try 结构
- try
- except
- 发现异常就报错
-
输入部分的错误
- 应该在 输入部分来报
-
具体怎么报呢?🤔
-
下次再说!👋
-
蓝桥->https://www.lanqiao.cn/courses/3584
-
github->https://github.com/overmind1980/oeasy-python-tutorial
-
gitee->https://gitee.com/overmind1980/oeasypython