[TOC]
目标
- 了解循环
- while语法[重点]
- while应用
- break和continue
- while循环嵌套[重点]
- while循环嵌套应用[难点]
- for循环
1 循环介绍
1.1 循环的作用
思考: 假如我有个女朋友,有一天我们闹矛盾生气了,女朋友说: 道歉,说100遍”媳妇儿,我错了”。这个时候程序员会怎么做?
答: 100遍 print("媳妇儿,我错了)
思考: 复制粘贴100次吗?
答: 重复执行100次一样的代码,程序中循环即可
循环的作用: 让代码更高效的重复执行
1.2 循环的分类
在Python中,循环分为 while 和 for 两种,最终实现效果相同
2 循环的执行流程
需求: 复现重复执行100次 print("媳妇儿,我错了) (输出更简洁一些,我们这里设置5次)
分析: 初始值是0次,终点是5次,重复做的事情输出”媳妇儿, 我错了”
i = 0
while i < 5 :
print("老婆错了")
i +=1 # 每次循环 i+1 在原有的基础上,当 i=5 这退出 while 循环
print("结束")
# 注意这里只会输出 5 次老婆错了,而输出一次结束,因为 print("结束") 缩进并不是在 while
在代码中解释器循环完了才会继续执行下面的代码
# 输出
老婆错了
老婆错了
老婆错了
老婆错了
老婆错了
结束
3 while的应用
3.1 应用一: 计算1-100累加和
分析: 1-100 的累加和,即 1 + 2 + 3 + 4 +…., 即前两个数字的相加结果 + 下一个数字( 前一个数字 +1)
'''
1.准备做加法运算的数据 1-100 zeng'liang
'''
i = 1
result = 0
while i <= 100 :
result += i
i += 1 # i 每次循环加 1 直到加到 100 退出循环
print(result)
注意: 为了验证程序的准确性,可以先改小数值,验证结果正确后,再改成1-100做累加。
3.2 应用二: 计算1-100偶数累加和
3.2.1 对 2 进行取模
# 方法1:对二进行取模
i = 0
result = 0
while i <= 100:
i += 1
if i % 2 == 0 :
result += i
print(result)
[18:09:54 root@dev ~]#/bin/python3 /root/py-demo/day-1/test.py
2550
3.2.2 递增实现
# 方法2:计数器控制增量 2
i = 0
result = 0
while i <= 100:
result += i
# 每次以 2 为递增添加到 100 退出循环
i += 2
print(result)
[18:09:54 root@dev ~]#/bin/python3 /root/py-demo/day-1/test.py
2550
3.3 总结
在上面的所有 for 循环中可以看到都有 i += 1
,这是一个退出循环判断的条件,也就是说当 i > 100 or i = 100 这时候就不再符合 while i <= 100:
循环条件所以退出循环
4 break 和 continue
break 和 continue 是循环中满足一定条件退出循环的两种方法
4.1 理解
举例:
一共吃5个苹果,吃完第一个,吃第二个..,这里”吃苹果”的动作是不是重复执行?
情况一: 如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第五个苹果,即是吃苹果的动作停止,这里就是 break 控制循环流程,即终止此循环
情况二: 如果吃的过程中,吃到第三个吃出一个大虫子…是不是这个苹果就不吃了,开始吃第四个苹果,这里就是continue控制循环流程,即退出当前一次循环继而执行下一次循环代码。
4.1.1 情况一: break
# break:当某些条件成立则退出整个循环
# 循环吃 5 个苹果,吃完第三个就吃饱了,第 4 和第 5 不用吃
i = 0
while i < 5:
i += 1
# 退出循环条件,当 i > 3 就表示吃饱了
if i > 3 :
print(f"吃不下了")
break
print(f"吃到第{i}个")
[09:43:45 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
吃到第1个
吃到第2个
吃到第3个
吃不下了
4.1.2 情况二:continue
# continue:当条件成立,退出当前循环,执行下一次循环
# 第三个有虫子不吃,然后吃第 4 5 个
i = 0
while i < 5 :
# 退出循环条件
i += 1
# 判断条件
if i == 3 :
print(f'在吃到第{i}个有虫子')
# 如果使用 continue ,在 continue 之前就需要修改计数器,否则陷入死循环
# 在解释器中遇到 continue 后面的代码都不会执行,所以需要将 i += 1 放到上面
continue
print(f'吃第{i}个苹果')
[10:06:27 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
吃第1个苹果
吃第2个苹果
在吃到第3个有虫子
吃第4个苹果
吃第5个苹果
5 while 循环嵌套
5.1 应用场景
故事梗概:有天女朋友又生气了,惩罚: 说3遍“媳妇儿,我错了”,这个程序是不是循环即可? 但如果女朋友说: 还要刷今天晚饭的碗,这个程序怎么书写?
while 循环条件:
print('媳妇对不起')
print('刷碗')
但如果女朋友还是生气,把这套惩罚要连续3天都执行,有如何书写程序?
# 因为一条要说三遍我错了,然后每天需要洗一次碗持续 3 天
# 外部 while 能够控制里面 while 循环的缩进执行
while 条件:
while 条件:
print('媳妇,我错了')
print('洗碗')
总结: 所谓while循环嵌套,就是一个while里面嵌套一个while的写法,每个while和之前的基础
语法是相同的。
5.1.1 代码实现
'''
1.循环打印 3 次媳妇我错了
2.每次循环都要洗碗
'''
i = 0
while i < 3 :
# 第一层循环定义 j 变量,因为每次循环完毕 j 就等于 0,如果将 j 写到外面只会把变量赋值给 j
j = 0
# 退出循环条件
i += 1
print('洗碗')
while j < 3 :
# 退出循环条件
j += 1
print("媳妇我错了")
print("执行完毕")
[15:52:41 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
洗碗
媳妇我错了
媳妇我错了
媳妇我错了
洗碗
媳妇我错了
媳妇我错了
媳妇我错了
洗碗
媳妇我错了
媳妇我错了
媳妇我错了
执行完毕
6 while 循环嵌套应用
6.1 应用一:打印星号正方形
6.1.1 需求
*****
*****
*****
*****
*****
6.1.2 代码
分析:一行输出 5 个星号,重复打印 5 行
'''
思考步骤如下:
1.打印一个星
2.一行打印 5 个,通过循环实现
3.打印 5 行星星,通过内嵌套循环实现
'''
i = 0
while i < 5 :
i += 1
j = 0
while j < 5 :
# end 结束符号 '' print 输出不换行
print('*',end='')
j += 1
# 每循环完一次就换行
print()
6.2 应用二:打印星号三角形
6.2.1 需求
*
**
***
****
*****
6.2.2 代码
分析:一行输出星星的个数和行号是相等的
每行:重复打印行号数字个星号,将打印行星号的命令重复执行5次实现打印5行。
'''
通过输出三角形
1.定义外循环,我们都知道打印一个三角形,那么就需要有多少行打印多少个星,比如第一行就是 1 颗
2.然后我们需要打印 5 次,那么就是需要外循环以 5 次为循环条件
3.在内循环中,我们都知道 i = 0,所以 j 要以 1 开始,不然第一次循环不打印
'''
i = 0
while i < 5 :
i += 1
j = 1
while j <= i :
print('*',end="")
j += 1
print()
6.3 九九乘法表
# 多行多个乘法表达式 x * x = y
'''
1.打印一个乘法表
2.一行打印多个表达式,每一行和行号相同(不换行)
3.打印多行表达式,需要换行
'''
i = 1
while i <= 9 :
j = 1
while j <= i:
print("%d*%d=%d"%(j,i,j*i),end=' ')
j += 1
i += 1
print()
输出:
[11:09:36 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
像在上面的代码中,可以看到内嵌套循环 i 和 j 的联动关系比较大,这种做法一般用在
7 for 循环
7.1 语法
for 临时变量 in 序列:
重复执行的代码1
重复执行的代码2
......
7.2 快速体验
# 定义 str1 字符串
str1 = 'zhangguiy'
# 通过 for 循环取出 str1
for i in str1 :
print(i)
[11:10:27 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
z
h
a
n
g
g
u
i
y
7.3 break 控制循环
在 for 循环中我们都可以通过 break 和 continue 去终止干预循环
'''
需求:
如果在 str1 变量中赋值一个 1,也就是当 i = 1 那就退出循环不在输出
'''
str1 = "zhanggui1yuan"
for i in str1 :
# 当 i = 1 就退出循环
if i == '1' :
print("退出")
break
print(i)
[14:46:00 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
z
h
a
n
g
g
u
i
退出
7.4 continue 控制循环
continue 跳过下一跳循环
str1 = "zhanggui1yuan"
for i in str1 :
# 当 i = 1 就跳过本次循环
if i == '1' :
print("跳过")
continue
print(i)
[14:56:42 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
z
h
a
n
g
g
u
i
退出
y
u
a
n
8 else
循环可以和else配合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码
8.1 while…else
需求: 女朋友生气了,要惩罚: 连续说5遍”媳妇儿,我错了”,如果道歉正常完毕女朋友就原谅我了,这个程序怎么写?
i = 1
while i <= 5:
print('我错了')
i += 1
print('原谅我')
思考: 这个 print是不是没有循环也能执行?
8.1.1 语法
while 条件:
条件成立重复执行的代码
else:
循环正常结束之后要执行的代码
所谓的 else 就是在 while 循环条件执行完毕之后需要处理的语句
8.1.2 示例
代码:
i = 1
while i <= 5 :
print("我错了")
i += 1
# 当 while 执行完毕以后执行 else 语句
else:
print('原谅我')
[15:15:03 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
我错了
我错了
我错了
我错了
我错了
原谅我
8.1.3 退出循环的方式
需求:女朋友生气,要求道歉5遍:媳妇儿,我错了。道歉到第三遍的时候,媳妇埋怨这一遍说的不真诚,是不是就是要退出循环了? 这个退出有两种可能性:
-
更生气,不打算原谅,也不需要道歉了,程序如何书写?(break)
-
只一遍不真诚,可以忍受,继续下一遍道歉,程序如何书写?(continue)
1 break
更生气,不打算原谅,也不需要道歉了,程序如何书写?(break)
i = 1
while i <= 5 :
if i == 3 :
print('这遍不真诚')
break
print('我错了')
i += 1
else:
print('原谅我了')
[15:15:09 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
我错了
我错了
这遍不真诚
# 可以看到 else 语句块中的代码并没有执行,而是直接退出循环
注意:
所谓 else 指的是循环正常结束之后要执行的代码,即如果是break终止循环的情况,else下方缩进的代码将不执行。
2 continue
只一遍不真诚,可以忍受,继续下一遍道歉,程序如何书写?(continue)
i = 0
while i < 5 :
i += 1
if i == 3 :
print('这遍不真诚')
continue
print('我错了')
else:
print('原谅我了')
[16:18:59 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
我错了
我错了
这遍不真诚
我错了
我错了
原谅我了
因为continue是退出当前一次循环,继续下一次循环,所以该循环在continue控制下是可以正常结束的,当循环结束后,则执行了else缩进的代码。
8.2 for…else
8.2.1 语法
for 临时变量 in 序列:
重复执行的代码
else:
循环正常结束之后要执行的代码
所谓else指的是循环正常结束之后要执行的代码,即如果是break终止循环的情况,else下方缩进的代码将不执行。
8.2.2 示例
str1 = 'zhangguiyuan'
for i in str1:
print(i)
else:
print("循环正常结束之后至的代码")
[16:20:57 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
z
h
a
n
g
g
u
i
y
u
a
n
循环正常结束之后至的代码
8.2.3 退出循环啊的方法
1 break 退出循环
注意:在所有的循环中都是直接退出循环
str1 = 'zhangguiyuan'
for i in str1:
# 如果当 i 遇到判断条件就直接退出循环,因为在 if 中有 break
if i == "i" :
print('break')
break
print(i)
else:
print("循环正常结束之后至的代码")
[17:04:24 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
z
h
a
n
g
g
u
break
2 continue 退出当前循环,执行下一个循环
str1 = 'zhangguiyuan'
for i in str1:
# 当判断遇到判断条件直接执行 if 代码块中的 continue 跳出本次循环
if i == "i" :
continue
print(i)
else:
print("循环正常结束之后至的代码")
[17:04:47 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
z
h
a
n
g
g
u
y
u
a
n
循环正常结束之后至的代码
9 总结
- 循环的作用: 控制代码重复执行
- while语法
while 条件:
条件成立重复执行的代码1
条件成立重复执行的代码2
- while 循环嵌套语法
while 条件1:
条件1成立执行的代码
......
while 条件2:
条件2成立执行的代码
......
- for 循环语法
for 临时变量 in 序列:
重复执行的代码1
重复执行的代码2
......
-
break 退出整个循环
-
continue 退出本次循环,继续执行下一次重复执行的代码
-
else
- while 和 for 都可以配合 else 使用
- else 下方缩进的代码含义:当循环正常结束后执行的代码
- break 终止循环不会执行 else 下方缩进的代码
- continue 退出循环的方式执行 else 下方缩进的代码