北理网课 - Python语言程序设计 - 8.2 Python程序设计思维

版权声明:本文为博主原创文章,转载请留言通知。 https://blog.csdn.net/silent0001/article/details/88865687

一、计算思维与程序设计

计算思维:第三种人类思维的特征。

-逻辑思维:推理和演绎,以数学为代表。如:A→B,B→C,则有A→C。

-实证思维:实验和验证,物理为代表。如:物理学家提出引力波的概念,但需要大量实验来验证引力波的存在。

-计算思维:设计和构造,计算机为代表。如:汉诺塔递归。

---------------------------------------------------------------------------------------------------------------------------

计算思维中,有抽象自动化

-计算思维:Computation Thinking。

-抽象问题的计算过程,利用计算机自动化求解。

-计算思维是基于计算机的计算方式。

---------------------------------------------------------------------------------------------------------------------------

例:求1+2+…+100的和:

数学思维:高斯小时候这样弄:1+100=101,2+99=101,……这样的循环有50次,则有:首项加末项,然后乘项数除以二。此为数学思维。

计算思维呢?用Python语言来做,此项代码可以写为:

s = 0
for i in range(1, 100):
    s += i

这是计算思维,是现代人的方法。

例:求圆周率的计算:

数学思维:当时,没有其他方法。数学家一直在找方法计算圆周率,最后、找到了一公式:

\sum [\frac{1}{16^{k}}\left ( \frac{4}{8k+1}-\frac{2}{8k+4}-\frac{1}{8k+5}-\frac{1}{8k+6}\right )] 这个公式,k从零到无穷。

计算思维:我们用正方形,中间画一个内切圆,用random()方式向整个正方形撒点,撒好多,最后用点迹大约算出π的大小

汉诺塔问题:

前面的数学家推导过,把最下面的圆盘移到另一根柱子上,要2^{n}-1次换圆盘。计算思维迭代就可以了。

count = 0
def hanoi(n, src, dst, mid):
    ...#(略,这一章我会在后面写道,里面内容在另一个网站上可以看,当时我记在本子上了,后面发到博客上)
hanoi(3, 'A', 'C', 'B')
print(count)

例:天气预报:

原先,我们来靠实证思维和逻辑思维来猜后面的天气。

现在,计算机有MM5@超算模型,这个模型把地球化成好多方块,分成一格一格的,把天气模型按照以前的顺序往后面推。

例:量化思维:

以前,不用计算机的时候,分析股票涨跌,根据经验,往后判断涨跌。这是实证思维和逻辑思维。

有计算机时,通过机器学习的方式,预测未来涨跌,利用计算机完成未来交易。

---------------------------------------------------------------------------------------------------------------------------

计算思维

1、抽象问题的计算过程,利用计算机自动化求解。

-计算思维基于计算机强大的算例及海量数据

-抽象计算过程,关注设计和构造,而非因果

-以计算机程序设计为主要实现手段

2、编程是将计算思维变成现实的手段

=======================================================================

二、计算生态与Python语言

从开源运动说起:

-1983年,Richard Stallman启动GNU项目,通过这个项目,他希望能做出来一个操作系统

-1989年,GNU通过许可协议诞生,自由软件时代到来(自由软件,就是不再像工业产品一样通过商业来分发销售,而是通过互联网,通过免费的拷贝和使用来进行分发)

-1991年,Linus Torvalds发布了Linux内核(第一个操作系统极小内核)

-1998年,网景浏览器开源,产生了Mozilla,开源生态逐步建立

---------------------------------------------------------------------------------------------------------------------------

计算生态:

开源思想深入演化和发展,形成了计算生态

计算生态以开源项目为组织形式,充分利用“公式原则”和“社会利他原则”组织人员,在竞争法治、相互依存和迅速更迭中完成信息技术的更迭换代,形成了技术的自我演化路径。

计算生态没有顶层设计、以功能为单位、具备三个特点:

  1. 竞争发展
  2. 相互依存
  3. 迅速更迭

计算生态与Python语言

-以开源项目为代表的大量第三方库

        Python语言提供超过13万个第三方库

-库的建设经过野蛮生长和自然选择

        同一个功能,研究的人不同(学生、老师、科学家……),做法也不同,有可能有2个及以上的第三方库

-库之间相互关联使用,依存发展

         Python库间广泛联系,逐级封装

-社区庞大,新技术更迭迅速

         AlphaGo深度学习算法采用Python语言开源

计算生态的价值

创新:跟随创新、集成创新、原始创新

-加速科技类应用创新的重要支撑

-发展科技产品商业价值的重要模式

-国家科技体系安全和稳固的基础

计算生态的应用

刀耕火种 变为 站在巨人的肩膀上

-编程的起点不是算法而是系统

-编程如同搭积木,利用生态计算为主要模式

-编程目标是快速解决问题

---------------------------------------------------------------------------------------------------------------------------

                                        API(应用程序接口) !=  生态 

=======================================================================

三、用户体验与软件产品

用户体验

实现功能 → 关注体验

-用户体验指用户对产品建立的主观感受和认识

-关心功能实现,更关心用户体验,才能做出好产品

-编程只是手段,不是目的,程序最终为人类服务

提高用户体验方法

方法1:进度展示

-如果程序需要计算时间,可能产生等待,请增加进度展示

-如果程序有若干步骤,需要提示用户,请增加进度展示

-如果程序可能存在 大量次数循环,请增加进度展示

方法2:异常处理

-当获得用户输入,对合规性需要检查,需要异常处理

-当读写文件时,对结果进行判断,需要异常处理

-当进行输入输出时,对运算结果进行判断,需要异常处理

其他类方法:

-打印输出:特定位置,输出程序运行的过程信息

-日志文件:对程序异常及用户使用进行定期记录

-帮助信息:给用户多种方式提供帮助信息

……

---------------------------------------------------------------------------------------------------------------------------

                                                   软件程序  →  软件产品

                                           用户体验是程序到产品的关键环节

=======================================================================

四、基本的程序设计模式

从IPO开始…

-I:Input 输入,程序的输入

-P:Process 处理,程序的主要逻辑

-O:Output 输出,程序的输出

首先确定IPO,明确计算功能和功能边界然后编写程序,将计算求解的设计变成现实最后调试程序,确保程序按照正确逻辑能够正确运行

基本程序设计模式

模块化设计

-通过函数封装或对象封装程序划分为模块间的表达

-具体包括:主程序,子程序和子程序间关系

-分而治之:一种分而治之、分层抽象、体系化的设计思想

-紧耦合:两个部分之间交流很多,无法独立存在

-松耦合:两个部分之间交流较少,可以独立存在

-模块内部紧耦合,模块之间松耦合

配置化设计

-引擎+配置:程序执行 和 配置分离,将可选参数配置化

-将程序开发变成配置文件编写,扩展功能 而不修改程序

-关键在于接口设计,清晰明了、灵活性可靠

应用开发的四个步骤

从应用需求到软件产品

-产品定义:对应用需求充分理解和明确定义

  产品定义,而不仅是功能定义,要考虑商业模式

-系统架构:以系统方式思考产品的技术实现

  系统架构,关注数据流,模块化、体系结构

-设计与实现:结合架构完成关键设计及系统实现

  结合可扩展性、灵活性等进行设计优化

-用户体验:从用户角度思考应用效果

  用户至上,体验优先,以用户为中心

 

猜你喜欢

转载自blog.csdn.net/silent0001/article/details/88865687