Python基础学习笔记梳理二:选择结构

选择结构是,在编程中遇到结果已知并且确定,但数量不唯一的情况时用到的一种编程方法。就像做选择题时,给出了几个选项,必须要从中进行选择。而得到每一种结果的条件都不同,不会产生模棱两可的情况,所以我个人认为,选择结构可以理解为单项选择题。也有称选择结构为条件判断,但个人觉得选择和循环两种结构都需要判断的条件,容易将条件判断与判断条件混淆,所以更倾向于选择结构这种说法。

Created with Raphaël 2.2.0 if 判断条件1 执行语句体1 代码结束 判断条件2 执行语句体2 判断条件3 执行语句体3 yes no yes no yes no

在Python的基础学习中,选择结构由if语句来实现。
if语句的三种语法:if……;if…else…;if…elif…elif…else…
(1)if……(如果…就…)
格式:

if 判断条件:
    执行语句体

(2)if…else…(如果…就…,否则…就…)
格式:

if 判断条件1:
    执行语句体1
elif 判断条件2:
    执行语句体2
else 判断条件3:
    执行语句体3        

(3)if…elif…else…(如果…就…,要么…就…,否则…就…)
格式:

if 判断条件1:
    执行语句体1
elif 判断条件2:
    执行语句体2
else 判断条件3:
    执行语句体3   

注意事项:
1、判断条件后的冒号不可省略,并且必须为英文半角格式。
2、执行语句前一定有4个英文状态下的空格缩进,这个缩进是基于if的起始位置开始计算的。只要满足这个缩进格式,就会默认为这个语句体内待执行的代码。
3、判断条件的内容:可以是数学运算的式子,也可以是布尔值,还可以是逻辑运算式。
4、执行语句体的内容:我习惯把执行语句理解为一个容器,就是不一定是一个语句,可能是多个语句,可能是函数,可能是其他的结构,如另外一个选择结构、循环结构等等。当语句体的内容为选择结构或循环结构时,称之为嵌套结构,嵌套结构在满足上一层条件后,进入下一层条件的判断。
5、else可以省略,即(3)中的格式可以写为if…elif…。elif是作为多分支选择结构中的一个分支,可以根据分支数量多次出现,每出现一次即代表一个分支。

我在编写选择结构的代码时,编写的思路是:先思考并列写产生的结果,再依据每一个结果推断得到结果的判断条件,然后比较各个判断条件,排除产生多个结果的情况,最终落实代码。

例1:不含嵌套的选择结构
代码功能:判断输入的整数能否被3整除,能够被3整除,打印“可以被3整除”,不能被3整除,打印“不可以被3整除”。
思路:
1、数值是用户输入的,需要用到input()函数,并且需要一个变量存放。由于input()函数获取的任何内容均保存为字符串类型,所以还需要加上int()函数,将输入的数值转换为整数才可以进行数学运算。
2、判断数值能否被3整除,可以使用取余运算符,当余数为零时代表可以被整除,当余数不为零时代表不能被整除。则if后使用的判断条件就是余数是否为零。
3、结果已知,并且有2个,则选择结构有两个分支,可以使用if…else…语句。
4、每一个结果产生后,要执行的功能是打印,需要用到print()函数。
落实到代码实现:
思路1: num=int(input(‘请输入一个整数:’))
思路2: num%3
思路3:if num%3==0: else:
思路4:print(‘可以被3整除’),print(‘不可以被3整除’)
在编译环境中编写代码如图:
Python基础学习笔记梳理二:选择结构_第1张图片
运行结果图:
可以被3整除的情况:
可以被整除
不可以被3整除的情况:
不可以被整除

例2:选择结构与选择结构嵌套:
代码功能:设计交互式菜单,一级功能有:查询、新建、搜索、退出;二级功能有:查询功能下选择查询关键字:名称、作者。(考虑到目的在讲解选择结构与选择结构的嵌套,着重体现代码结构,其他一级菜单的二级功能不予列出,相关功能部分代码用pass语句或打印功能名称语句代替)
思路:
1、要求设计交互式菜单,需要用到input()函数,在判断条件时要注意输入数据的类型问题。
2、菜单是选择结构,根据题设已知有四种分支,那么需要用到if…elif…elif…else…结构。
3、每一个一级功能下有可能出现再次选择的情况,需要在2中的选择结构中嵌套选择结构。如查询功能下需要嵌套一个二分支选择结构。
4、关于一级功能的判断条件:可以编写代码,让用户直接输入每个菜单功能的代号,判断代号来进入不同功能。则代号的存放需要一个变量,命名为choice。假设1代表查询,2代表新建,3代表搜索,4代表退出。则判断条件分别为:choice == 1,choice == 2,choice == 3,choice == 4。每个分支的判断条件都是互斥的,不会产生混淆情况,可以使用。
5、关于二级功能的判断条件:题设要求查询功能下选择关键字,则可以利用input()函数获取用户输入的关键字,同样需要存储变量,假定为keyword。判断条件分别为:keyword == '名称',keyword == '作者'。每个分支的判断条件均互斥,不会产生混淆情况,且不会与一级功能中的判断条件产生混淆,可以使用。

在编译环境中写出代码如下图:
Python基础学习笔记梳理二:选择结构_第2张图片
代码运行结果图如下:
Python基础学习笔记梳理二:选择结构_第3张图片
Python基础学习笔记梳理二:选择结构_第4张图片
Python基础学习笔记梳理二:选择结构_第5张图片
Python基础学习笔记梳理二:选择结构_第6张图片
Python基础学习笔记梳理二:选择结构_第7张图片

例3:循环结构与选择结构的嵌套:
代码功能:根据用户输入的歌手,打印出字典里已录入的该歌手的所有歌名,若歌手不存在,则提示不存在,若输入退出,则退出程序。
已知字典:musics={‘大城小爱’:‘王力宏’,‘龙的传人’:‘王力宏’,‘七里香’:‘周杰伦’,‘晴天’:‘周杰伦’,‘青花瓷’:‘周杰伦’,‘告白气球’:‘周杰伦’,‘红玫瑰’:‘陈奕迅’,‘孤独患者’:‘陈奕迅’,‘淘汰’:‘陈奕迅’}
思路:(着重讲解嵌套部分的思路,原则是由大到小,一层一层进行拆分。)
1、根据用户输入,需要用到input()函数,所输入内容需要有变量存储,假定变量名为singer。
2、要判断用户输入与字典里的标签是否相同,则要用到选择结构,分为三个分支:相同则执行打印功能print()函数,不存在需要进行提示重新输入input()函数,输入退出则能够退出程序。考虑if…elif…elif…语句。
3、我们已知判断的内容是字典的值,可以先将值提出存放在单独的列表变量中,假定列表名为singers。此部分提取作为判断的条件,放在用户输入之前进行执行即可。
4、用户在输入后,需要遍历列表singers,才能知道进入哪一个分支,如输入歌手为列表中的某一元素,则进行遍历字典,提取键,进行打印;如输入歌手不存在,则提示不存在;如输入退出则结束程序。故整个程序的最外层结构应该是分三种结果的选择结构。打印功能这个分支最为复杂,该分支中用到循环结构进行遍历字典,循环结构下仍需要再次判断输入歌手名与字典中的值是否相同,故此分支的结构是,在循环结构中嵌套选择结构。
4、结构考虑完毕后,思考每一个部分的代码实现部分。首先,提取字典值存放在新列表变量singers中,可以在代码开头部分定义一个空列表singers,然后用遍历提取值后,通过append()函数增加到列表中。要注意的是,当for遍历的对象是字典时,for关键字后的变量,提取的是键名而非值。此部分代码如下:

singers = []
for i in musics():
    singers.append(musics[i]) #此处变量i内存储的内容为歌名,即字典的键。

5、其次,考虑每一分支所实现的功能。第一个分支来进行打印歌名的功能。执行打印功能时,需要先遍历字典,判断歌名是否为输入歌手所唱,即提取每一个字典的值来判断,相同则打印。此处又一次出现选择,但只需要其中一种结果执行,不满足判断条件继续进行遍历即可。因此 选择结构要嵌套在遍历字典结构之下,即for遍历中有if语句存在。但要注意的是,当for遍历的对象是字典时,for关键字后的变量,提取的是键名而非值。假定使用music作为for遍历字典的关键字,则遍历时应写为:for music in musics:。此部分代码如下:

for music in musics:
    if singer ==musics[music]:
        print(music)

6、再次,思考选择条件的唯一性。当所输入的歌手名不存在于singers列表中时,提示不存在,而输入退出后,singer变量所存储的内容一定不存在singers列表,因此两个分支的判断条件出现混淆。考虑到代码是由上至下顺序执行,那么先被满足的条件就会被执行,后满足的条件就会被跳过,退出是输入歌手名不存在于singers列表的唯一一种特殊情况,那么我们可以将输入内容为退出这个判断条件放在前面,当用户所输入的内容不存在singers列表中,也非退出时,提示输入歌手名不存在。也可以通过两个条件进行判断输入歌手名不存在。代码段分别如下:
两个条件判断不存在的代码:

elif singer != '退出' and singer not in singers :

单一条件判断不存在的代码:

elif singer == '退出':
    print('欢迎下次使用!')
elif singer not in singers :
    print('曲库中尚未录入要查询的歌手。')

在编译环境中写出代码如下图:
Python基础学习笔记梳理二:选择结构_第8张图片

代码运行结果图如下:
Python基础学习笔记梳理二:选择结构_第9张图片
王力宏结果
陈奕迅结果
不存在
退出

Ps:个人对嵌套结构的一点小想法。
如果是读代码对代码进行理解,那就像剥圆白菜,从外层一层一层剥进去,理清层级,分析逻辑就好了。
如果是编程的时候,那就始终围绕着功能去展开,一层一层去使用。就像画一棵树,先把树干画出来,再去加树枝,最后才在树枝上画上叶子。

你可能感兴趣的:(Python自学笔记)