控制流 · 10 道样题

Python 循环练习题与答案

循环让程序开始重复工作。常见错误通常很机械:range 差一位、累加器没有更新,或者 while 条件永远不变成假。

61 道题在完整题库中 · 16 道选择 · 10 道填空 · 35 道输出

这个主题考什么

  • 预测 range 和 while 循环会执行多少次。
  • 一步一步构造总和或筛选后的列表。
  • 有意识地使用 break 和 continue,而不是用它们掩盖不清楚的条件。

常见错误

  • 以为 range(1, 5) 包含 5。结束值不包含在内。
  • 忘记更新 while 条件使用的变量。
  • 在遍历列表时修改它,导致跳过元素。
样题

样题

10

从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。

  1. 选择题q0305

    1. 小明给第 2-5 号桌发优惠券,range(2, 6) 生成哪些桌号?

    1. 2,3,4,5,6
    2. 2,3,4,5
    3. 2,4,6
    4. 0,1,2,3,4,5
    显示答案

    答案

    B. 2,3,4,5

    解析: range(start, stop) 含起点不含终点,所以是 2、3、4、5。把 stop 当成闭区间才会多出 6。

  2. 选择题q0317

    2. 🧋 小明给指定桌号发优惠券,range(10, 0, -1) 生成什么?

    1. 10,9,8,...,1
    2. 10,9,8,...,0
    3. 0,1,...,10
    4. 空序列
    显示答案

    答案

    A. 10,9,8,...,1

    解析: 负步长向下计数,终点同样被排除,0 不会出现;range(10, 0, -1) 到 1 为止。想含 0 要写 range(10, -1, -1)。

  3. 选择题q0324

    3. 🧋 小明把奶茶名和价格配对显示,zip([1,2,3], ['a','b']) 生成几个对?

    1. 3个
    2. 2个
    3. 1个
    4. 报错
    显示答案

    答案

    B. 2个

    解析: zip 在最短的可迭代对象耗尽时停止,多出的 3 被丢弃且不报错。zip_longest 会用填充值保留它。

  4. 选择题q0355

    4. 要依次处理列表里的每一笔订单,最直接的循环是?

    1. match orders
    2. while True
    3. for order in orders
    4. if order in orders
    显示答案

    答案

    C. for order in orders

    解析: for 直接遍历可迭代对象,耗尽即停;while True 则需要手动索引、退出判断和 break,代码更短也更安全。

  5. 填空题q0307

    5. 小明把奶茶名和价格配对显示,同时遍历两个列表用 ___(names, prices)

    显示答案

    答案

    zip

    解析: zip 按位置并行遍历两个可迭代对象,每次产出一个元组供循环解包。它在较短的一方停下,长度不等会悄悄丢数据。

  6. 填空题q0319

    6. 🧋 小明给指定桌号发优惠券,range(3) 生成 ___ 个元素

    显示答案

    答案

    3

    解析: range(3) 产出 0、1、2,共三个值,从 0 开始;新手常按 1 到 3 去数而答成 2,差别就在起点。

  7. 填空题q0336

    7. 哪个内置函数能为 for 循环生成整数序列?

    显示答案

    答案

    range

    解析: range 是惰性产生等差序列的内置函数,不会在内存里建列表;套上 list() 才会把值实体化,大范围也不怕。

  8. 输出预测q0306

    8. 小明把 range 转成列表,下面代码会打印什么?

    print(list(range(2, 6)))
    显示答案

    答案

    [2, 3, 4, 5]

    解析: list() 把 range 的每个值实体化;6 是终点不会出现。range 本身是惰性的,直接打印只会显示 range(2, 6)。

  9. 输出预测q0331

    9. 标牌把 "go" 的字母大写并连续打印。屏幕显示什么?

    for ch in "go":
        print(ch.upper(), end="")
    显示答案

    答案

    GO

    解析: 遍历字符串得到单个字符,upper() 逐个转大写;end='' 去掉换行,字母之间没有分隔符,所以连着打印,结果就是 GO。

  10. 输出预测q0347

    10. `factors(12)` 返回什么?

    def factors(value):
        factor_list = []
        divisor = 2
        while value > 1:
            while value % divisor == 0:
                factor_list.append(divisor)
                value /= divisor
    
            divisor += 1
    
        return factor_list
    
    print(factors(12))
    显示答案

    答案

    [2, 2, 3]

    解析: 12 分解为 2、2、3;内层先把 2 除尽,divisor 才移到 3。divisor 只增不减,所以结果升序。

常见问题

什么时候用 while 而不是 for?

遍历已知集合或范围时用 for;只知道停止条件时用 while。

break 会跳过 else 吗?

会。循环的 else 只在没有 break 正常结束时执行。

继续保持练习节奏。

完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。

打开完整练习