程序逻辑控制
在生活中,我们要完成一件比较复杂的事情时,通常是按照一定的先后次序去做的。例如要做一顿丰盛的周末午餐,我们会将整个午餐任务分解为:蒸米饭、做红烧排骨、炒芹菜、烧汤等几个子任务。而每个子任务又可以分解为一系列更小的事情,例如蒸米饭就可以分解为取米、洗米、蒸米饭三个顺序步骤。为了能够高效地、且不出差错地完成做午餐任务,我们会仔细地安排所有的具体事情,使之能够有条不紊地进行。
通过计算机程序来完成一件任务到时候,也要遵循一定的逻辑次序的。通常,计算机程序完成一件任务的逻辑次序有三种:顺序、条件分支、循环。程序中的这三种逻辑次序也称为程序的逻辑结构,它是由人类大脑的逻辑知识来决定的。Python语言为程序实现不同的逻辑结构而提供了支持。
计算机程序的最基本的逻辑结构就是顺序结构,它是指程序按照先后次序依次地执行既定的任务序列。顺序结构不需要程序设计语言的任何特别的语法支持,它只需要将程序中的语句逐次编写即可,紧接着在执行的时候也就会按顺序逐次执行。
条件分支和循环逻辑结构则需要程序设计语言的特别的语法支持。下面分别给予介绍。
条件分支
程序设计中的条件分支是指在程序执行的过程中,需要判断某种条件是否成立,并根据成立与否而做不同的操作,即根据条件的不同结果使得程序流程走向不同的分支。
例如在购买公园门票时需要根据年龄的不同来决定不同的票价:如果年龄小于18岁,则票价为5元,否则票价为10元。这一购票过程中即蕴含着一个条件判断的逻辑流程:首先判断“年龄是否小于18岁?”,如果是,则票价按照5元来计算,否则票价按照10元来计算。
Python语言为实现条件判断和分支结构共提供了三个关键词:if-elif-else。在使用过程中,根据不同的条件判断需要,共有三种形式:单项分支、双向分支、多向分支,分别表示三种不同类型的逻辑流程。这三种形式的条件分支分别代表着三种基本的逻辑过程。下面分别予以介绍。
(1)单项分支
单项分支表示的逻辑过程是指当某个条件满足时,则做指定的操作,否则什么也不做。其逻辑流程图可表示为。
Python语言只需要一个“if”关键字即可实现这一分支流程,语法为:
if condition:
statement_block
上面关键字if表示开始条件判断。其后紧跟着的“condition”为一条件表达式,表示所要判断的条件。该条件表达式的返回值为布尔值True或False。当返回值为True时,表示条件满足,这种情况下就接着执行下面的“statement_block”所表示的语句块。但当条件表达式返回值为False时,则表示条件不满足,这时不执行“statement_block”语句块,也就是if语句结束,开始执行if语句之后的代码。
从语法上说有两个细节须注意:第一个就是if语句的末尾处(即条件表达式后面)必须以冒号“:”结束。第二个就是if语句下面的语句块相对于if关键字必须有一个层级的缩进。Python语言正是通过这一的缩进来表示语句的层次关系,而不是像Java或者C++语言那样通过一对花括号来表示。
最常见的条件表达式是利用比较运算符来比较两个变量的值是否相等、是否不相等或者是否存在大小关系。例如:
age = 20 if age > 18: print('年龄大于18岁.')
如果再结合逻辑运算符,还可以判断多个条件的成立与否情况。例如判断年龄大于18岁同时性别为男性:
age = 20 sex = 'male' # 取值为male和female if age > 18 and sex == 'male': print('年龄大于18岁的男性.')
事实上,只要返回值为布尔值的表达式均可以作为if语句中的条件表达式。因此,利用成员运算符“in”或“not in”能够判断某元素是存在于序列中。例如判断某人的姓名是否在名单中存在:
>>>names = ['ZhangLi', 'WangNa', 'LiJun', 'CaiHe'] >>>person1_name = 'WangNa' >>>person2_name = 'LiLiang' >>>person1_name in names % 返回True >>>person2_name in names % 返回False
关于更多的构造条件表达式的方法见专题。
由于Python将“0”看作为False,将非0的整数(正整数和负整数)以及浮点数都看作为True。因此,即使一个普通的算数表达式也可以在if语句中作为条件表达式。例如:
if 3+2: print('3+2=5')
由于3+2的运算结果是5,Python将其视作True,因此上面的判断条件是满足的,从而程序运行结果会输出字符串:3+2=5。
(2)双向分支
双向分支的逻辑过程是当某个条件满足时,执行指定的程序代码,而当不满足时,则指定另一部分指定的代码。该逻辑过程可图示如下:
Python语言实现双向分支功能就需要“if”和“else”这两个关键字来配合使用,通常称为“if-else语句”。具体如下:
if condition: statement_block_A else: statement_block_B
同单项分支,“condition”表示所要判断的条件,当其值为True时,执行statement_block_1中的代码。而当判断条件的值为False时,则执行statement_block_2中的代码块。
举例:参观博物馆时,如果年龄大于12岁,就买成人票,否则,就买儿童票。
age = 10 if age > 12: print('请购买成人票.') else: print('请购买儿童票.')
(3)多向分支
多向分支所表示的逻辑过程是要判断多个条件,根据每个条件是否成立来决定执行不同的代码,也就是程序流程走向不同的分支。该逻辑过程如图所示:
Python语言实现多向分支是通过在if-else语句基础上再增加“elif”关键字来实现的,通常称为“if-elif-else”语句。一般形式如下所示:
1 if condition_1: 2 3 statement_block_A 4 5 elif condition_2: 6 7 statement_block_B 8 9 elif condition_3: 10 11 statement_block_C 12 13 …… 14 15 else: 16 17 statement_block_Z
上述程序中“elif”语句可以使用多次,分别用来判断不同的条件。
使用in进行多重比较
假设你要根据一个字母是否为元音字母来执行不同的操作,一种方法是给if关键字构造一个冗长的条件表达式,如下:
1 letter = 's' 2 3 if letter == 'a' or letter == 'e' or letter == 'i'\ 4 5 or letter == 'o' or letter == 'u': 6 7 print(letter, ' 是元音字母.') 8 9 else: 10 11 print(letter, ' 不是元音字母.')
实际上,可以将所有的元音字母放在一个序列对象中,例如字符串,然后通过成员运算符in来判断某个字母是否在其中。如下:
1 letter = 's' 2 3 vowels = 'aeiou' 4 5 if letter in vowels: 6 7 print(letter, ' 是元音字母.') 8 9 else: 10 11 print(letter, ' 不是元音字母.')
while循环
程序设计中的循环是指在满足指定条件下重复某操作的逻辑过程。例如打印输出存储在一个列表中的所有人名,即重复地取出列表中的人名并打印输出。再例如计算1+2+3+…+100的和,或者100!,前者就是不断的重复进行加法运算,后者就是不断的重复进行乘法运算,它们的条件是被加(或被乘)的数不超过100。
语法规则
Python语言对循环逻辑结构的支持是通过 “while”这个关键字来实现的。习惯上将之称为“while循环”、“条件循环”。
开始
条件是否满足
循环体
是
循环结束
否
Python 中 while 循环的语法形式为:
while condition: statement_block
上面语句中关键字“while”表示循环语句开始。紧跟在关键字“while”之后的“condition”为一条件表达式,同if语句中的条件表达式含义相同,表示着循环执行所要满足的条件,即当condition条件满足时就重复执行循环过程。具体地说,当程序执行至while语句处时,首先判断条件表达式condition的值,为True时,则执行由“statement_block”所表示的语句(块)。执行完成后再检查条件表达式condition的值,如果为True,则继续执行由“statement_block”所表示的语句(块),而如果检查条件表达式condition的值为False时,这时表示while循环结束,程序越过statement_block语句(块)而去执行while之后的语句。
编程实例
举例:计算1+2+3+…+100的和。
可以设求和的结果变量为sum = 0,以及一个加数变量a,然后重复地进行一个加法运算:sum = sum + a,其中在每次重复的加法运算中,令变量a依次取值为:1、2、3…,直至100
1 sum = 0 2 3 a = 1 4 5 while a<=100: 6 7 sum = sum + a 8 9 a = a + 1 #修改为下一个加数 10 11 print('1+2+3+...+100 = ', sum)
使用while循环一定要注意终止条件,防止发生无限循环。
在Python语言中没有Java以及C++语言中的“do-while”循环语句。
While循环中也可以使用 break 和 continue 语句。用法和含义与Java和C/C++相同
continue关键字
在while循环体中如果出现了continue,则终止当前循环,也就是continue之后的循环体的代码不再被执行,然后跳到循环顶端(即while条件判断处),开始下一轮循环。
例如,打印输出1-20中所有不能被3整除的整数。
1 a = 1 2 3 while a <= 20: 4 5 if a % 3 == 0: 6 7 a = a + 1 8 9 continue 10 11 print( a ) 12 13 a = a + 1
break关键字
与continue关键字的作用类似,也是强制终止循环过程,循环体中break之后的代码不会被执行。但是break是终止了整个循环,跳出while进入主程序中。
例如,编写一个循环程序,不断地接收输入的姓名,然后在屏幕输出“欢迎您 XXX”,其中“XXX”是用户输入的姓名。当输入的姓名为“over”时,整个程序结束。
1 while True: 2 3 name = input( '请输入您的姓名:’ ) 4 5 if name == ‘over’: 6 7 print( ‘再见!’ ) 8 9 break 10 11 print( ‘欢迎您’, name )
for循环
在Java语言中for循环是非常常用的循环形式,但是在Python中,for循环更确切地说是一个“序列迭代器”,因为在for语句中不存在循环变量的概念。for循环可以遍历任何有序序列或其它可迭代对象中的元素,这里的序列包含:列表,元组,字典,集合或字符串。因此,所谓的for循环只是我们习惯上的说法而已,它本质上是在遍历一个序列对象,只是可利用这种遍历过程来变相地实现循环过程的。也因此,for循环被称为“遍历循环”。通常,for循环在遍历序列中的元素时需要与成员运算符“in”结合起来。具体地说,其格式为:
for item in sequence:
statement_block
其中“sequence”为一个序列对象,“item”为临时变量,用来存储每步循环中从序列对象中取出的元素。“statement_block”为每步循环中所执行的操作语句(块)。
上述程序执行的过程为:当程序执行到for循环语句处时,首先从序列对象中取出第一个元素,赋给变量item,然后执行for循环体中的statement_block语句(块)。在执行完statement_block语句(块)后再返回到for循环语句处,从序列对象中取出下一个元素,并赋给变量item,然后再次执行statement_block语句(块)。不断重复上述过程,直至序列对象中的元素全部被遍历完成。
举例1:遍历一个列表
1 names = ["Zhang Fei", "Wang Ming", "Li Yan"] 2 3 for name in names: 4 5 print(name)
上面程序中,当执行至for语句处时,首先将列表names中的第一个元素取出来赋值给迭代变量name(此时变量name的值即为列表names中的第一个元素"Zhang Fei"),紧接着开始执行for语句下面的打印语句,即输出字符串"Zhang Fei"。执行完成后回至for语句处,接着将names列表中第二个元素取出来赋值给变量name(此时变量name的值为"Wang Ming"),然后再执行打印语句,从而输出了字符串"Wang Ming"。执行完成后再回至for语句处,继续在names中取出第三个元素赋值给变量name(此时变量name的值为"Li Yan"),然后继续执行打印语句,输出字符串"Li Yan"。执行完成后会再次回到for语句处,准备从names列表中取出元素。但是此时发现names中的所有元素已经被取出过了,因此for循环即刻结束。
程序运行结果是输出三个人名字符串:
Zhang Fei Wang Ming Li Yan
range()函数与range对象:
range()函数是Python语言的一个内置函数,顾名思义,该函数能够产生一个指定跨度范围的整数序列,用作for循环中的序列对象来控制循环过程。
该函数接受三个参数“start、stop、step”,分别用来执行要产生的整数序列的起点、终点以及步长,调用语法为:range(start, stop, step)。
在编程实践中,如果我们确实只是想执行一个循环过程,而并不需要遍历一个序列对象,那么就可以利用rang()函数来产生一个临时的整数序列,用以控制循环过程。例如:
for x in range(1,10,2):
print(x) # 输出:1 3 5 7 9
range()函数也可以省略第三个参数“step”,这时默认的步长为1。如果再省略第一个参数“start”时,则默认的起始值为0。显然,终点参数“stop”是不能省略的,并且该函数产生的整数序列中包含起点值,但不包含终点值的。
循环中的break和continue语句
在while和for循环中,除了判断循环条件是否满足来决定循环过程是否继续外,也允许程序在某些特定条件下终止循环过程,Python语言是通过break 和 continue这两个关键字来实现这一功能。用法和含义与Java和C/C++相同。当循环过程中遇到break时,则结束整个循环过程,而当遇到continue时,则结束当前循环步骤,进入到下一轮循环。
例如,打印1-10这十个数字,而唯独不打印数字“5”,就可以使用continue来跳过打印“5”这一步循环。当使用while循环时,程序如下:
1 num = 0 2 3 while num < 10: 4 5 num = num + 1 6 7 if num == 5: 8 9 break 10 11 print(num)
当使用for循环时,程序如下:
1 digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 2 3 for num in digits: 4 5 if num == 5: 6 7 continue 8 9 print(num)
上面while循环和for循环的输出结果均是:
1, 2, 3, 4, 6, 7, 8, 9, 10
(注:实际输出形式为竖行,为了排版方便,此处显示为一横行。)
上述两示例程序中,如果将continue改为break,则循环至“5”时,整个循环过程结束,数字“5”及其后的所有数字都不会被打印输出了。
标签:语句,控制,第三章,程序逻辑,while,循环,statement,条件,block From: https://www.cnblogs.com/mixiaoya/p/18019598