首页 > 编程语言 >第三章 程序逻辑控制

第三章 程序逻辑控制

时间:2024-02-18 17:22:06浏览次数:25  
标签:语句 控制 第三章 程序逻辑 while 循环 statement 条件 block

 

程序逻辑控制

       在生活中,我们要完成一件比较复杂的事情时,通常是按照一定的先后次序去做的。例如要做一顿丰盛的周末午餐,我们会将整个午餐任务分解为:蒸米饭、做红烧排骨、炒芹菜、烧汤等几个子任务。而每个子任务又可以分解为一系列更小的事情,例如蒸米饭就可以分解为取米、洗米、蒸米饭三个顺序步骤。为了能够高效地、且不出差错地完成做午餐任务,我们会仔细地安排所有的具体事情,使之能够有条不紊地进行。

       通过计算机程序来完成一件任务到时候,也要遵循一定的逻辑次序的。通常,计算机程序完成一件任务的逻辑次序有三种:顺序、条件分支、循环。程序中的这三种逻辑次序也称为程序的逻辑结构,它是由人类大脑的逻辑知识来决定的。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

相关文章

  • 《程序是怎样跑起来的》第三章
    第三章计算机处理小数运算时出错的原因,这一章说明了计算机进行小数运算时的机制。让我了解到它的运算为何出错以及如何避免出错。首先3.1节,将0.1累加100次也得不到十。通过将结果输出到显示器上的c语言程序。显示结果并不是10来引入问题,计算机内部是如何处理小数的?为何程序没有故......
  • Vulkan中的同步与缓存控制
    1.IntroductionVulkan提供显式的同步结构,允许CPU与GPU同步命令的执行。并且还可以控制GPU中命令的执行顺序。所有执行的Vulkan命令都将进入队列,并以某种未定义的顺序“不间断”执行。有时,我们明确希望在执行新操作之前确保某些操作已完成。在编写vulkan应用时,虽然对给......
  • 《系统科学方法概念》第三章
    在阅读了《系统科学方法概念》第三章之后,我仿佛站在了一个更高的视角,俯瞰着复杂系统之间的相互作用与联系。这一章节不仅仅是对系统科学方法的简单介绍,更是一次深入探讨,它让我对系统思维有了更加深刻的理解。系统科学方法,作为一种跨学科的研究手段,强调了整体性、相互作用和动态变......
  • 第一章投资理念《第一节 投资风险控制》
    1.交易的类型成功的交易失败的交易赚钱的交易亏钱的交易1.1如何界定交易的成功还是失败交易的成功和失败是靠是否遵循了提前设定好的交易策略按照交易策略执行的就是成功的交易1.1成功的交易的说明假设某种条件出现后,走势必然出现上涨或下跌,就实行买入卖出策略假设......
  • 《程序是怎样跑起来的》第三章的读后感
    又到了每周的读书分享,本篇分享《程序是怎样跑起来的》第三章的读后感。大家可能会认为“万能的计算机是不会出现计算错误的”。但实际上,依然存在程序运行后无法得到正确数值的情况。其中,小数运算就是一个典型的例子。第三章就给我们解释了计算机进行小数运算时出错的原因,在本章中......
  • 《程序是怎样跑起来的》读后感——第三章 计算机进行运算小数时出错的原因
    一、二进制的限制计算机内部所有的信息都是以二进制的形式存储和处理的。然而,并非所有的十进制小数都能被精确地用二进制表示。例如,0.1在十进制中是一个无限循环小数,但在二进制中却无法精确表示,只能进行近似表示。这种差异导致了计算机在运算小数时可能出现误差。二、浮点数表示......
  • 《程序是怎样跑起来的》第三章读后感
    计算机在计算小数时可能会出错,主要是因为有些十进制数的小数无法精确转换成二进制数。例如,十进制数0.1就无法用二进制数精确表示,即使小数点后面有几百位也无法做到。由于计算机只能处理有限的位数,无法表示无限循环的小数,因此在进行小数运算时,可能会出现精度损失或舍入误差。此外......
  • 《安富莱嵌入式周报》第332期:铷时钟控制板,航天战斗机C++代码标准,免费开源芯片设计,在线
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版https://www.bilibili.com/video/BV1tU421d7ZK/目录:1、Rubidium铷时钟控制板2、开源小设计,简易万用表连通性测试仪3、免费开源芯片设计软件Electric4、在线电路仿......
  • 【QA与QC】质量控制与测试
    QA与QC概念说明:1.QA是QualityAssurance,如质量人员。QA主要是事先的质量保证类活动,以预防为主,期望降低错误的发生几率。质量保证(QA):是指确保产品符合预定质量要求而作出的所有有组织、有计划活动的总和。2.QC是QualityControl,如测试人员。QC:主要是事后的质量检验类活动为......
  • PID 控制 |(搬运)教程与 python 代码
    因为完全没有自动化和控制基础,所以找了很多博客都没看懂;干货|通俗易懂讲解PID,这是看的最懂的一篇()PID控制的python代码:[TBC]或许可以直接调用的python包:https://github.com/m-lundberg/simple-pid......