前面已经介绍过,程序本来不是个新鲜的名词,做任何事情都需要按照一定的方法和步骤才能完成,这样的方法和步骤就是程序。但要让计算机按照既定的方法和步骤完成某项工作,就要用计算机可以识别的编程语言去编写程序。
只要用三种控制结构就可以描述清楚一个程序。这三种控制结构分别是顺序、选择、循环。
7.1顺序结构
程序的流程如果是瀑布式的,即按照语句的先后顺序依次执行,就是顺序结构。以早晨去上班这件事为例,第一步起床穿衣;第二步洗漱;第三步吃早餐;第四步骑上小电摩去公司。四个步骤环环相扣,依次执行,不可颠倒。
将早晨去上班这件事用流程图描述如图7-1:
图7-1
可以看出,这四个步骤是按照时间的先后顺序执行的。在程序中,顺序结构的代码是按照代码先后次序执行的。早期的有些编程语言是要求给每行代码编上行号的,它的执行是按照行号顺序执行的。Python中程序代码没有行号,写在前面的代码先执行,写在后面的代码后执行。
7.2选择结构
但是,早餐可以在家做,也可以到外面买,条件就是看时间充足不充足(譬如早上洗漱花费的时间太多,太懒没按时起床等等)。那么该流程图就需要加上一个条件判断(时间是否充足),相应的就有两个分支(家里做早餐,外面买早餐)。流程如图7-2所示:
图7-2
图7-2所示的流程图中,“吃早餐”要么“在家做”,要么“外面吃”,只能选择其中的一种情况,这就是选择结构。
在Python中,用if语句、if…else…语句和if…elif…else多分支语句来实现选择结构,这三种分支语句也可以互相嵌套。
- if语句
格式:if 表达式:
语句块
例:假设有30分钟以上的空闲时间,就可以做早餐。可以这样用程序描述:
time=int(input("请输入空闲时间的值:"))
if time>=30:
print("可以在家做早餐")
运行结果如下:
请输入空闲时间的值:32
输出结果为:可以在家做早餐
请输入空闲时间的值:21
无输出结果
从这个例子可以看出,如果条件time>=30成立,则输出“可以在家做早餐”;当条件time>=30不成立,则没有输出结果。这样就有点尴尬了,没有输出结果,有时会被误认为程序没有执行。
为了解决这个
- if…else…语句
格式如下:
if 表达式:
语句块1
else:
语句块2
在if…else…语句中,无论条件表达式的结果如何,都会进入下一个分支。
将上面的例子改造如下:
time=int(input("请输入空闲时间的值:"))
if time>=30:
print("可以在家做早餐")
else:
print("需要在外面吃饭")
运行结果如下:
请输入空闲时间的值:32
输出结果为:可以在家做早餐
请输入空闲时间的值:23
输出结果为:需要在外面吃饭
可以看出,if…else语句与if语句相比,既可以处理满足条件的情况,又可以处理不满足条件的情况。
- if…elif…else语句
格式如下:
if 表达式1:
语句块1
elif 表达式2:
语句块2
elif 表达式3:
语句块3
……
else:
语句块n
如果我们把上面的例子改成“空闲时间是否大于等于30分钟?满足则在家做饭,不满足时又分两种情况:空闲时间多于10分钟,就去买早餐,否则就饿着算了”,程序代码更改如下:
time=int(input("请输入空闲时间的值:"))
if time>=30:
print("可以在家做早餐")
elif time>10:
print("需要在外面吃饭")
else:
print("饿着算了吧")
运行结果如下:
请输入空闲时间的值:33
输出结果:可以在家做早餐
请输入空闲时间的值:23
输出结果:需要在外面吃饭
请输入空闲时间的值:8
输出结果:饿着算了吧
7.3循环结构
如果每周上5天班,那么每天早上的情况都是一样的,只要描述玩星期一的活动情况,再加上一句“从周一到周五,天天如此”就可以了。这种反复做同一件事的情况,就是循环。程序代码中有一段代码需要反复执行,那么,可以将这段代码看成一个整体,被称为循环体,而将循环的次数或者终止条件称为循环结构。
将图7-2中的部分程序作为循环体,再加上循环控制结构,就形成了可以描述星期一到星期五每一天早晨上班的活动情况。见图7-3。
Python中的循环结构可以用while语句或for语句来实现。
1、while语句
在while循环中,起到重要作用的是条件表达式,如图7-3中的n<=5。当条件表达式的返回值为真时,则执行循环体中的语句,执行完毕后,重新判断条件表达式的返回值,直到表达式的返回值为假时,退出循环。
对于图7-3所描述的问题可以用while语句解决,代码如下:
n=1
while n<=5:
time=int(input("请输入空闲时间的值:"))
if time>=30:
print("可以在家做早餐")
else:
print("需要在外面吃饭")
n+=1
程序运行结果如下:
请输入空闲时间的值:21
输出结果为:需要在外面吃饭
请输入空闲时间的值:32
输出结果为:可以在家做早餐
请输入空闲时间的值:12
输出结果为:需要在外面吃饭
请输入空闲时间的值:21
输出结果为:需要在外面吃饭
请输入空闲时间的值:43
输出结果为:可以在家做早餐
可以看出,在条件表达式n<=5中,变量n是控制循环体执行次数的关键,变量n的初值为1,保证了第一次运行程序时可以进入循环体。如果程序要让程序终止(即不再进入循环体),必须使表达式n<=5不成立,即n>5。由于语句n+=1包含在循环体内,每执行一次循环体,n的值才能增加1。要使n>5,就要执行5次循环体。从运行结果看,上述分析是完全正确的。
在用while语句编写循环结构的程序时,从表面上看是不用考虑循环次数的,实际上条件表达式及循环控制变量就已经隐含了循环次数。
2、for语句
for循环是一种可以很直观的看出循环次数的控制结构。语法格式如下:
for 迭代变量 in 对象:
循环体
其中,迭代变量用于保存读取出的值;对象可以是任意有序的序列对象,如字符串、列表和元组等(列表和元组都是python中可以使用的数据类型,后面将会介绍)。
字符串“编程其实很简单”其实是由7个字符构成的序列,其中的每一个字符都可以通过命令取出。为了证明这个猜想,可以试着运行一下如下程序:
string="编程其实很简单"
print(string)
for ch in string:
print(ch,end=' ')
运行结果如下:
编程其实很简单
编 程 其 实 很 简 单
其中,第一个print()语句输出字符串string,第二个print()语句为输出字符串string中的每一个字符(元素)。end=’ ’的含义是分隔符为一个空格,省略end表示用换行的方式进行分隔。
图7-3
3、跳转语句break和continue
break可以使循环提前结束,而continue仅仅提前结束本趟循环,转入下一趟。打个比方:把闹钟的电池卸掉,让指针不再转圈,就好比break;通过手动方式,把指针调到0刻度,只是少转了半圈,但接下来都正常,就好比continue。
我们把上面“吃早餐”的那个例子的条件修改一下:时间段改为从星期一到星期天,星期四出差,星期六、星期天休息。程序将修改为如下代码:
n=1
while n<=7:
if n==4:
print("星期"+str(n)+"出差")
n+=1 #第一个n+=1语句
continue
if n<6:
time=int(input("请输入空闲时间的值:"))
if time>=30:
print("星期"+str(n)+"可以在家做早餐")
elif time>10:
print("星期"+str(n)+"需要在外面吃饭")
else:
print("星期"+str(n)+"饿着算了吧")
else:
print("星期"+str(n)+"休息")
break
n+=1 #第二个n+=1语句
运行结果如下:
请输入空闲时间的值:21
星期1需要在外面吃饭
请输入空闲时间的值:12
星期2需要在外面吃饭
请输入空闲时间的值:4
星期3饿着算了吧
星期4出差
请输入空闲时间的值:32
星期5可以在家做早餐
星期6休息
从上面的运行结果来看,当变量n=4时,输出了“星期4出差”,也执行了第一个n+=1语句,但未执行第二个n+=1语句(如果两个都执行了,那么就不会出现星期五的情况)。这进一步验证了continue只会提前结束一趟循环,下一趟循环还会继续。
只出现了“星期6休息”,没有出现星期天的信息,可以看出,变量n的值未达到7,在变量n=6时循环就提前结束了。所以,break可以使循环全部终止。
如若转载,请注明出处:https://www.vsaren.com/74895.html