4 python while 循环

[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 下方缩进的代码
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇