day03-Python中的循环结构

文章目录

  • Python中的循环结构
  • 一、回顾分支练习题
  • 二、Python中循环的介绍
  • 1、什么是循环
  • 2、循环的作用
  • 3、循环的种类
  • 三、while循环基本语法及其应用
  • 1、while循环的基本语法
  • 2、while循环的执行流程
  • 3、while循环案例
  • 4、编写循环式常见问题
  • 四、循环中的两大关键词
  • 1、两大关键词
  • 2、举个栗子
  • 3、break关键字
  • 4、continue关键字
  • 5、死循环概念
  • 6、while循环案例:猜数字
  • 五、for循环基本语法及其应用
  • 1、for循环基本语法
  • 2、range方法(函数)
  • 3、for循环案例
  • 4、循环中的两大关键字
  • 5、综合案例:使用for循环实现用户名+密码认证
  • 六、for循环中的else结构
  • 1、为什么需要在for循环中添加else结构
  • 2、for循环结构中的else结构
  • 3、break关键字对for…else结构的影响
  • 4、continue关键字对for…else结构的影响
  • 难点总结
  • 扩展
  • for循环嵌套结构
  • 1、什么是for循环嵌套
  • 2、for循环嵌套应用场景
  • 3、for循环嵌套基本语法
  • 4、使用for循环打印二维图形
  • 5、使用for循环打印九九乘法表
  • Python中的循环结构

    一、回顾分支练习题

    需求:输入三角形的3边,如果两边的长度大于第三条边,则代表是一个合法三角形

    # 1、提示用户输入三角形的三边长度
    a = int(input('请输入第一条边的长度:'))
    b = int(input('请输入第二条边的长度:'))
    c = int(input('请输入第三条边的长度:'))
    # 2、判断两边之和是否大于第3条边
    if (a + b > c) and (a + c > b) and (b + c > a):
        print('是一个合法的三角形')
    else:
        print('不是一个合法的三角形')
    

    二、Python中循环的介绍

    1、什么是循环

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

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

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

    (3)公交司机……

    (4)作业流程……

    ……

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

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

    2、循环的作用

    思考:假如我有个女朋友,有一天我们闹矛盾生气了,女朋友说:道歉,说100遍“老婆大人,我错了”。这个时候程序员会怎么做?

    答:100遍print(‘老婆大人,我错了’)

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

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

    循环的作用是什么?

    答:让代码高效的重复执行

    3、循环的种类

    在Python中,循环一共分为两大类:while循环与for循环

    思考问题:while循环和for循环如何选择呢?

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

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

    三、while循环基本语法及其应用

    1、while循环的基本语法

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

    普及小知识:在计算机程序中,计数器大部分都是从0开始的。

    总结:while循环三步走

    ① 初始化计数器

    ② 编写循环条件(判断计数器是否达到了目标位置)

    ③ 在循环内部更新计数器

    while循环入门案例:使用while循环,循环输出100遍“老婆大人,我错了”

    # ① 初始化计数器
    i = 0
    # ② 编写循环条件(判断计数器是否达到了100)
    while i < 100:
        print('老婆大人,我错了')
        # ③ 在循环体内部更新计数器
        i += 1
    

    2、while循环的执行流程

    建议大家使用Debug调试工具,查看while循环的运行流程。

    # ① 初始化计数器
    i = 0
    # ② 编写循环条件(判断计数器是否达到了100)
    while i < 100:
        print('老婆大人,我错了')
        # ③ 在循环体内部更新计数器
        i += 1
    

    下断点,开始Debug调试:

    ① 代码都是顺序执行,首先执行到第2行,对变量i进行赋值操作,初始值为0

    ② 当程序遇到while循环时,首先要把我们的计数器与循环条件进行比较i < 100,如果条件成立,则进入循环内部,执行内部代码。

    ③ 在循环体内部,针对本次循环进行计数器更新操作 i = i + 1或 i += 1

    ④ 更新完毕后,把更新后的计数器与循环条件再次进行比较i < 100,如果条件成立,继续进入循环内部,执行内部代码。

    ⑤ 直到,i更新后结果为100时,再次进行循环条件判断,发现不满足,则整个while循环结束。

    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 = 1,result = 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整除的数字就是偶数,数学中可以使用2n来表示偶数。(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循环中,经常会遇到两个常见的关键词:break 与 continue

    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 ~ 10之间随机生成一个数字,然后提示输入数字,如果我们输入的数字与随机数相等,则提示恭喜你,答对了。如果输入的数字比随机数大,则提示,猜大了。反之,则提示猜小了,一共有3次机会。

    分析:① 编写一个循环,循环3次。② 要从1 ~ 10之间选择一个随机数 ③ if分支判断

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

    五、for循环基本语法及其应用

    1、for循环基本语法

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

    for循环主要用于序列类型数据的循环操作(遍历操作)

    另外当循环次数未知的情况,建议使用for循环。

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

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

    str1 = 'itheima'
    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、循环中的两大关键字

    在循环结构中存在两个关键字:break和continue

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

    案例:遇到字符’e’,则终止整个循环

    str1 = 'itheima'
    for i in str1:
        if i == 'e':
            break
        print(i)
    

    continue:主要功能是中止当前循环,继续下一次循环

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

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

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

    案例:用for循环实现用户登录

    ① 输入用户名和密码

    ② 判断用户名和密码是否正确(username=‘admin’,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}次输入机会')
    

    六、for循环中的else结构

    1、为什么需要在for循环中添加else结构

    循环可以和else配合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码。

    强调:‘正常结束’,非正常结束,其else中的代码时不会执行的。(如遇到break的情况)

    2、for循环结构中的else结构

    基本语法:

    for 临时变量 in 序列:
        循环体
    else:
        当for循环正常结束后,返回的代码
    

    3、break关键字对for…else结构的影响

    str1 = 'itheima'
    for i in str1:
        if i == 'e':
            print('遇e不打印')
            break
        print(i)
    else:
        print('循环正常结束之后执行的代码')
    

    4、continue关键字对for…else结构的影响

    str1 = 'itheima'
    for i in str1:
        if i == 'e':
            print('遇e不打印')
            continue
        print(i)
    else:
        print('循环正常结束之后执行的代码')
    

    难点总结

    合使用,else下方缩进的代码指的是当循环正常结束之后要执行的代码。

    强调:‘正常结束’,非正常结束,其else中的代码时不会执行的。(如遇到break的情况)

    1、if结构(选择结构)
    Python中一共有三大流程结构 => 顺序结构、选择结构、循环结构
    基本语法:
    if 条件判断:
    执行下方的缩进代码

    if 条件判断:
    条件为真,执行下方的缩进代码
    else:
    条件为假,执行下方的缩进代码

    if 条件判断1:
    条件为真,执行下方的缩进代码
    条件为假,则继续向下执行判断操作
    elif 条件判断2:
    条件为真,执行下方的缩进代码
    条件为假,则继续向下执行判断操作
    elif 条件判断3:
    条件为真,执行下方的缩进代码
    条件为假,则继续向下执行判断操作
    else:
    如果以上条件都不成立,则自动执行else下方缩进代码

    2、综合案例:猜拳游戏开发 => if关键词
    3、循环结构 => 三大流程控制语句之一,在Python代码中,有while循环和for循环两种形式
    4、while循环(循环三步走)
    第一步:定义计数器
    第二步:编写循环条件
    第三步:在循环体内部更新计数器
    5、循环中退出循环两个关键词 => break和continue
    break:退出整个循环结构
    continue:退出当前循环继而进入下一次循环
    注意:如果在while循环中,使用continue,必须在continue关键字之前更新计数器,否则进入死循环

    扩展

    for循环嵌套结构

    1、什么是for循环嵌套

    所谓的for循环嵌套其实就是一个for循环中,又嵌入了另外一个for循环结构。

    2、for循环嵌套应用场景

    ① 复杂的循环逻辑代码

    ② 各种二维图形的打印,矩形、正方形、三角形等等

    ③ 打印九九乘法表

    3、for循环嵌套基本语法
    for i in 数据容器1:
        for j in 数据容器2:
            要循环的代码!!!
    

    思考两个问题:

    ① for循环嵌套代码,内层循环一共要循环多少次?

    ② for循环嵌套代码,执行原理是什么样的?

    代码:

    # 1. 外层循环
    for i in range(1, 3):  # 1, 2
        # 2. 内层循环
        for j in range(1, 4):  # 1, 2, 3
            # 3. 定义要循环的代码
            print('Life is Short, I Study Python!')
    

    结论:

    外层循环1次,内层循环3次 => 类比日常生活中的钟表 => 外层循环(分针)内层循环(秒针)

    循环总次数 = 2 x 3 = 6

    4、使用for循环打印二维图形

    案例1:打印矩形

    *		*		*		*		*
    *		*		*		*		*
    *		*		*		*		*
    *		*		*		*		*
    *		*		*		*		*
    
    *(Shift + 8),*与*之间的距离可以是2个空格,一共是5行 x 5列
    

    思路:总共是5行

    ① 让外层循环,循环5次,循环一次,输出一行,循环一次,输出一行。

    ② 外层每循环1次,内层需要循环5次,打印5个小星星 => 复合循环嵌套应用场景

    代码实现

    # 1. for外层循环,用于控制行数
    for i in range(5):
        # 2. for内层循环,用于控制列数
        for j in range(5):
            print('*', end='  ')
        # 3. 当内层循环结束,需要打印一个换行符号
        print()
    

    案例2:打印直角三角形

    *
    *		*
    *		*		*
    *		*		*		*
    *		*		*		*		*
    
    一共有5行
    第1行,1颗星
    第2行,2颗星
    第3行,3颗星
    第4行,4颗星
    第5行,5颗星
    
    星与星之间相差一个\t,问以上图形代码如何实现?
    

    思路:

    一共是5行,我们可以通过for循环外层控制行数,总循环5次。

    内层循环,肯定不是一个固定值,应该是一个变化值。

    第1行,1颗星,外层=1的时候,内层循环1次(j取值0)
    第2行,2颗星,外层=2的时候,内层循环2次(j取值0、1)
    第3行,3颗星,外层=3的时候,内层循环3次(j取值0、1、2)
    第4行,4颗星,外层=4的时候,内层循环4次(j取值0、1、2、3)
    第5行,5颗星,外层=5的时候,内层循环5次(j取值0、1、2、3、4)

    依次类推,如果第n行,n颗星,外层=n的时候,内层循环循环n次

    代码:

    # 1. 定义一个外层循环,循环5次
    for i in range(1, 6):  # 1、2、3、4、5
        # 2. 定义一个内层循环,与变量i产生一定的练习,是一个变化的循环
        # i = 1, for j in range(1)
        # i = 2, for j in range(2)  =>  0、1
        # i = 3, for j in range(3)  =>  0、1、2
        for j in range(i):
            print('*', end='\t')
        # 3. 当内层循环结束时,输出一个换行符,换行
        print()
    
    5、使用for循环打印九九乘法表

    思路:

    以上九九乘法表就是刚才打印的直角三角形,所以采用for循环嵌套结构打印九九乘法表

    for外层循环,循环9次 => for i in range(1, 10)

    for内层循环,必须是通过一个变量进行控制

    第1行,打印1个星星,i = 1,内层循环1次,for j in range(1, i+1) => for j in range(1, 2)

    第2行,打印2个星星, i = 2,内层循环2次,for j in range(1, i+1) => for j in range(1, 3)

    第8行,打印8个星星

    第9行,打印9个星星

    代码:

    # 1. 外层控制行数,一共9行
    for i in range(1, 10):
        # 2. 内层控制列数,星星数,和i有关
        for j in range(1, i+1):
            print(f'{j} x {i} = {j * i}', end='\t')
        # 3. 内层循环结束,打印一个换行符号
        print()
    

    作者:十六IT

    物联沃分享整理
    物联沃-IOTWORD物联网 » day03-Python中的循环结构

    发表回复