• 2.11 流程控制之for循环


    在这里插入图片描述

    1. for 循环语句

    for 语句, 常用于遍历字符串, 列表, 元组, 字典, 集合等序列类型, 逐个获取序列中的元素.
    遍历: 是指沿着某条搜索路线, 依次全部访问.
    
    格式: 
    for 迭代变量 in 可迭代对象:
        代码块
        
    结构: 
    * 1. for 关键字
    * 2. 迭代变量, 用于接收从序列类型变量中读取出来的元素, 默认只能取一个元素.
         变量名如果没有合适的名称 那么可以使用i, j, k, v, item等.
    * 3. in 关键字
    * 5. 可迭代对象+: 可迭代对象: 字符串|列表|元组|字典|集合|range 序列类型.
    * 6. 代码块
    
    * for 循环能够做的 while 循环都能做, 只不过实现方式稍微复杂.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2. for 遍历

    2022-11-23_01628

    2.1 遍历字符串
    str1 = 'abcd'
    
    # 遍历字符串, 按索引 0 开始将一个个元素取出赋值给i.
    for i in str1:
        # 打印 i
        print(i)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2022-11-23_01619

    2.2 遍历列表
    list1 = ['a', 'b', 'c', 'd']
    
    
    # 遍历列表, 按索引 0 开始一个个元素取出来赋值给i.
    for i in list1:
        # 打印 i
        print(i)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2022-11-23_01620

    2.3 遍历元组
    t1 = ('a', 'b', 'c', 'd')
    
    
    # 遍历元组, 按索引 0 开始一个个元素取出来赋值给i.
    for i in t1:
        # 打印 i
        print(i)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2022-11-23_01621

    2.4 遍历字典
    遍历有字典得到字典的key, 通过 字典[key] 将值取出.
    Python 3.5 前字典是无序的, 需要注意取出的 key 是没有顺序的.
    
    • 1
    • 2
    dict1 = {'name': 'kid', 'age': 18, 'hobby': 'read'}
    
    # 变量字典, 将一个个Key取出赋值给k.
    for k in dict1:
        # 打印key
        print(k)
    
    
    # 变量字典, 将一个个Key取出赋值给k.
    for k in dict1:
        # 通过key取值
        print(dict1[k])
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2022-11-23_01622

    交互环境下使用需要注意代码块的缩进.
    输入连续行时, 显示次要提示符, 默认是三个点 (...) , 缩进后写代码块, 输入空行取消缩进结束代码块.
    
    • 1
    • 2

    2022-11-03_01257

    2.5 遍历集合
    集合在存储值前会先去重.
    集合是无序的, 输出是没有顺序的.
    
    • 1
    • 2
    # 集合在存储值前会先去重
    set1 = {11, 22, 33, 44, 11, 22, }
    
    # 遍历集合的值
    for i in set1:
        print(i)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20221123025024433

    3. 多个迭代变量

    迭代变量, 用于接收从序列类型变量中读取出来的元素, 默认只能取一个元素.
    如果元素是一个容器类型, 有多个值, 可以使用多个迭代变量获取.
    
    • 1
    • 2
    dict1 = {'name': 'kid', 'age': 18, 'hobby': 'read'}
    
    # [('name', 'kid'), ('age', 18), ('hobby', 'read')]
    print(dict1.items())
    
    # 变量字典, 将一个个Key取出赋值给k.
    for item in dict1.items():
        # 打印 item
        print(item)
    
    # 变量字典, 将一个个Key取出赋值给k.
    for k, v in dict1.items():
        # 打印 k, v
        print(k, v)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2022-11-23_01623

    4. range 序列类型

    4.1 序列类型
    range 是一种序列类型, 用于表示不可变的整数序列.
    
    可用内置函数 range() 创建一个迭代器对象, 可以通过 list() 转换为列表.
    无论多长的序列, range 对象占用得内存空间是一定的, 用到时才会计算序列中的元素.
    
    
    三种调用方式:
    * 1. range(stop): stop 终止位, 值是多少就在可迭代对象中创建多少个值, 值从0开始创建.
         : range(10) 创建一个可迭代对象, 包含整数 0  9. 
         Python 2 中是一个列表 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    * 2. range(start, stop): start 起始位,  值从起始位开始创建开始创建.
        : range(5, 10) 创建一个可迭代对象, 包含整数 5  9. 
        Python 2 中是一个列表 [5, 6, 7, 8, 9]
        
    * 3. range(start, stop ,step): step 间隔, 创建值间隔 step , 默认是1.
        : range(1, 10, 2) 创建一个可迭代对象, Python 2 中是一个列表 [1, 3, 5, 7, 9]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    4.2 终止位参数
    # 创建一个迭代对象
    range_num = range(10)
    
    # 对象在没有使用的时候占用的空间很小, 使用的时候才会计算产生的值并占用空间. 查看对象不会触发.生变化.
    print(range_num)
    # 将迭代对象转为列表
    print(list(range_num))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20221123034311593

    4.3 起始位参数
    # 创建一个迭代对象
    range_num = range(5, 10)
    # 将迭代对象转为列表
    print(list(range_num))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20221123034404681

    4.4 间隔参数
    # 创建一个迭代对象
    range_num = range(1, 10, 2)
    # 将迭代对象转为列表
    print(list(range_num))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20221123034427941

    4.5 遍历整数序列
    # 先创建整数序列, 在遍历获取整数序列中的值
    for i in range(10):
        print(i)
    
    
    • 1
    • 2
    • 3
    • 4

    image-20221123034453782

    4.6 range 版本区别
     Python2  range() 直接生成一个列表, xrangr() 是迭代器.
    Python3 中的 range() 就是 Python2 中的 xrange(), Python2  range() 直接被删除掉了.
    
    • 1
    • 2

    2022-11-03_01270

    直接生成一个列表, 列变所有对象一次性在内存中创建出来, 使用的内存大.
    
    迭代器对象在没有被引用的时候, 就是一个生成序列对象的语句, ( 查看对象不会触发. )
    在引用时触发这个语句, 才会计算需要产生的值, 占用一个数据的空间, 
    每次对象取出后, 就将空间给下一个新生成的对象使用, 就只占用一个数据的空间.
    
    • 1
    • 2
    • 3
    • 4
    • 5

    5. for + break

     for  break 用于结束本层循环.
    
    • 1
    # 遍历整数序列 0-9
    for i in range(10):
        # i 等于 4, 执行break语句终止for 循环
        if i == 4:
            break
        print(i)
    
    print('程序结束!')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2022-11-23_01626

    6. for + continue

     for  continue 用于结束本次循环.
    
    • 1
    # 遍历整数序列 0-9
    for i in range(10):
        # i 等于 4, 执行continue语句, 代码块执行到这里就结束了, 不往后面执行, 回到for循环的条件判断处.
        if i == 4:
            continue
        print(i)
    
    print('程序结束!')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2022-11-23_01625

    7. for + else

    for 循环还可以增加一个 else 从句, for  else 缩进相同.
     for 循环正确执行完毕后结束循环之后, 会执行 else 的子代码.
    如果,  break 语句中断的循环不执行 else 的子代码.
    
    • 1
    • 2
    • 3
    # 遍历 0-4
    for i in range(5):
        # i 等于 2 结束本次循环
        if i == 2:
            continue
        # 打印 i
        print(i)
    
    # for 循环正常结束执行的语句
    else:
        print('for 循环正常结束!')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    image-20221123035631421

    8. for 嵌套

    # 遍历整型序列
    for i in range(3):
        # 遍历整型序列
        for x in range(3):
            print(i, x)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2022-11-23_01624

    设计一个程序打印九九乘法表.
    
    • 1
    # 遍历 1 到 9
    for x in range(1, 10):
        # 每次遍历 1 到 x+1
        for y in range(1, x + 1):
            # {:2} 占2位, 整理格式 | end=' ' 结尾符号设置为空格, 内循环在一行中打印
            print(f'{x} * {y} = {x * y:2}', end=' ')
        # 分行
        print()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20221123035043616

    9. 练习

    1. 设计一个程序将豆瓣top250的全部网址全打印出来.
    
    • 1
    豆瓣网电影top250
    首页   https://movie.douban.com/top250
    第二页 https://movie.douban.com/top250?start=25&filter=  
    第三页 https://movie.douban.com/top250?start=50&filter= 
    那么第一页首页推测为: (首页和这个地址都可以使用)
    第一页 https://movie.douban.com/top250?start=0&filter=
    往后推测:
    
    第四页 https://movie.douban.com/top250?start=75&filter=  
    第五页 https://movie.douban.com/top250?start=100&filter=  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2022-11-03_01266

    2022-11-03_01267

    # 豆瓣地址
    url = r'https://movie.douban.com/top250?start=%s&filter='
    
    # 0 - 250 间隔 25
    for i in range(0, 250, 25):
        print(url % i)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    运行工具窗口显示:
    https://movie.douban.com/top250?start=0&filter=
    https://movie.douban.com/top250?start=25&filter=
    https://movie.douban.com/top250?start=50&filter=
    https://movie.douban.com/top250?start=75&filter=
    https://movie.douban.com/top250?start=100&filter=
    https://movie.douban.com/top250?start=125&filter=
    https://movie.douban.com/top250?start=150&filter=
    https://movie.douban.com/top250?start=175&filter=
    https://movie.douban.com/top250?start=200&filter=
    https://movie.douban.com/top250?start=225&filter=
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    image-20221103114147740

    # 2. for循环嵌套之打印99乘法表
    for x in range(1, 10):
        for y in range(1, x+1):
            #  <2 对齐默认不写就是空格
            print(f'{x} x {y} = {x * y: <2}', end=' ')
        print()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    # 3. for循环嵌套之打印金字塔
    """
               *
              ***
             *****
            *******
           *********
          ***********
    """      
    for x in range(10):
        print(' ' * (10-x), '*' * (1 + 2 * x))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    # 4. 寻找1到100之间, 数字7最大的倍数, 使用for变量(结果是98)
    # 定义一个变量
    tem = 0
    # 变量整型序列 1 - 100
    for i in range(1, 101):
        # i 对 7 求余 等于 0
        if i % 7 == 0:
            # i 的值比 tem 变量值大
            if tem < i:
                # 将 tem 引用 i 的值
                tem = i
    
    else:
        print(tem)
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    # 整型序列(倒序)
    for i in range(101, 1, -1):
        if i % 7 == 0:
            print(i)
            break
       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
    文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.


  • 相关阅读:
    上机实验四 图的最小生成树算法设计 西安石油大学数据结构
    高项 10 项目沟通和干系人管理
    【EI检索】第四届公共卫生与数据科学国际学术研讨会(ICPHDS 2023)
    CSS基础知识:选择器分类
    mysql 按照时间戳字段每5年统计一次记录数
    linux命令集合
    网页脚本语言第一节课9.19
    鸿蒙面试题
    Java dom4j操作xml文件的方法大全
    【Vue】父子组件间如何通过事件进行通信(1)
  • 原文地址:https://blog.csdn.net/qq_46137324/article/details/127668119