控制流 · 10 道样题

Python 条件判断练习题与答案

条件判断看起来简单,直到两个分支重叠,或者一个真值让你意外。这些题目检查分支顺序、赋值与比较的区别,以及会改变行为的缩进。

43 道题在完整题库中 · 16 道选择 · 8 道填空 · 19 道输出

这个主题考什么

  • 安排 if 和 elif 的顺序,避免宽泛条件挡在前面。
  • 预测空集合、零和 None 的真值。
  • 正确使用比较链和布尔运算符。

常见错误

  • 想写 == 却写成了 =。
  • 把宽泛的 if 放在更具体的 elif 前面,导致 elif 永远执行不到。
  • 看错缩进,误以为某条语句属于上面的分支。
样题

样题

10

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

  1. 选择题q0194

    1. 小明判断「有奶且有茶」才做奶茶:True and False 的结果是?

    1. True
    2. False
    3. 报错
    4. None
    显示答案

    答案

    B. False

    解析: and 遇到一侧为假就返回该值,不再看其余部分;两个条件都要成立,所以结果是 False,短路省掉了后面的判断。

  2. 选择题q0201

    2. 🧋 小明判断「有奶且有茶」才做奶茶,True and 0 的结果是?

    1. True
    2. 0
    3. False
    4. 1
    显示答案

    答案

    B. 0

    解析: and 返回第一个假值,0 是假值,所以结果是 0 而不是 False;真值判断和对象本身不是一回事,这点常被忽略。

  3. 选择题q0207

    3. 🧋 小明根据销量标记「爆款」或「普通」,以下哪个等价于三元运算符 a if cond else b?

    1. 用 if/else 分支分别取 a 或 b
    2. cond ? a : b
    3. a when cond otherwise b
    4. (cond, a, b)
    显示答案

    答案

    A. 用 if/else 分支分别取 a 或 b

    解析: 这个表达式就是 if/else 分别选 a 或 b 的简写。? : 属于 C 系语言,Python 没有。

  4. 选择题q0217

    4. 如果条件是 `if 0:`,会执行哪个分支?

    1. else 分支
    2. if 分支
    3. 发生错误
    4. 两个分支都执行
    显示答案

    答案

    A. else 分支

    解析: if 0 判断真假,0 为假,if 体被跳过、执行 else;空字符串和空列表也是同样结果,不会报错,分支只走一条。

  5. 填空题q0196

    5. 小明查看「珍珠」是否在奶茶加料列表 ["珍珠", "椰果", "布丁"] 里:"珍珠" ___ ["珍珠", "椰果", "布丁"]

    显示答案

    答案

    in

    解析: in 判断成员关系并返回布尔值,boba 正在这三种配料里,所以为真;not in 是它的否定,两者都只返回布尔值。

  6. 填空题q0204

    6. 🧋 小明判断「有奶且有茶」才做奶茶,`1 and 2` 的结果转成 bool 是 ___

    显示答案

    答案

    True

    解析: 1 and 2 因两边都为真而返回 2,bool(2) 是 True;值本身和它的真假是两个问题,别混为一谈。

  7. 填空题q0212

    7. 🧋 小明查看某款奶茶是否在菜单里,判断键'age'是否在字典d中:'age' ___ d

    显示答案

    答案

    in

    解析: 对字典来说 in 查的是键不是值,'age' in d 问的是该键是否存在。要查值得用 d.values()。

  8. 输出预测q0195

    8. 条件表达式把 0 当什么?输出什么?

    x = 0
    print("yes" if x else "no")
    显示答案

    答案

    no

    解析: 0、空字符串、空列表和 None 都算假,所以取 else 的值;只有 x 为真时才会打印 yes,这个规则叫真值判断。

  9. 输出预测q0220

    9. `score(-5, 0)` 返回什么?

    from math import sqrt
    
    # X, and Y variable names against [pylint]: C0104, but is the same as the stub, advise not to change this.
    def score(x, y):
        dart_location = sqrt(x * x + y * y)
    
        if dart_location <= 1.0:
            return 10
        elif dart_location <= 5.0:
            return 5
        elif dart_location <= 10.0:
            return 1
        else:
            return 0
    
    print(score(-5, 0))
    显示答案

    答案

    5

    解析: sqrt(25 + 0) = 5.0,大于 1.0 但不超过 5.0,第二个分支返回 5。判断用的是 <=,边界包含在内。

  10. 输出预测q0226

    10. `equilateral([0.5, 0.5, 0.5])` 返回什么?

    def valid(sides):
        return sum(sorted(sides)[:2]) >= sorted(sides)[2] and all(
            side > 0 for side in sides
        )
    
    
    def equilateral(sides):
        return valid(sides) and all(sides[0] == side for side in sides)
    
    
    def isosceles(sides):
        return valid(sides) and any(
            side_1 == side_2 for side_1, side_2 in zip(sorted(sides), sorted(sides)[1:])
        )
    
    
    def scalene(sides):
        return valid(sides) and not isosceles(sides)
    
    print(equilateral([0.5, 0.5, 0.5]))
    显示答案

    答案

    True

    解析: 浮点同样适用:0.5 + 0.5 >= 0.5 且三边相等,等边判断返回 True。没有任何只许整数的限制。

常见问题

elif 等于 else 里面再写 if 吗?

逻辑上相似,但 elif 让分支互斥,也避免多一层缩进。

哪些值是假?

False、None、数字零,以及空字符串或空集合为假;大多数其他对象为真。

继续保持练习节奏。

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

打开完整练习