一、课程回顾
上节课我们引用Python提供的海龟库,画出了正方形、奥运五环等图形。通过这些画图程序的编写,你可能感觉到,原来Python没有想象中的难嘛!是的,只要我们认真把Python的基础打好,你写起程序会越来越得心应手,比起Scratch会更加方便和流畅,而且功能上绝对不可同日而语。
对Python编程有了感性的认识之后,在这一节,我们需要回过头来,学习一些Python编程的基础知识,比如程序设计的方法。我们在Scratch编程课中提到,写程序要按照一定的方法和思路,才能更好地分析问题、处理问题、解决问题。
在Scratch编程篇刚开始的时候,我们学习过程序编写方法。现在,我们不妨来复习一下。
二、规范的程序编写方法
编写任何程序,都需要一个分析问题、设计程序、编写程序和测试、完善的过程,而不是看到问题,直接打开 编程工具写代码。养成良好的编程习惯,是从规范开发过程开始的。
开发程序的过程如果用流程图表示是这样的:
解释一下这个流程图:
1、开始
可能是老师发给你的学习任务,也可能是你自己想创作一个程序。
2、明确设计目标
你必须先想清楚,我做这个程序是为了解决什么问题?比如,是绘制动画,还是做数学计算?是用于学习的还是用于娱乐的?另外,你还要考虑一下,这个程序是我自己玩,还是让别人使用?明确了使用者,我们才会从他们的角度出发设计程序。要知道,好的程序是那些解决了真正问题,满足了使用者(使用者也可能是你自己)需求的程序,而不是仅仅我们自己觉得“好玩”的程序。
3、思考算法
在明确了目标的基础上,我们还要设计出合适的算法。这里的算法是指广义上的,是按照什么顺序,完成什么步骤,来实现程序目标,比如:
- 使用者会向我的程序提供什么信息?是鼠标点击某个按钮,还是要某些数字,甚至语音和动作?(输入)
- 我的程序会针对这些输入做什么样的响应呢?用哪些场景和角色来表现?角色之间的怎么分工合作?(处理)
- 然后又用什么形式反馈给使用者呢?(输出)
实际上,上述这三部分,就是所谓的IPO(Input-Process-Output)程序模式,即:
- I:Input 输入,程序的输入,这里的输入可能不一定是你自己输入的,有可能是网络获取的,或者系统产生的随机数、从文件读取的等等;如果你要计算圆形、正方形的面积,你就得输出圆的半径或正方形的边长,要比较两个人的身高体重,就得输入这两个人各自的身高体重;
- P:Process 处理,程序的主要逻辑,对输入的数据进行某种处理,狭义上程序的处理算法主要体现在这一步;比如,计算圆的面积,你会套用圆的面积公式,将半径代入到进行计算;比较两个人的身高,会对身高进行比较运算(>、=、<,>=,<=)等。
- O:Output 输出,程序的输出,可以是输出到屏幕、文件、网络、打印机等等。比如,在终端输出计算的面积,或者用图形表示两个人身高对比情况。
IPO可以说是几乎每个程序都要具备的模式,缺少任何一部分,程序都是不完整的。当然也有一些例外,比如你写了一个无限循环程序,这种程序没有输入输出,但有时这种程序可以用来测试计算机的性能。但是在一般情况下,我们都会写IPO模式的程序。
4、流程分解
考虑算法时,你对问题的分析更多在大脑中进行。为了让思考的成果展示出来,便于自己整理思路,也便于和其它人交流思路,你可以画出流程图。在程序处理逻辑较为复杂的情况下,这样做非常有用!
5、编写程序
用你掌握的编程语言——当然,这里我们就指Python了——将算法翻译成特定的指令。如果你画了流程图,这个“翻译”过程会更简单,因为指令框中的内容和指令一般有比较明确的对应关系。
6、测试程序
程序写完可不是万事大吉了,你要多运行几次,看看程序是否符合预先设计的算法,发现问题必须修正(甚至有时要修改算法),再次测试,如此重复直到完全实现设计目标为止。
这里要注意的是,没有人编写的程序是一个“Bug”都没有的,千万不要认为自己写的程序绝对没问题! 你觉得程序没问题,那只是因为程序中还有Bug没被发现罢了。发现了Bug也不必烦恼,程序就是在不断修改Bug的过程中才完善起来的呢!
7、发布
完成作品,我们会把程序打包,发布给用户使用。
8、维护
程序在使用过程中,可能会有新的需求产生,也会发现一些在测试的时候尚未发现的问题,这时你作为开发者,要对它进行完善或纠正错误,这称为维护。维护过程的长短与特定的程序有关,对我们学习阶段写的程序来说,这个过程可以忽略。
以上就是完整的程序设计和开发过程。
三、Python程序的输入和输出
还记得我们在Scratch中是怎么进行程序的输入和输出的吗?
这里我故意在输入和输出加了一行设置变量,以便我们区分 I-P-O三个环节,事实上我们可以把连接指令直接放到说话指令中,第二行指令就不用写了。这样似乎就没有了中间的处理数据环节,实际上,它只是把“处理”和“输出”压缩在一行中了而已,对输入不做处理直接输出也是可以的,不过这样的程序又有什么意义呢?
Python程序与Scratch相比,支持的输入输出方式就丰富多了,但我们刚开始学习Python,只要掌握在终端进行输入输出就可以。这里最重要的就是要掌握输入和输出函数。这里的函数,你可以理解为像Scratch中的一条指令积木一样,是Python提供的现成指令,可以直接调用。有些函数需要特定的参数(类似我们使用Scratch积木时在空白处填写的内容),我们可以在调用函数的时候,在它后面的括号里加上相应的参数。
- 输入函数 input
# input 函数的格式
input( [prompt] )
这里,[prompt]代表的是可选参数,即可以输入也可以不输入,它是我们在让用户输入信息的时候显示的提示信息。例如:
# 输入信息
name = input('请输入你的姓名:')
print(name)
这个程序用到了变量,变量我们在Scratch中经常使用,已经不陌生了。在Python中定义变量的方法比Scratch简单,只要写一个变量的名称,给它指定一个值就可以(使用“=”号),注意,这里的“=”号是赋值的意思,也就是Scratch中的“将变量设为”,而不是数学上的“等于”。这一点可能和我们平时的习惯不太一样,在接下来的课程里我们还会讲解变量的定义和使用,这里我们要先明白,第一行代码的作用是定义了一个变量name,把input函数的返回值(也就是用户输入的值)放在变量name里,第二行代码负责打印变量name。
运行程序,终端会显示“请输入你的姓名:”,这个句子也就是你提供给input函数的参数,如果你不写,光标会停留在终端,但什么都不显示,等待你输入,这对用户当然是不友好的,我怎么知道程序让我干什么呢?因此,一般我们还是会输入这个参数给input函数,提示用户在光标处输入。当你输入自己的姓名,如“哈利波特”,这个名字会被显示在终端上。这用的是输出函数print。
- 输出函数 print
# print 函数的格式
print( x )
这里的x代表你要输出的内容,x可以是一个变量名称,也可以是一个数字、一个字符串(就是用单引号或双引号包括起来的字符)甚至一个综合了变量和其它元素的表达式。我们可以多试验一下,看看print函数针对不同的参数是怎么把它输出的。
这里举几个例子:
name = '张三'
print(name)
print('李四')
print(500)
print(1+2*3)
甚至,print函数还可以一次输出多个值,比如:
name = '哈利波特'
print('你好,', name,'欢迎来到魔法学院!')
试一下,看看程序输出什么?
四、课后作业
让我们使用input函数和print函数完成一个自我介绍,格式如下:
我叫XXX,来自XXX,我的爱好是XXX。
这里的XXX分别是姓名、地区和爱好,请你使用input输入函数,在终端输入这几个数据,保存到不同的变量中,然后用print一次性输出它们。例如:
我叫哈利波特,来自魔法学校,我的爱好是学习好玩的魔法。