第三节 循环结构

1. while循环

1.1 什么是循环?

  1. 主要强调一个周而复始的概念,即满足条件重复执行。 但是有3个注意条件:

    • 循环开始
    • 判断条件
    • 控制判断条件的增减,即,步长
  2. 根据上面的提示,我们可以去联想一些生活中的案例,分析一下,有什么相同的地方 ?。

    • 操场跑圈
    • 打印机打印文件
    • 切黄瓜
    • 爱你一万年
  3. 通过print("跑了第i 圈") 输出的形式,模拟操场跑圈。

    • 第一种情况: 跑5圈。
    • 第二种情况: 跑1万圈。
    #第一种情况,跑5圈
    print("跑了第1圈") 
    print("跑了第2圈") 
    print("跑了第3圈") 
    print("跑了第4圈") 
    print("跑了第5圈")
    
    # 那么跑 1万圈 怎么实现? 复制+黏贴?
    
    
    

1.2 while 循环

1.2.1 语法结构

  1. 循环三要素:

    • 起始化值,
    • 循环条件,
    • 步长(控制循环)。
  2. while 循环的语法格式:

    • 注意 步长控制的格式缩进.,
    1.初始化值
    while 2.判断条件:
    	执行语句(需要循环地方)
    	3.控制循环(步长)
    
  3. 结合语法结构, 完成跑操场跑一万圈.

    • 第一个注意: 格式上的缩进.
    • 第二个注意: 字符串输出的格式化 f " {} "
    #第二种情况使用while语法格式跑1万圈
    #1. 初始化值
    i=1
    while i<=10000 :#2.判断条件
        # 需要循环的语句
        print(f"跑了第{i}圈")
        #3.步长控制循环
        i+=1
    

1.2.2 循环中的异类

  1. 无限循环又叫做 “死循环”,就是不会停止

    • 请思考, 什么情况下会出现死循环?
    # 1. 什么是无限循环 ?
    while True: # 判断条件永远会执行.
        print("永远和你在一起")
    
    
  2. 自己动手,通过 Debug 来查看循环的执行过程? 并给出你的结论.

    • 注意观看 Debug控制台.
      blog.csdnimg.cn/77cd19536ee64158889bb5dd4e1cdf3f.png)

1.3 while循环使用案例

1.3.1 求1~100之间的和

  1. 相当于从1累加到100.
    • 提示: 起始值从 1开始.
    """
    1. 第一种计算 1到100和
        1.1 相当于 1+2+3...+100.
        1.2 循环三要素:
             初始化值
             判断条件
             步长(控制循环)
    """
    #1. 初始值
    i = 1
    #3. 累计每一次的和
    sum =0
    #2.1-100之间的和 判断条件 i<=100
    while i<=100:
        sum=sum+i #相当于每次循环累计一次.
        i+=1  # 步长控制循环
    
    #循环结束输出 sum值
    print(sum) #5050
    

1.3.2 求1~100之间偶数之和

  1. 什么是偶数?

    • 需要使用运算符 % 去解决.
    • 使用Debug 查看.
    # i%2==0 就是偶数
    i = 1
    oushu = 0
    while i <= 100:
        # 进行判断偶数
        if i % 2 == 0:
            oushu = oushu + i
        i += 1  # 步长
    print(f"偶数之和{oushu}") #2550
    
    
  2. 第二种方式,通过改变控制条件, 来得到偶数.

    • 需要注意初始化值. 思考?从0开始和从2开始的区别?
    • 如果是使用步长控制值的变化,那么还需要使用选择结构去进行判断么?
    # 第二种写法
    
    i = 0 #既然是偶数相加可以从0开始,或者从2开始.
    oushu = 0
    while i <= 100:
        #就不用判断了.
        oushu = oushu + i
        # 通过步长来控制循环,相当于2
        i = i + 2
    print(f"偶数之和是{oushu}")#2550
    
  3. 自己动手做: 请算出 1~100奇数之和.

    • 思考一下, 这两种写法有什么区别? 用自己的语言描述一下.
    #提示: 什么是奇数? 
    #通过步长控制? 
    #TODO coding
    
    

1.3.3 循环中的"标志变量"

  1. 妈妈每次都要问小明,“你作业做完了么?”,小明只有作业做完了才能出去玩, 没有做完就继续做,直到做完作业才可以.

    • 循环中标志变量的使用.
    '''
    1. 标志变量一般在循环中相当于一个开关,
        碰到了该变量就会停止,
    '''
    # 声明一个标志变量
    answer = "no"
    while answer == "no":
        print("作业中.....")
        answer = input("妈妈问: 小明作业做完了么?")#相当于步长.
        print(f"小明的回答是{answer}")
    print("程序结束")
    
    1. 第二种模式, 使用分支结构.
      • 循环只有为True才能循环, 为False跳出循环.
    answer = True
    while answer:
        answer = input("作业做完了么?")
        # print(f"小明回答,{answer}")
        if answer=="no":
        	#如果回答no 就需要继续循环,循环就是为True时,才可以.
            answer=True
        else:
            answer = False
    
    print("程序结束")
    
  2. 扩展: 如果我想知道妈妈一共问了多少次?

    • 怎么做?
#声明计数器
count = 0

#循环结构中使用
while ...
#TODO 逻辑代码
	count = count + 1

1.4 嵌套循环使用

1.4.1 嵌套循环语法结构

  1. 嵌套顶级,核心语法

    • 联想钟表:分针走一次, 秒针需要走一圈.
    • 即: 外循环循环一次, 内循环循环一圈.
  2. 嵌套循环的语法结构

    • 外层循环执行一次, 内层循环执行多次.
    while 判断条件:  #外循环
    	代码 1
    	
    	while 判断条件: #内循环
    		代码2:
    		步长控制2
    	步长控制1
    

1.4.2 嵌套练习

  1. 要求输出一下格式,循环嵌套的目标结果.

    • 操场跑圈,一共要跑5圈, 每跑一圈,需要做3个俯卧撑.
    '''
    第1圈
        做了第1个俯卧撑
        做了第2个俯卧撑
        做了第3个俯卧撑
    第2圈
        做了第1个俯卧撑
        做了第2个俯卧撑
        做了第3个俯卧撑
    第3圈
        ...
    '''
    
  2. 根据上述需求,可以得知,一共跑5圈,每次3个俯卧撑

    • 提示 : 可以先创建外层循环, 内层循环使用print()输出5次.然后再将内层循环带入.
    • 注意: 格式上的缩进, 步长控制.
    • 使用断点测试代码.
    i = 1
    while i <= 5:
        print(f"跑了第{i}圈")
    	#准备做俯卧撑  
    	#print("做俯卧撑")
        # 内层循环,直接带入.
        j = 1
        while j <= 3:
            print(f"\t做第{j}个俯卧撑") #使用制表符
            j += 1 #注意格式缩进  
        # 外层循环控制
        i += 1
    

1.5 欧几里德算法–最大公约数

  1. 一个数可以整除几个数,那么这几个数称为公约数.

    • 1是最小公约数
  2. 核心思想:% 表示求模运算(取余数)

    • 将两个数, 用较大的数%较小的数,得到 余数。
    • 较小的数和余数再进行同样的操作,直到 余数为 0
    • 此时,较小的数就是原来两个数的最大公约数。
      在这里插入图片描述
    '''
    欧几里德算法
        相除法
    '''
    
    a = int(input("请输入a的值: "))
    b = int(input("请输入b的值: "))
    # 1. 使用大数取模运算小数
    # 1.1 下一步是大数%小数 取余数
    if a < b:
        a, b = b, a
    
    # 2. 这时候小的数就应该是 b了,因为大数给a了
    # 2.1 最小数b的值不能等于 0 因为要做除法
    while b != 0:
        # 2.2 因为交换完成了,a值应该大于b
        r = a % b  # 得出余数
        a = b
    
        b = r  # 什么时候为0 什么时候跳出循环.
    
    print(f"最大公约数就是的值是 {a}")
    
    
    # 拓展二: 函数的方法
    def gcd(a, b):
        """
        计算 a 和 b 的最大公约数
        """
        while b:
            a, b = b, a % b
        return a
    
    # 测试代码
    print(gcd(10, 25))  # 5
    print(gcd(14, 28))  # 14
    
  • 将输入的两个数中的较大数赋值给 a,将较小数赋值给 b,如果 a < b,则交换 a 和 b 的值。
  • 用 b 除以 a,得到商 q 和余数 r。
    • 如果 r 为 0,说明当前的 a 就是输入的两个数的最大公约数,退出循环并返回 a。
    • 否则,将 b 赋值为 a,将 a 赋值为 r,然后继续执行步骤 2

2. for 循环

2.1 语法结构

  1. for循环也是循环,也是表示重复做某些事,只是语法格式同while循环不一样.

    • 但是原理是一样的.
  2. 语法格式

    • 注意: 是可以迭代序列、int类型就不可以。
    for 输出变量名 in 可迭代序列:
    	 循环体
    
  3. 入门案例 变量字符串.

    • 遍历字符串 “hello,world”
    #遍历该字符串
    for i in "hello,world":
        print(i)
    

2.2 练习: 获取1~5的整数

  1. 获取1~5的整数

    #1.直接输入整数是不行的.需要一个范围,且是字符串形式
    # for i in 12345:
    #     print(i) # TypeError: 'int' object is not iterable
    
    print("-"*20) #华丽的分隔符
    
    #2.需要使用字符串的形式
    for i in "12345":
        print(i)
    

2.2.1 range() 函数

  1. range() 函数可创建一个整数列表, 一般用在 for 循环中使用. range(start,stop,step)

    • start:起始值,默认为0。
    • stop:终止值,生成的整数序列不包含该值。
    • step:步长值,默认为1。
  2. range() 使用的三种情况.

    • 自己总结一下规律.
    • 反向遍历,从大到小
    # 1. range(8)      [0,8)
    for i in range(8):
    	print(i) #根据输出结果自己总结
    
    # 2. range(1,8)     [1,8)
    for i in range(1,8):
        print(i)
    
    # 3. range(0,8,2)    [0,8,2) 计数间隔2
    for i in range(0,8,2):
        print(i)
    
    # 4.扩展知识 range(8,0,-2)  
    for i in range(8,0,-2): 
    	print(i) # 相当于从反方向输出,即反向遍历
    
  3. 使用 for循环计算 1~100之间的和.

    • 思考如果求:1~100的偶数之和呢?
    • 扩展 : 也可以使用 range()函数中,步长解决问题
    
    #设置累计求和 sum
    sum = 0
    # for循环语法   range(1,101)
    for i in range(1,101):#需要加到100,[1,101)
        sum = sum+i #累计求和
    
    print(f"1~100的值是{sum}")
    

2.3 for 循环的嵌套使用

2.3.1 统计单词中字符出现的次数

  1. 统计一个字符串中的$符号出现的次数.
    • 还记得累计求和么?
    '''
    统计$出现的次数
    '''
    #定义统计变量
    count = 0
    str = "hel$l$o,w$or$ld"
    for i in str:
        if i == "$":  #判断出现的字符。
            # 进行统计一次
            count = count + 1
    
    print(count)
    

2.3.2 打印直角三角型

  1. 打印直角三角型

    • 使用for循环的嵌套,
    • 外循环控制行, 内循环控制输出次数
  2. 图形如下

        *
        * *
        * * *
        * * * *
        * * * * *
    
  3. 代码:

    • 举一个例子: 最快速的方式 ? 直接print输出,推荐使用 三引号.
    • 使用带入方法,去编写代码.
    """
    第二种方式:采用for循环的方式 
        分析一波:
            for 外层控制输出行数
                for 内循环控制输出次数 
            
            第一次循环: 
                    for 外层循环第1次循环
                         for(内层) 输出1次 *
            第二次循环:
                    for 外层循环第2次循环
                        for(内层) 输出2次  * * 
            第三次循环:
                    for 外层循环第3次循环
                        for(内层) 输出3次  * * *
            第四次循环: 
                    for 外层循环第4次循环 
                        for(内层) 输出4次  * * * * 
            第五次循环
                    for 外层循环第5次循环 
                        for(内层) 输出5次  * * * * * 
    """
    
    for i in range(1,6): # [1,6) 相当于 1,2,3,4,5 次.
            #内层循环控制输出次数
        for j in range(i):
            # 默认输出是"\n",需要该为end=""小细节
            print("*",end=" ") 
        #相当于换行
        print("")
    
  4. 要求输入一个n打印出来相应的行数.即输入几就打印几行.

    • 要了解 range(start,end,step) 的函数.
    #.怎么分析代码?
    #当n =1 时 
    n=1
    for i in range(n):
        for j in range(i):
            print("*", end=" ")
        print("")
    
    #当n=2时...
    n=2
    for i in range(n):
       for j in range(i):
            print("*", end=" ")
        print("")
    # 当n=3时 ...
    n=3
    for i in range(n):
        for j in range(i):
            print("*", end=" ")
        print("")
    
    # 最终: 所以得出结论,输入n+1 就是要打印的行数. 
    n =4
    for i in range(1,n+1):
        for j in range(i):
            print("*", end=" ")
        print("")
    

2.3.3 打印九九乘法表

  1. 使用循环来打印九九乘法表
    2.

    """
    如何分析:
        根据样式发现
            外循环第一次循环
                内循环一次
            外循环 第二次
                内循环输出二次
            外循环  循环9次
                内循环输出9次
    
    """
    # 根据语法格式 先搭建外循环构架
    for i in range(1, 10):
        for j in range(1, i + 1):  # 需要使用i+1 输出第一个
            print(f"{j}x{i}={i * j}", end=" ")
        print("")
     
    print("*"*20)
    
    
  • 思考: 第二种需求,当输入n时 生成 相应的乘法表.

    #2,第二种需求,当输入n时 生成 相应的乘法表.
    n = 11;
    for i in range(1, n+1):
        for j in range(1, i + 1):  # 需要使用i+1 输出第一个
            print(f"{j}x{i}={i * j}", end=" ")
        print("")
    

2.3.4 计算阶乘

  1. 阶乘是一个正整数连乘自己 及之前所有正整数的结果。通常用感叹号(!)表示。

    • 例如,5的阶乘表示为5!
    • 还记得 累计求和的写法?
    5! = 5 × 4 × 3 × 2 × 1 = 120
    
  2. 输入一个数,计算阶乘是多少?

    • 提示: 注意类型转换。
    • 注意: range()格式写法,从什么开始?
    num = int(input("请输入一个数: "))
    
    # 计算这个数就相当于从1开始到这个数的乘法
    # n!= 1x2x3x4x5...n
    # 所以说需要循环
    res = 1
    # range()范围格式是什么样的?
    #range(num) 可以这样写么?为什么
    for i in range(1,num+1):
        res = res * i  # 累计求乘法
        print(i)
    
    print(res)
    

2.4 break 和 continue

2.4.1 break

  1. break 语句用于结束整个循环.

    • 演示break的循环过程
    • 只能使用在循环之中.
    #1.break使用结构,跳出本次循环,并结束程序.
    i=1
    while i<=10:
        print(i) #1 ,2,3 
        if i==3:
            break
        print(f"我执行了么?{i}") #后面的语句就不执行了. 1 ,2
        i+=1
    
    1
    我执行了么?1
    2
    我执行了么?2
    3
    
  2. 使用Debug查看.
    在这里插入图片描述

2.4.2 continue

  1. continue的作用是结束本次循环.执行下一次循环

    • 演示continue 的循环过程.
    • 只能使用在循环之中.
    # 结束本次循环,执行下一次循环
    
    for i in range(1, 10):
        print(i) 
        if i == 3:
            continue
        print(f"我执行了么{i}") #相当于跳过了3,执行了后面.
    

2.5 扩展知识 while - else 结构

  1. 知道有if -else 结构, else 还可以和while一起使用.

    • else执行也是有条件的.
    • pass 占位符语句,又叫空语句.
    # 1. 这叫做等式恒成立结构. 所以 else会是黄色的.
    if 5 > 3:
        print("if")
    else:
        print("else")
    
    # 2. pass 占位语句
    if 5 > 3:
        # 如果不写会报错.
        pass  # 使用pass占位,不执行任何,空语句
    else:
        print("else")
    
    # 3. while-else结构
    # 如果循环正常结束,循环输出就会执行 else里面
    i = 1  # i =11 时 也会执行else里的内容
    while i <= 10:
        print(i)
        i = i + 1
    else: #循环条件不成立时,会执行!
        print("else")
    
    #3.1  如果循环中有break就不会执行.
    i = 1
    while i <= 10:
        print(i)
        if i==3:
            break
        i = i + 1
    else:
        print("else")
    
    

在这里插入图片描述

  1. 思考一下while可以和 else 一起使用,那么 for可以和else一起使用么?
    • 当for循环结束时, 会执行else。
    • 如果 中间有break关键字的话,非正常结束不会执行else中的内容。
    • continue 没有问题。
for i in range(10):
    #if i ==3:
        print(i)
        #break
        #continue 
else:
    print("我什么时候执行的!")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吴琼老师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值