循环嵌套+列表上
1. 循环嵌套
Python 语言允许在⼀个循环体里面嵌入另⼀个循环。
1.1 循环嵌套语法
while 表达式:
while 表达式:
代码块
代码块
流程解析:
若 while 语句控制的代码块中还有 while 语句,则按照 while 语句的流程执行其所控制的代码块,结束后继续执行上级 while 语句代码块剩下的语句。
1.2 示例代码
- 在写循环嵌套代码之前,先提及一个print()函数的知识点。
print() 语句默认是换行的,比如执行两个print()得出的结果如下图:
将print() 的参数end写为空,则不会换行,继续打印其他内容:
print() 语句如果不加任何参数,则相当于输出一个换行符。
- 接下来给出循环嵌套的具体代码。
代码任务:打印出特定高度与宽度的 “*” 图形。
# 打印特定的图形
i = 0
# 外部循环控制图形高度
while i < 5:
j = 0
# 内部循环控制图形宽度
while j < 5:
# 参数end=''表示不换行
print('*', end='')
j += 1
print()
i += 1
运行结果:
为方便分析如何控制图形,给出图形与循环变量 i、j 之间的关系:
> * i = 0 j < 1 ***** i = 0 j < 5
> ** i = 1 j < 2 **** i = 1 j < 4
> *** i = 2 j < 3 *** i = 2 j < 3
> **** i = 3 j < 4 ** i = 3 j < 2
> ***** i = 4 J < 5 * i = 4 j < 1
由上图,图形的高度与外层循环变量 i 有关,图形的宽度与内层循环变量 j 有关。
修改上述示例代码内层循环的条件表达式为:
while j < i + 1:
得到如下结果:
如果想得到倒三角图形,则修改内层循环条件表达式为:
while j < 5 - i:
得到如下结果:
1.3 循环嵌套小练习
练习题目:编写代码打印九九乘法表。
代码如下:
i = 0
# 外部循环控制乘法表高度
while i < 9:
# 公式里面是从1开始,所以先更新循环变量
i += 1
j = 0
# 内部循环控制乘法表宽度
while j < i:
# 同样先更新循环变量
j += 1
# 参数end=''表示不换行,加入\t是为了让格式好看
print(f'{j}*{i}={i*j}\t', end='')
print()
运行结果:
2. continue和break的使用
2.1 语句解释
-
continue
跳出本次循环,即 continue 后的语句都不执行,直接进行 while 条件表达式的判断; -
break
直接跳出循环,包括else(如果有)。
2.2 示例代码
i = 0
while i < 6:
i += 1
if i == 2:
continue
print(i)
else:
print('hello')
运行结果:
将上述代码的 continue 改为 break,结果如下:
3. 序列
3.1 基本概念
- 序列是Python中最基本的⼀种数据结构。序列用于保存⼀组有序的数据,所有的数据在序列当中都有⼀个唯⼀的位置(索引),并且序列中的数据会按照添加的顺序来分配索引。
- 数据结构指计算机中数据存储的方式。
3.1 序列的分类
- 可变序列(序列中的元素可以改变):例如 列表(list)字典(dict)
- 不可变序列(序列中的元素不能改变):例如 字符串(str)元组(tuple)
4. 列表
- 列表是Python中的⼀个对象。
- 列表的作用:
列表中可以保存多个有序的数据;
列表是用来存储对象的对象。
4.1 列表的使用
- 列表可以通过 [] 创建
list = [] # 创建一个空列表
print(list, type(list))
运行结果:
- 列表中可以保存任意的对象,也包括子列表。
a = 5
list = [1, 'python', None, True, [1, 2, 3], a]
print(list)
运行结果:
- 列表中的元素是有序的,其索引从0开始,列表中第一个位置为0,第二个为1,以此类推。可以通过索引获取列表中元素,但不能超过其长度。
list = [1, 2, 3, 4, 5]
print(list[2])
print(list[6])
运行结果:
- 可以用 len() 获取列表的长度
list = [1, 2, 3, 4, 5]
print(len(list))
运行结果:
- 列表的索引值可以是负数,如果索引是负数,则从后向前取值。索引值为负数,也需要注意不能超出长度上限。
list = [10, 20, 30, 40, 50]
print(list[-1]) # -2:40 -3:30 -4:20 -5:10
运行结果:
4.2 切片的使用
切片是指从现有列表中获得⼀个子列表。
- 可以通过切片来获取指定的元素;
- 语法: 列表[起始 : 结束 : 步长];
从列表中获取 ‘乔峰’ 到 ‘郭靖’:
person = ['乔峰', '郭靖', '令狐冲', '杨过', '张无忌', '韦小宝']
print(person[0:2]) # 注意:索引2指向'令狐冲'
运行结果:
从上述结果看出:
- 通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素;
如果在切片时,省略起始或者结束位置的索引。
person = ['乔峰', '郭靖', '令狐冲', '杨过', '张无忌', '韦小宝']
print(person[:]) # 开始和结束位置都省略
print(person[:3]) # 省略开始位置
print(person[3:]) # 省略结束位置
运行结果:
从上述结果看出:
- 如果省略结束位置,则会从当前的开始位置⼀直截取到最后;
- 如果省略开始位置,则会从第⼀个元素截取到结束的元素,但是不包括结束的元素;
- 如果开始位置和结束位置都省略,则则会从第⼀个元素开始截取到最后⼀个元素;
关于切片时的步长:
person = ['乔峰', '郭靖', '令狐冲', '杨过', '张无忌', '韦小宝']
print(person[0:5:1]) # 步长为1,可以省略不写
print(person[0:5:2]) # 步长为2,表示隔一个值获取元素
print(person[::-1]) # 步长为-1,表示倒叙取值
print(person[0:5:0]) # 步长不能为0
运行结果:
从上述结果看出:
- 步长表示每次获取元素的间隔,默认是1(可以省略不写);
- 获取元素的间隔等于步长减一;
- 步长不能是0,但可以是是负数。