python基础学习笔记6:循环结构

Python中循环的介绍

1、什么是循环

现实生活中,也有很多循环的应用场景:

  • 食堂阿姨打菜:接过顾客的餐盘→询问菜品→打菜→递回餐盘,重复以上过程,直到所有顾客的菜都打完了

  • 快递员送快递:查看送件地址→赶往目的地→电话告知收件人→收件人签收→交快递件,重复以上过程,直到所有需要送的快递都处理完了。

  • 公交司机……

  • 学生上学……

  • ……

以上场景都有一个共同的特点:条件重复地做一件事,每一次做的事情相同或者类似。

程序是为了解决实际问题的,实际问题中存在着重复动作,那么程序中也应该有相应的描述,这就是循环

2、循环的作用

思考

假如有一天我没写作业,老师说:罚写100遍“少壮不努力,老大徒伤悲”。这个时候程序员会怎么做?

print('少壮不努力,老大徒伤悲') * 100

太麻烦了,有没有更好的办法呢?我们难道print输出语句要复制粘贴100次嘛?

答:其实不用这么麻烦,以上输出代码中有很多重复的地方,我们只要重复执行100次相同的代码即可,这就是循环!

循环的作用是什么?让代码高效的重复执行

3、循环的种类

在Python中,循环一共分为两大类:while循环与for循环。那么while循环和for循环如何选择呢?

  • 对于循环次数已知的情况,建议使用while循环
  • 对于循环次数未知的情况,建议使用for循环

while循环基本语法及其应用

1、while循环的基本语法

# ① 定义一个计数器(初始化一个计数器)
i = 01
# ② 编写while循环结构
while 循环条件(判断 计数器 是否达到了目标位置):
	循环体1
	循环体2
	...
	# ③ 在循环内部更新计数器
	i = i + 1 或 i += 1

总结,while循环三步走:

  • 初始化计数器
  • 编写循环条件(判断计数器是否达到了目标位置)
  • 在循环内部更新计数器

案例

使用while循环,循环输出100遍“少壮不努力,老大徒伤悲”

代码

# ① 初始化计数器
i = 0
# ② 编写循环条件(判断计数器是否达到了100)
while i < 100:
    print('少壮不努力,老大徒伤悲')
    # ③ 在循环体内部更新计数器
    i += 1

执行流程

下断点,开始Debug调试:
在这里插入图片描述

  • 代码都是顺序执行,首先执行到第2行,对变量i进行赋值操作,初始值为0
  • 当程序遇到while循环时,首先要把我们的计数器与循环条件进行比较i < 100,如果条件成立,则进入循环内部,执行内部代码。
  • 在循环体内部,针对本次循环进行计数器更新操作 i = i + 1i += 1
  • 更新完毕后,把更新后的计数器与循环条件再次进行比较i < 100,如果条件成立,继续进入循环内部,执行内部代码。
  • 直到,i更新后结果为100时,再次进行循环条件判断,发现不满足,则整个while循环结束。

流程图
在这里插入图片描述

3、while循环案例

案例1

使用while循环求1…100所有数的和。

分析

定义一个while循环,让其可以帮助我们计算 1 + 2 + 3 + 4 + 5 … + 100,结果为5050。

大问题拆解为小问题:

  • 使用while循环,循环100次
# 第一步:初始化计数器
i = 1
# 第二步:编写循环条件
while i <= 100:
    print(i)		#  1 2 3 4 5 6 7 8 9 10...
    # 第三步:更新计数器的值
    i += 1
  • 在循环体内部,累计求和
# 第四步:定义一个变量,用于得到最终的运算结果
result = 0
# 第五步:想办法,让result = 变量i累加后的结果
  • 最终代码
# 第一步:初始化计数器
i = 1
# 第四步:定义一个result变量,用于接收累加后的结果
result = 0
# 第二步:编写循环条件
while i <= 100:
    # 第五步:循环累加变量i
    result += i
    # 第三步:更新计数器的值
    i += 1
print(f'1~100累加后的结果:{result}')

总结

  • 首先定义变量i和变量result,进行初始化赋值

  • 判断变量i是否满足循环条件,如果满足循环条件,则进入到循环体内部,执行内部代码

思考

如何让变量i进行累加,然后赋予给result

result = i

第一次循环式,i = 1result = 0,如果想获取累加的结构,则result = result + i

result = 0 + 1

计数器更新,i += 1,i变成2,然后i <= 100,继续执行循环内部代码

result = result + i  换成数值  result = 1 + 2

依次类推

result = result + i

简写

result += i

案例2

求1~100之间,所有偶数的和

什么是偶数:所谓的偶数,就是能被2整除的数字就是偶数,数学中可以使用 2 × n 2\times n 2×n来表示偶数。在Python代码中, if 数值 % 2 == 0 代表它是一个偶数。

知识点

在while循环中,我们还可以结合if进行判断。

  • 第一步,求出1~100之间,所有的偶数
# 初始化计数器
i = 1
# 编写循环条件
while i <= 100:
    # 将来写代码的位置
    # 更新计数器
    i += 1

第二步:在循环体中,引入if条件判断,判断变量i是否为一个偶数

# 初始化计数器
i = 1
# 编写循环条件
while i <= 100:
    # 将来写代码的位置
    if i % 2 == 0:
        # 代表变量i是一个偶数
        print(i)
    # 更新计数器
    i += 1

第三步:引入result变量,初始值为0,然后对第二步中得到的所有偶数进行累加

# 初始化计数器
i = 1
# 定义result,用于接收所有偶数的和
result = 0
# 编写循环条件
while i <= 100:
    # 将来写代码的位置
    if i % 2 == 0:
        # 代表变量i是一个偶数
        result += i
    # 更新计数器
    i += 1
print(f'1~100之间所有偶数的和:{result}')

4、编写循环式常见问题

i = 1
result = 0
while i <= 100:
    if i % 2 == 0:
        result += i
        i += 1
print(f'1~100之间所有偶数的和:{result}')

问题的原因:在于i += 1缩进了2次,导致其和if形成了一个整体。while循环中计数器无法更新,最终导致以上代码出现了死循环。

循环中的两大关键词

1、两大关键词

在Python循环中,经常会遇到两个常见的关键词:breakcontinue

break:代表终止一个循环结构

continue:代表中止当前本次循环,继续下一次循环

2、举个栗子

举例

一共吃5个苹果,吃完第一个,吃第二个…,这里"吃苹果"的动作是不是重复执行?

  • 情况一:如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第5个苹果,即是吃苹果的动作停止,这里就是break控制循环流程,即终止此循环。
  • 情况二:如果吃的过程中,吃到第三个吃出一个大虫子…,是不是这个苹果就不吃了,开始吃第四个苹果,这里就是continue控制循环流程,即退出当前一次循环继而执行下一次循环代码。

3、break关键字

情况一:如果吃的过程中,吃完第三个吃饱了,则不需要再吃第4个和第5个苹果,即是吃苹果的动作停止,这里就是break控制循环流程,即终止此循环。

# 初始化计数器
i = 1
# 编写循环条件
while i <= 5:
    # 当变量i == 4的时候,终止循环
    if i == 4:
        print('我已经吃饱了,实在吃不下了...')
        break
        
    # 正在吃第几个苹果
    print(f'正在吃第{i}个苹果')
    
    # 更新计数器
    i += 1

4、continue关键字

情况二:如果吃的过程中,吃到第三个吃出一个大虫子…,是不是这个苹果就不吃了,开始吃第四个苹果,这里就是continue控制循环流程,即退出当前一次循环继而执行下一次循环代码。

# 初始化计数器
i = 1
# 编写循环条件
while i <= 5:
    # 当变量i == 3的时候,中止当前循环,继续下一次循环
    if i == 3:
        # 手工更新计数器(非常重要)
        i += 1
        print('吃到了一只大虫子,这个苹果不吃了...')
        continue
        
    print(f'正在吃第{i}个苹果')
    # 更新计数器
    i += 1

如果在使用continue的时候,不手工更新计数器会有什么后果呢?

答:会出现死循环,建议使用Debug调试工具观看

5、死循环概念

在编程中一个靠自身控制无法终止的程序称为“死循环”。

在Python中,我们也可以使用while True来模拟死循环:

while True:
    print('你是风儿我是沙,缠缠绵绵到天涯')

6、while循环案例:猜数字

需求

计算机从1 ~ 100之间随机生成一个数字,然后提示输入数字,如果我们输入的数字与随机数相等,则提示恭喜你,答对了。如果输入的数字比随机数大,则提示,猜大了。反之,则提示猜小了。

分析

  • 编写一个循环,循环3次。
  • 要从1 ~ 100之间选择一个随机数
  • if分支判断
import random
# 第一步:定义一个计数器
i = 0
# 第四步:生成1 ~ 10之间的随机数
secretNum = random.randint(1, 100)
# 第二步:编写循环条件
while True:
    # 第五步:提示用户输入一个数字
    userNum = int(input('请输入您猜的数字(范围1~10之间):'))
    # 第六步:判断用户输入的数字是否与随机数相等
    if secretNum == userNum:
        print('恭喜你,才对了')
        break
    elif secretNum < userNum:
        print('猜大了')
    elif secretNum > userNum:
        print('猜小了')
    # 第三步:更新计数器
    i += 1

while循环嵌套

1、循环嵌套的引入

需求

周一到周五每天每天都要上学,周末日休息。

# 初始化计数器
i = 1
# 编写循环条件
while i <= 5:
    print('上学')
    # 更新计数器
    i += 1
print('周末休息')

每个月要上4周课,把这个循环要连续4周都执行,有如何书写程序?

# 初始化外层计数器
j = 1
# 编写外层循环条件
while j <= 4:
    # 初始化计数器
    i = 1
    # 编写循环条件
	while i <= 5:
	    print('上学')
	    # 更新计数器
	    i += 1
	print('周末休息')
    # 更新外层计数器
    j += 1

2、循环嵌套的基本语法

编写一个简单的while循环结构

# 初始化计数器
i = 0 或 i = 1
# 编写循环条件
while i < 边界值:
    循环体代码
    # 更新计数器
    i += 1

所谓的while嵌套循环就是在while循环的基础上,把循环体代码更换为一层while循环,就组成了while嵌套循环。

# 第一步:初始化外层循环计数器
i = 1
# 第二步:编写外层循环的条件
while i <= 3:
    # 第四步:初始化内层循环计数器
    j = 1
    # 第五步:编写内层循环的条件
    while j <= 3:
        循环体代码
    	# 第六步:更新内层循环计数器
    	j += 1
    # 第三步:更新外层循环计数器
    i += 1

结构如下:
在这里插入图片描述

3、循环嵌套的执行流程

while循环嵌套执行流程口诀:在while循环嵌套的执行过程中,外层循环1次,内层循环N次。(例如:时钟 => 分针和秒针,分针就相当于外层循环,秒针就相当于内层循环)

想具体了解while嵌套循环的执行流程,建议使用Debug调试。

循环嵌套的总次数 = 外层循环次数 * 内层循环次数

4、循环嵌套的几个案例

案例1

打印5行5列的正方形,单元格中使用*号进行填充。
在这里插入图片描述
示例代码:

# 方法一:直接print打印
# print("*  *  *  *  *")
# print("*  *  *  *  *")
# print("*  *  *  *  *")
# print("*  *  *  *  *")
# print("*  *  *  *  *")

# 方法二:使用单层while循环
# i = 1
# while i <= 5:
#     print("*  *  *  *  *")
#     i += 1

# 方法三:使用单层while循环 + 运算符
# i = 1
# while i <= 5:
#     print("*  " * 5)
#     i += 1

# 方法四:使用while循环嵌套
i = 1
while i <= 5:
    # print("*  *  *  *  *")
    j = 1
    while j <= 5:
        print("*  ", end='')
        j += 1
    # 换行
    print('')
    i += 1

使用Debug工具对while嵌套循环进行调试可知,在正方形案例中,外层的while主要用于控制行row信息,内层的wihle循环主要用于控制列信息col。

案例2

打印直角三角形,特征:一共有5行,第1行,有1列。第2行,有2列,第3,有3列。

在这里插入图片描述
分析:如果采用wihle循环嵌套,外层应该循环5次,内层循环次数有一定的规则:

  1. 循环1次
  2. 循环2次
  3. 循环3次
  4. 循环4次
  5. 循环5次
# 定义外层循环计数器
i = 1
# 编写外层循环的循环条件
while i <= 5:
    # 定义内层循环计数器
    j = 1
    # 编写内层循环的循环条件
    while j <= i:
        print('*  ', end='')
        j += 1
    print('')
    # 更新外层循环计数器
    i += 1

案例3

使用while嵌套循环打印 9 x 9乘法表
在这里插入图片描述

  • 第一步:使用while嵌套循环打印9行的直角三角形
# 初始化外层循环计数器
i = 1
# 编写外层的循环条件
while i <= 9:
    # 初始化内层循环计数器
    j = 1
    # 编写内层的循环条件
    while j <= i:
        print('*', end='  ')
        # 更新内层循环的计数器
        j += 1
    print('')
    # 更新外层循环计数器
    i += 1
  • 第二步:把小星星换成具体的数值
# 初始化外层循环计数器
i = 1
# 编写外层的循环条件
while i <= 9:
    # 初始化内层循环计数器
    j = 1
    # 编写内层的循环条件
    while j <= i:
        print(f'{j} x {i} = {i * j}', end='  ')
        # 更新内层循环的计数器
        j += 1
    print('')
    # 更新外层循环计数器
    i += 1

for循环基本语法及其应用

1、for循环基本语法

for循环结构主要用于序列(字符串、列表、元组、集合以及字典)类型数据的遍历(枚举)操作。

for 临时变量 in 序列:
    重复执行的代码1
    重复执行的代码2

案例:使用for循环遍历字符串"yogeek"

str1 = 'yogeek'
for i in str1:
    print(i)

使用Debug调试以上代码可知:for循环功能非常强大,可以自动判断序列的长度,长度为多少,则for循环就循环多少次。每次循环时,系统会自动将序列中的每个元素赋值给变量i,赋值完成后,for循环内部会自动更新计数器,向后移动一位,继续循环,直至元素全部循环结束。

2、range方法(函数)

Python2中 range() 函数返回的是列表,而在Python3中 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。(由于我们还未学习面向对象,为了方便大家理解,你可以简单的将其理解为一个序列结构)

主要作用

用于生成一段连续的内容,例如从0到9

基本语法

range(stop)
range(start, stop[, step])

# start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
# stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是 [0, 1, 2, 3, 4] 没有 5
# step:步长,默认为1。例如:range(0,5) 等价于 range(0, 5, 1)

range有一个口诀:顾头不顾尾,包含头部信息,但是不包含尾部信息,如range(10),则返回0~9之间的序列,又比如range(0, 5)代表返回0 ~ 4之间的序列。

案例

for循环与range()方法,使用for循环,循环5次

for i in range(5):
    print(i)

3、for循环案例

案例1

使用for循环,求1 ~ 100的和

# 定义一个变量,用于接收1~100的和
result = 0
# 从1开始循环,循环100次
for i in range(1, 101):
    result += i
print(f'1~100的和为{result}')

案例2

使用for循环,求1 ~ 100之间所有偶数的和

# 定义一个变量,用于接收1~100之间所有偶数的和
result = 0
# 从1开始循环,循环100次
for i in range(1, 101):
    if i % 2 == 0:
        result += i
print(f'1~100之间所有偶数的和为{result}')

4、循环中的两大关键字

在循环结构中存在两个关键字:breakcontinue

  • break主要功能是终止整个循环。

案例

遇到字符’e’,则终止整个循环。

str1 = 'yogeek'
for i in str1:
    if i == 'e':
        break
    print(i)
  • continue:主要功能是中止当前循环,继续下一次循环。

案例:遇到字符’e’,跳过循环,继续下一次循环

str1 = 'yogeek'
for i in str1:
    if i == 'e':
        continue
    print(i)

5、综合案例:使用for循环实现用户名+密码认证

案例

for循环实现用户登录:

  • 输入用户名和密码
  • 判断用户名和密码是否正确(username == 'admin' and password == 'admin888'
  • 登录仅有三次机会,超过3次会报错

分析

用户登陆情况有3种:

  • 用户名错误(此时便无需判断密码是否正确) – 登陆失败
  • 用户名正确 密码错误 --登陆失败
  • 用户名正确 密码正确 --登陆成功
# 定义变量,用于记录登录次数
trycount = 0
# 循环3次,因为超过3次就会报错
for i in range(3):
    # 更新登录次数
    trycount += 1
    # 提示用户输入账号与密码
    username = input('请输入您的登录账号:')
    password = input('请输入您的登录密码:')
    
    # 判断用户名是否正确
    if username == 'admin':
    	# 判断密码是否正确
        if password == 'admin888':
            print('恭喜你,登录成功')
            break
        else:
            print('密码错误')
            print(f'您还有{3 - trycount}次输入机会')
    else:
        print('用户名错误')
        print(f'您还有{3 - trycount}次输入机会')

6、for循环嵌套

所谓for循环嵌套,就是一个for循环里面嵌套另外一个for循环的写法。

当循环结构相互嵌套时,位于外层的循环结构常简称为外层循环或外循环,位于内层的循环结构常简称为内层循环或内循环。

基本语法

# 外层循环
for i in 序列1:
    # 内层循环
    for j in 序列2:
        循环体

案例

使用for循环嵌套实现打印九九乘法表

分析

外层循环主要用于控制循环的行数,内层循环用于控制列数

for i in range(1, 10):
    for j in range(1, i+1):
        print(f'{j} x {i} = {i * j}', end='  ')
    # 打印换行符
    print('')

循环练习

1、面试题

有一物,不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何?

白话文:有一个数字,不知道具体是多少,用3去除剩2,用5去除剩3,用7去除剩2个,问这个数是多少?1 ~ 100以内的整数

while循环

# 初始化计数器
i = 1
# 编写循环条件
while i <= 100:
    # 判断
    if i % 3 == 2 and i % 5 == 3 and i % 7 == 2:
        print(i)
    # 更新计数器
    i += 1

for循环

for i in range(1, 101):
    # 判断
    if i % 3 == 2 and i % 5 == 3 and i % 7 == 2:
        print(i)

2、报数字(数7)

一些同学从1开始报数,当需要报出的数字尾数是7或者该数字是7的倍数时,则该同学跳过这个数字,不进行报数。所有同学都参与游戏后,游戏结束。如输入学生数量为50,游戏结束后,报数的同学数量为39。

分析:如何判断某个数字尾数为7以及如何判断某个数字是7的倍数

  • 如何判断数字尾数为7,i % 10 == 7 17 % 10 = 1 余 7 27 % 10 = 2 余 7

  • 如何判断数字是7的倍数,i % 7 == 0

# 定义一个变量n,用于获取学生数量
n = int(input('请输入学生的数量:'))
# 定义一个变量,用于统计有多少人报数了
count = 0
# 开始循环
for i in range(1, n+1):
    # 判断数字尾数为7
    if i % 10 == 7:
        continue
    # 判断数值是7的倍数
    if i % 7 == 0:
        continue
    # 如果不满足以上if条件,则对count进行+1操作
    count += 1
print(f'{n}个同学,共报数{count}人')
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值