考试技能 · 10 道样题

Python 输出预测题与答案

输出预测是对心智模型的紧凑测试。你需要追踪值、原地修改、格式化和实际打印的字符,而不只是理解代码的大意。

850 道题在完整题库中 · 0 道选择 · 0 道填空 · 850 道输出

这个主题考什么

  • 逐行追踪变量,而不是凭代码形状猜答案。
  • 注意函数或方法是否原地修改了对象。
  • 作答前检查空格、换行、引号和 print 分隔符。

常见错误

  • 只读最后一个表达式,忽略前面某一行的修改。
  • sep 或 end 改变后,仍以为 print 会加空格。
  • 写的是你期望的值,而不是 Python 实际输出的字符。
样题

样题

10

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

  1. 输出预测q0002

    1. 小明写了下面这行,猜猜会打印出什么?

    print(f"奶茶{3+5}元")
    显示答案

    答案

    奶茶8元

    解析: 花括号里是表达式而不是文本:Python 先把 3+5 算成 8 再插入,杯贴上的字就是 Milk tea 8 yuan,不是 Milk tea 3+5 yuan。

  2. 输出预测q0182

    2. `decode('zmlyhgzxovrhlugvmzhgvkkrmthglmv')` 返回什么?

    from string import ascii_lowercase
    
    
    BLOCK_SIZE = 5
    trtbl = str.maketrans(ascii_lowercase, ascii_lowercase[::-1])
    
    
    def base_trans(text):
        return ''.join([character for character in text if character.isalnum()]).lower().translate(trtbl)
    
    
    def encode(plain):
        cipher = base_trans(plain)
        return ' '.join(cipher[idx:idx + BLOCK_SIZE]
                         for idx in range(0, len(cipher), BLOCK_SIZE))
    
    
    def decode(ciphered):
        return base_trans(ciphered)
    
    print(decode('zmlyhgzxovrhlugvmzhgvkkrmthglmv'))
    显示答案

    答案

    anobstacleisoftenasteppingstone

    解析: 没有空格时整串就是一整块。逐字母镜像后,33 个字符正好读作 an obstacle is often a stepping stone。

  3. 输出预测q0359

    3. 三杯咖啡的价格总和是多少?

    prices = [18, 22, 15]
    total = 0
    for price in prices:
        total += price
    print(total)
    显示答案

    答案

    55

    解析: 循环把 18、22、15 累加进 total,打印 55。total 必须先初始化为 0,否则第一次 += 会抛 NameError。

  4. 输出预测q0573

    4. 集合里最大的元素是多少?

    s = {3, 1, 2}
    print(max(s))
    显示答案

    答案

    3

    解析: max 扫描集合并返回最大值 3;集合没有顺序也不影响,因为 max 比较的是值而不是位置,和顺序无关。

  5. 输出预测q0764

    5. `rebase(10, [5], 2)` 返回什么?

    def from_digits(digits, base):
        return sum(number * base ** idx for idx, number in enumerate(reversed(digits)))
    
    
    def to_digits(number, base_to):
        result = []
        while number > 0:
            result.append(number % base_to)
            number //= base_to
        if result:
            return result[::-1]  # list(reversed(result))
        return [0]
    
    
    def rebase(from_base, digits, to_base):
        if from_base < 2:
            raise ValueError("input base must be >= 2")
    
        if to_base < 2:
            raise ValueError("output base must be >= 2")
    
        if any(True for idx in digits if idx < 0 or idx >= from_base):
            raise ValueError("all digits must satisfy 0 <= d < input base")
    
        return to_digits(from_digits(digits, from_base), to_base)
    
    print(rebase(10, [5], 2))
    显示答案

    答案

    [1, 0, 1]

    解析: 5 的二进制是 4 + 1,从高位到低位写作 1、0、1;函数不断取余并收集这些数字,最后把结果倒序输出。

  6. 输出预测q1143

    6. 子类覆盖会员总价方法,输出什么?

    class Order:
        def __init__(self, price):
            self.price = price
        def total(self):
            return self.price
    class MemberOrder(Order):
        def total(self):
            return round(self.price * 0.9, 2)
    print(MemberOrder(18).total())
    显示答案

    答案

    16.2

    解析: 重写的方法把单价乘 0.9 并保留两位:18 × 0.9 = 16.2,会员价取代基础价,调用点完全不变。

  7. 输出预测q1448

    7. 营收降序、店名升序,打印什么?

    rows = [('Hubin', 1800, 'B'), ('Hubin', 1500, 'A'), ('Gaoxin', 1800, 'C')]
    print(sorted(rows, key=lambda r: (-r[1], r[0])))
    显示答案

    答案

    [('Gaoxin', 1800, 'C'), ('Hubin', 1800, 'B'), ('Hubin', 1500, 'A')]

    解析: -1800 排在 -1500 前,两行 1800 因此靠前,同额时由店名决定,Gaoxin 在 Hubin 之前。

  8. 输出预测q1596

    8. 统计“拿铁”出现次数,输出什么?

    print('拿铁拿铁美式'.count('拿铁'))
    显示答案

    答案

    2

    解析: count 数的是不重叠出现次数,这句话里 'latte' 出现两次。count 区分大小写,'Latte' 不会计入这两次。

  9. 输出预测q1782

    9. 海象运算符赋值后参与比较,输出什么?

    if (n := 5) > 3:
        print(n)
    显示答案

    答案

    5

    解析: 海象运算符在条件里把 5 赋给 n 并返回这个值,5 > 3 成立,进到函数体时 n 已经有值;省掉的就是前面那行赋值。

  10. 输出预测q2320

    10. 对重复标题去重并保持顺序,输出什么?

    titles = ['新品', '会员日', '新品', '排行']
    seen = []
    for title in titles:
        if title not in seen:
            seen.append(title)
    print('|'.join(seen))
    显示答案

    答案

    新品|会员日|排行

    解析: 循环只在标题未出现过时追加,第二个「新品」被丢弃,剩「新品|会员日|排行」,原有顺序不变;用 set 就不保证顺序。

常见问题

输出预测如何判分?

练习器会比较去掉首尾空白后的完整文本,包括大小写、空格和换行。

为什么有些答案是多行的?

程序可能打印多行。这些题目使用文本框,要求按顺序输入完整输出。

继续保持练习节奏。

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

打开完整练习