Python课程学习-ch4 流程控制
分支结构
思维导图如下:
if语句的三种方式
单分支结构
1 | if 条件: |
- 此结构可以用于字典的调用,提高健壮性
1 |
|
- 列表中也可以使用
1 | mylist = [1,2,3,4] |
双分支结构
1 |
|
代码示例:
1 | name = input("你的名字:") |
多分支结构
1 | if 条件1: |
代码示例:
1 |
|
if语句需要注意的问题
问题1:代码缩进
对于条件判断后的代码,处于同一个缩进的代码为一个代码块
1 |
|
问题2:条件判断
不一定是bool类型,也可以是:None , 0 , [] , {}
1 | list = [] |
问题3:if多分支情况
对于多分支情况,要注意条件的排布顺序
补充:pass语句
pass语句是空语句,它的作用是占位,使得程序看起来完整。
1 |
|
循环结构
思维导图如下:
while循环结构
语句格式
本质上还是条件判断语句,只是条件成立时继续执行直到退出。(一般不知道循环次数时使用此循环)
1 |
|
代码示例:(猜数)
1 | import random |
结果演示:
重点解析:
random
模块的使用。产生随机数。while true
可以进行无限循环,直到退出。break
可以跳出一个循环,可以作为结束条件。
练习:(计算平均分数)
for-in 循环结构
for in 语句格式
1 |
|
代码示例:(求和)
1 | sum = 0 |
注意点:
range()生成的数字为前闭后开区间,所以range(101)从0到100。
在python3中,range()函数生成一个等差序列,不可变。
for in 循环遍历列表和字典
遍历列表示例:
enumerate()内置函数介绍:
作用:将一个可遍历的数据对象(列表、元组、字符串等)组合为一个索引序列
格式:enumerate(list1,start=0)
代码示例:
zip()内置函数介绍:
作用:将多个对象打包成一个个元组,而后返回这些元组组成的列表
代码示例:
for in 循环遍历字典:
在正式循环之前,先来回顾一下字典中items的相关知识:
看见,dict.items()将字典元素封装为元组,这也是for in 循环的基础。
代码示例:
1 | dict3 = {"name":'xyq',"age":22} |
结果:
sorted()内置函数介绍:
前面我们已经学习过了,这里提到这个函数是因为涉及到字典。对字典进行排序是依据键的大小,并且返回一个列表。
break 与 continue
break:结束当前循环语句。
continue:立即返回到循环入口处。
代码实训–统计字符个数
重点有以下几个:
1、
string内置模块
的使用
2、random模块
的使用
3、fromkeys()函数
的使用–构建字典
4、字典的一些操作
,如:遍历、取值等
5、for in 循环结构
下面是数字示例:
1 | import random |
下面是字符示例:
1 | import string |
列表生成式
这是一个python内置的强大功能,可以进行列表的生成,使得代码更为简洁。
语法格式:【表达式 for 循环计数器 in 可迭代对象】
代码实例:
1 | list1 = [1,2,3,4] |
结果演示:
注意点:
1、注意使用时的格式,要把输入元素放在第一位。也可以使用if语句进一步选择元素。
2、zip()可以使多个列表的元素一一对应后成为一个新的列表,其中的每一个元素是一个元组。
生成器
采用生成器创建列表更加节省空间。
在列表生成式使用时,对于列表元素较多时,不建议使用。因为这种方法会实例化一个对象,占用内存空间。
而生成器是一边循环一边计算的,可以适用。
语法格式:(表达式 for 循环计数器 in 可迭代对象)
输出方法:(无法通过print直接输出元素)
通过next方法输出
会根据元素个数单个取出元素,但是这种方法太低效。使用for in 循环输出
迭代器
可迭代对象
定义:可迭代对象是指可以直接作用于for循环的对象。
分类:
- 数据类型:tuple、list、dict、set、string
- generator:生成器或者带yield的generator function
易错点:有无下标不是判断是否为可迭代对象的条件。如字典、集合等无下标仍为可迭代对象。
如何判断是否为可迭代对象呢?
使用collections模型的Iterable类型判断是否为可迭代对象。
代码实例:
1 | import collections |
结果演示:
什么是迭代器(Iterator)
迭代器就是具有next方法的对象。
list、dict、str、set、tuple虽然是一个Iterable,却不是Iterator
使用dir()查看上述类型,并没有next方法。
Iterator的解释
Iterator
是一个数据流,可以看作是一个有序序列,但是不知道序列的长度。
在使用next()函数时可以实现数据的下一步计算,即只有需要返回时才会进行数据的计算(惰性计算)
Iterator的创建方法
1、可以使用iter函数获得Iterator对象(如下图)
2、使用for循环或者while循环进行遍历
1 | L1 = [1,2,3] |
问题补充
主要记录在头歌实训和作业上的收获
应用实例
- 列表、循环–约瑟夫环问题
题干:
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。(用1代表基督徒,0代表非基督徒)
代码:
1 | def main(): |
- 打印三角形–for in 循环
1 | for i in range(1,row+1): |
注意事项:
使用range()生成的序列是前闭后开的。若为单个参数,则其中数字个数就是参数值。
- 随机数生成–双色球生成
题干:
双色球选号由7个数字组成y,其中有6个红球,其号码的取值范围为[1,33],一个蓝球的取值范围为[1,16],要求6个红球从小到大排列,蓝球在最后输出。其输出格式为09 12 16 20 30 33 | 03。(注意,如双色球号码为3,则必须输出03)
代码:
1 | from random import randrange, randint, sample |
注意点:
1、randint(1,15)
在【1,15】中选择一个数。sample(list1,6)
从list1中等可能选择6个数组成一个列表。
2、一定要分清列表的方法和函数的区别,例如:list1 = list1.sort()
是错误的,要使用list1.sort()
.
单元测试
- 生成器
其类型都是生成器<class 'generator'>
可以使用for in 读取,但是不可以直接输出。
- enumerate(x) 函数
enumerate() 函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
实例:
str.replace()方法
Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
注:因为字符串是不可变序列,所以会生成一个新的字符串,源字符串不变,
- 排序问题
key参数:自定义比较规则。这里是比较字符串第二个字符
http://c.biancheng.net/view/2239.html
- 遍历列表
列表会动态变化的。