zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python-循环

2023-09-14 09:12:59 时间

循环

前言:

  1. 是什么:重复
  2. 有什么:if、while、for;
  3. 做什么:
  4. 怎么用:if in、if else、if elif、if嵌套;while、while true、while 嵌套;for in、for else、for嵌套;
  5. 用在哪:重复计算 的需求

是什么

定义

反复

分类

共有if、while、for

做什么

指定的代码 重复的执行

怎么用

语法

If 语法

If基本语法

if 判断条件:
    判断条件为 True,会执行的代码
    判断条件为 True,会执行的代码
    ...

顶格书写的代码,代表和 if 判断没有关系
在 python 中使用缩进,代替代码的层级关系,if 语句的缩进内,属于 if 语句的代码块(多行代码的意思)

If else

if 判断条件:
    判断条件为 True,会执行的代码
    判断条件为 True,会执行的代码
    ...
else:
    判断条件为 False, 会执行的代码
    判断条件为 False, 会执行的代码
    .....
    
ifelse 只会执行其中的一个 
# 1. 通过用户键盘输入,获取年龄 input()
age = input('请输入你的年龄:')   # str
# 需要将字符串类型的的age, 转换为 int类型的age
age = int(age)  # int
# 2. 判断年龄是否满足18岁,满足输出`哥18岁了,可以进入网吧为所欲为了`
if age >= 18:
    # 条件满足才会执行
    print('哥18岁了,可以进入网吧为所欲为了')
else:
    # 判断条件不满足,会执行的代码
    print('不满18岁,回去好好学习吧,少年!!!')

# 3. 程序最后输出,`if 判断结束`(不管是否满足,都会输出)
print('if 判断结束')

执行结果如下:
请输入你的年龄:3
不满18,回去好好学习吧,少年!!!
if 判断结束
# 坐公交:如果有钱可以上车,没有钱,不能上车;  如果上车了,判断是否能坐下 -- 是否有空座位

"""
1. 准备将来要做判断的数据:钱和空座
2. 判断是否有钱:上车  和  不能上车
3. 上车了: 判断是否能坐下: 有空座位 和 无空座位
"""
money = 0
seat = 1

if money == 1:
    print('土豪,请上车')
    # 判断是否能坐下
    if seat == 1:
        print('有空座,坐下了')
    else:
        print('没有空座,站着等....')
else:
    print('朋友,没带钱,跟着跑,跑快点')

执行结果:
朋友,没带钱,跟着跑,跑快点

if elif else结构

if 	判断条件1:
    判断条件1成立,执行的代码
elif 判断条件2:
    判断条件1不成立,判断条件2 成立,会执行的代码
else:
    判断条件1和判断条件2都不成立,执行的代码
    
--------
if 判断条件1:
    判断条件1成立执行的代码
    
if 判断条件2:
    判断条件2 成立执行的代码
score = eval(input('请输入你的成绩:'))

# 1. 成绩大于等于90 ,输出优秀
if score >= 90:
    print('优秀')
# 2. 成绩大于等于80,小于90,输出良好
elif (score >= 80) and score < 90:
    print('良好')
# 3. 成绩大于等于60,小于80,输出及格
elif score >= 60:  # 想要执行这个判断的前提是,前边两个条件都不满足(成立), 代表score一定小于80
    print('及格')
# 4. 小于60,输出不及格
else:
    print('不及格')
执行结果如下:
请输入你的成绩:99
优秀
程序结束

if 嵌套

if 判断条件1:
    判断条件1 成立,会执行的代码
    if 判断条件2:
        判断条件1成立, 判断条件2成立执行的代码
    else:
        判断条件1成立, 判断条件2不成立执行的代码
else:
    判断条件1不成立,会执行的代码
# 假设 money 大于等于2 可以上车
money = int(input('请输入你拥有的零钱:'))
# ctrl x 剪切  ctrl v  粘贴

# 1. 有钱可以上车
if money >= 2:
    print('我上车了')
    # 假设 seat 大于等于1,就可以坐
    seat = int(input('车上的空位个数:'))
    # 3. 有空座位,可以坐
    if seat >= 1:
        print('有座位坐')
    else:
        # 4. 没有空座位,就站着
        print('没有座位,只能站着')
else:
    # 2. 没钱不能上车,走路
    print('没钱,我只能走路')

执行结果如下:
请输入你拥有的零钱:3
我上车了
车上的空位个数:1
有座位坐

while 语法

while 语句以及缩进部分是一个 完整的代码块

while基本语法

如果使用continue,在continue之前一定要修改计数器,否则进入死循环

while 判断条件:
    判断条件成立,执行的代码
    判断条件成立,执行的代码
    
不在 while 的缩进内,代表和循环没有关系    

whileif 的区别:
    if 的代码块,条件成立,只会执行一次
    while 的代码块,只要条件成立,就会一直执行
# 使用print输出模拟跑一圈
# print('操场跑圈中.....')
# print('操场跑圈中.....')
# print('操场跑圈中.....')
# print('操场跑圈中.....')
# print('操场跑圈中.....')

# 使用循环解决跑圈问题
# 1. 记录已经跑了多少圈
i = 0
# 3. 书写循环,判断是否满足条件
while i < 5:
    print('操场跑圈中.....')
    # 2. 跑了一圈之后,记录的圈数加1
    i += 1
执行结果如下:
操场跑圈中.....
操场跑圈中.....
操场跑圈中.....
操场跑圈中.....
操场跑圈中.....
跑圈完成

while else

# 需求:道歉5遍媳妇我错了,完成之后执行媳妇原谅我了
"""
1. 书写道歉的循环
2. 循环正常结束要执行的代码 -- else
"""
i = 1
while i <= 5:
    print('媳妇儿,我错了')
    i += 1
else:
    print('媳妇原谅我了,真开心呐,哈哈哈哈')

执行结果如下:
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
媳妇原谅我了,真开心呐,哈哈哈哈
while else break
i = 1
while i <= 5:
    if i == 3:
        break
    print('媳妇儿,我错了')
    i += 1
else:
    print('媳妇原谅我了,真开心呐,哈哈哈哈')

执行结果如下:
媳妇儿,我错了
媳妇儿,我错了
while else continue
i = 1
while i <= 5:
    if i == 3:
        i += 1
        continue
    print('媳妇儿,我错了')
    i += 1
else:
    print('媳妇原谅我了,真开心呐,哈哈哈哈')

执行结果如下:
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
媳妇儿,我错了
媳妇原谅我了,真开心呐,哈哈哈哈

while true

while True:  # 无限循环
    代码
    
    
死循环: 相当于是代码的 bug,错误
无限循环: 人为书写的,故意这样写的

while循环嵌套

while 嵌套就是:while 里面还有 while

while 判断条件1:
    代码1
    while 判断条件2:
        代码2

======
代码 1 执行一次,代码会执行多次
while 条件 1:
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
    ...(省略)...
    
    while 条件 2:
        条件满足时,做的事情1
        条件满足时,做的事情2
        条件满足时,做的事情3
        ...(省略)...
    
        处理条件 2
    
    处理条件 1
# 操场跑圈 一共需要跑5圈
# 每跑一圈,需要做3个俯卧撑,

# 1. 定义变量记录跑的圈数
i = 0

while i < 5:
    # 2. 定义变量, 记录每一圈做了多少个俯卧撑
    j = 0
    # 3. 操场跑圈
    print('操场跑圈中.....')
    # 4. 做俯卧撑
    while j < 3:
        print('做了一个俯卧撑')
        j += 1
    # 一圈完整了,圈数加1
    i += 1
    
 执行结果如下:
 操场跑圈中.....
做了一个俯卧撑
做了一个俯卧撑
做了一个俯卧撑
操场跑圈中.....
做了一个俯卧撑
做了一个俯卧撑
做了一个俯卧撑
操场跑圈中.....
做了一个俯卧撑
做了一个俯卧撑
做了一个俯卧撑
操场跑圈中.....
做了一个俯卧撑
做了一个俯卧撑
做了一个俯卧撑
操场跑圈中.....
做了一个俯卧撑
做了一个俯卧撑
做了一个俯卧撑

for 语法

for基本语法

要点:
for 变量 in 字符串:变量一次循环是字符串中的一个字符;
range(n) 会生成 [0, n) 的数据序列, 不包含n;
range(a, b) 会生成 [a, b) 的整数序列, 不包含b;a和b需要从小到大排序,否则无法输出;
range(a, b, step) 会生成[a, b) 的整数序列,但是每个数字之间的间隔(步长)是step;

for in
for 变量 in 字符串:
    代码
for 循环也称为 for 遍历,会将字符串中的字符全部取到   

正确配置:

for i in 'hello':
    # i 一次循环是字符串中的一个字符
    print(i, end=' ')

# range(n)  会生成 [0, n) 的数据序列, 不包含n
for i in range(5):  # 0 1 2 3 4
    # print(i)
    print('操场跑圈...')

# range(a, b)  会生成 [a, b) 的整数序列, 不包含b
for i in range(3, 7):  # 3 4 5 6
    print(i)

# range(a, b, step) 会生成[a, b) 的整数序列,但是每个数字之间的间隔(步长)是step
for i in range(1, 10, 3):  # 1 4  7
    print(i)

执行结果如下:
h e l l o 操场跑圈...
操场跑圈...
操场跑圈...
操场跑圈...
操场跑圈...
3
4
5
6
1
4
7

错误配置:

1. range(a,b),a,b顺序有误
for i in range(5,0):
    print(i)
    
执行结果如下:
Process finished with exit code 0


for break
for i in range(x,x)if i == x:
		print(xxxx)
		continue #if == x成立,会结束本次循环,继续下一次循环;
		break #if == x成立,退出循环
	print (xxxxx)
str1 = 'itheima'
for i in str1:
    # 当某些条件成立退出循环 -- break:条件 i取到字符e
    if i == 'e':
        break
    print(i)
执行结果如下:
i
t
h
for continue
str1 = 'itheima'
for i in str1:
    # 当某些条件成立退出循环 -- continue:条件 i取到字符e
    if i == 'e':
        continue
    print(i)
执行结果如下:
i
t
h
i
m
a

for else

for x in xx:
    if xxx:
        xx  # if 判断条件成立会执行
    else:
        xxx  # if 判断条件不成立,会执行
else:
    xxx  # for 循环代码运行结束,但是不是被 break 终止的时候会执行
my_str = 'hello python!'
# my_str = 'hello itcast!'

for i in my_str:
    if i == 'p':
        print('包含p这个字符')
        # 已经判断出来包含了,是否还需要继续判断
        break
else:
    print('不包含p这个字符')

执行结果如下:
包含p这个字符
for else break
str1 = 'itheima'
for i in str1:
    if i == 'e':
        break
        # continue
    print(i)
else:
    print('循环正常结束执行的else的代码')

执行结果如下:
i
t
h
for else continue
str1 = 'itheima'
for i in str1:
    if i == 'e':
        # break
        continue
    print(i)
else:
    print('循环正常结束执行的else的代码')

执行结果如下:
i
t
h
i
m
a
循环正常结束执行的else的代码

for循环嵌套

# 操场跑圈 一共需要跑5圈
for i in range(5):
    print('操场跑圈中')
    # 每跑一圈,需要做3个俯卧撑,
    for j in range(3):
        print('做一个俯卧撑....')

执行结果如下:
操场跑圈中
做一个俯卧撑....
做一个俯卧撑....
做一个俯卧撑....
操场跑圈中
做一个俯卧撑....
做一个俯卧撑....
做一个俯卧撑....
操场跑圈中
做一个俯卧撑....
做一个俯卧撑....
做一个俯卧撑....
操场跑圈中
做一个俯卧撑....
做一个俯卧撑....
做一个俯卧撑....
操场跑圈中
做一个俯卧撑....
做一个俯卧撑....
做一个俯卧撑....

停止循环语法

break

break:当某些条件成立,退出整个循环
break 是终止循环的执行, 即循环代码遇到 break,就不再循环了
break 某一条件满足时,退出循环,不再执行后续重复的代码
在循环过程中,如果 某一个条件满足后 再希望 循环继续执行,可以使用 break 退出循环

for break
# 有五个苹果
# 1. 吃了三个苹果之后, 吃饱了.后续的苹果不吃了
# 2. 吃了三个苹果之后.在吃第四个苹果,发现了半条虫子,这个苹果不吃了,还要吃剩下的苹果

for i in range(1, 6):
    if i == 4:
        print('吃饱了, 不吃了')
        break  # 终止循环的执行
    print(f'正在吃标号为 {i} 的苹果')
    
执行结果如下:
正在吃标号为 1 的苹果
正在吃标号为 2 的苹果
正在吃标号为 3 的苹果
吃饱了, 不吃了
while break
# break:当某些条件成立,退出整个循环
# 循环吃5个苹果,吃完第3个吃饱了,第4 和 5 不吃了(不执行) -- == 4 或 >3
i = 1
while i <= 5:
    # 条件:如果吃到4 或 > 3 打印吃饱了不吃了
    if i == 4:
        print('吃饱了,不吃了')
        break
    print(f'吃了第{i}个苹果')
    i += 1
执行结果如下:
吃了第1个苹果
吃了第2个苹果
吃了第3个苹果
吃饱了,不吃了

continue

含义
continue 是结束本次循环,继续下一次循环,即本次循环剩下的代码不再执行,但会进行下一次循环
continue : 当条件成立,退出当前一次循环,继而执行下一次循环
在循环过程中,如果 某一个条件满足后 希望 执行循环代码,但是又不希望退出循环,可以使用
在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行

注意
使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现 死循环,即如果使用continue,在continue之前一定要修改计数器,否则进入死循环

for continue
# 有五个苹果
# 1. 吃了三个苹果之后, 吃饱了.后续的苹果不吃了
# 2. 吃了三个苹果之后.在吃第四个苹果,发现了半条虫子,这个苹果不吃了,还要吃剩下的苹果

for i in range(1, 6):
    if i == 4:
        print('发现半条虫子,这个苹果不吃了, 没吃饱,继续吃剩下的')
        continue  # 会结束本次循环,继续下一次循环

    print(f'吃了编号为{i}的苹果')

执行结果如下:
吃了编号为1的苹果
吃了编号为2的苹果
吃了编号为3的苹果
发现半条虫子,这个苹果不吃了, 没吃饱,继续吃剩下的
吃了编号为5的苹果
while continue
# 吃5个苹果 -- 循环; 吃到第3个吃出一个虫子,第三个不吃了,没吃饱,继续吃4和5个苹果 -- 只有第三个不吃
i = 1
while i <= 5:
    # 条件
    if i == 3:
        print('吃出一个大虫子,这个苹果不吃了')
        # 如果使用continue,在continue之前一定要修改计数器,否则进入死循环
        i += 1
        continue
    print(f'吃了第{i}个苹果')
    i += 1
执行结果如下:
吃了第1个苹果
吃了第2个苹果
吃出一个大虫子,这个苹果不吃了
吃了第4个苹果
吃了第5个苹果

混合用法

while、for循环嵌套

# 实验:打印正方形
n = int(input('请输入正方形的边长:'))
# n = 5

# 3. 打印 n 行的*
# 3.1 定义变量,记录打印了几行
j = 0
while j < n:
    # 2. 打印一行的*
    # 2.1 记录一行中已经打印的*个数
    i = 0
    while i < n:
        # 1. 打印一个*
        print('*', end=' ')   # 打印一行的时候, 不能换行
        i += 1
    # 一行打印结束之后,需要让j + 1, 同时还需要换行
    print()  # print函数默认会输出换行
    j += 1


# for 循环实现打印正方形
# 2. 打印n 行
for j in range(n):
    # 1. 打印一行
    for i in range(n):
        print('*', end=' ')
    print()  # 换行

结果如下:
请输入正方形的边长:6
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 
* * * * * * 

Process finished with exit code 0

n = 5

# 2. 定义变量,记录打印的行数
j = 1  # 将要打印第一行
while j <= n:
    # 1. 定义变量记录一行打印的*个数
    i = 1  # 将要打印第一个
    while i <= j:
        print('*', end=' ')
        i += 1
    print()
    j += 1


# for循环打印三角形
for i in range(n):  # 控制行数
    for j in range(i+1):  # i  range(i) 不包含i  , 控制一行打印的个数
        print('*', end=' ')
    print()

执行结果如下:
* 
* * 
* * * 
* * * * 
* * * * * 
* 
* * 
* * * 
* * * * 
* * * * * 

Process finished with exit code 0

用在哪

最常见应用场景

让执行的代码 按照 指定的次数 重复 执行

重复计算 的需求

遇到这种需求,可以:

  1. while 上方定义一个变量,用于 存放最终计算结果
  2. 在循环体内部,每次循环都用 最新的计算结果更新 之前定义的变量

一般需求

  • 计算 0 ~ 100 之间所有数字的累计求和结果
# 计算 0 ~ 100 之间所有数字的累计求和结果
# 0. 定义最终结果的变量
result = 0

# 1. 定义一个整数的变量记录循环的次数
i = 0

# 2. 开始循环
while i <= 100:
    print(i)

    # 每一次循环,都让 result 这个变量和 i 这个计数器相加
    result += i

    # 处理计数器
    i += 1

print("0~100之间的数字求和结果 = %d" % result)

需求进阶

  • 计算 0 ~ 100 之间 所有 偶数 的累计求和结果

开发步骤

  1. 编写循环 确认 要计算的数字
  2. 添加 结果 变量,在循环内部 处理计算结果
# 0. 最终结果
result = 0

# 1. 计数器
i = 0

# 2. 开始循环
while i <= 100:

    # 判断偶数
    if i % 2 == 0:
        print(i)
        result += i

    # 处理计数器
    i += 1

print("0~100之间偶数求和结果 = %d" % result)