这个主题考什么
- 逐行追踪变量,而不是凭代码形状猜答案。
- 注意函数或方法是否原地修改了对象。
- 作答前检查空格、换行、引号和 print 分隔符。
常见错误
- 只读最后一个表达式,忽略前面某一行的修改。
- sep 或 end 改变后,仍以为 print 会加空格。
- 写的是你期望的值,而不是 Python 实际输出的字符。
样题
从完整题库中挑出的 10 道代表题。先自己作答,再展开答案。
-
1. 小明写了下面这行,猜猜会打印出什么?
print(f"奶茶{3+5}元")显示答案
答案
奶茶8元解析: 花括号里是表达式而不是文本:Python 先把 3+5 算成 8 再插入,杯贴上的字就是 Milk tea 8 yuan,不是 Milk tea 3+5 yuan。
-
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. 三杯咖啡的价格总和是多少?
prices = [18, 22, 15] total = 0 for price in prices: total += price print(total)显示答案
答案
55解析: 循环把 18、22、15 累加进 total,打印 55。total 必须先初始化为 0,否则第一次 += 会抛 NameError。
-
4. 集合里最大的元素是多少?
s = {3, 1, 2} print(max(s))显示答案
答案
3解析: max 扫描集合并返回最大值 3;集合没有顺序也不影响,因为 max 比较的是值而不是位置,和顺序无关。
-
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. 子类覆盖会员总价方法,输出什么?
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. 营收降序、店名升序,打印什么?
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. 统计“拿铁”出现次数,输出什么?
print('拿铁拿铁美式'.count('拿铁'))显示答案
答案
2解析: count 数的是不重叠出现次数,这句话里 'latte' 出现两次。count 区分大小写,'Latte' 不会计入这两次。
-
9. 海象运算符赋值后参与比较,输出什么?
if (n := 5) > 3: print(n)显示答案
答案
5解析: 海象运算符在条件里把 5 赋给 n 并返回这个值,5 > 3 成立,进到函数体时 n 已经有值;省掉的就是前面那行赋值。
-
10. 对重复标题去重并保持顺序,输出什么?
titles = ['新品', '会员日', '新品', '排行'] seen = [] for title in titles: if title not in seen: seen.append(title) print('|'.join(seen))显示答案
答案
新品|会员日|排行解析: 循环只在标题未出现过时追加,第二个「新品」被丢弃,剩「新品|会员日|排行」,原有顺序不变;用 set 就不保证顺序。
常见问题
输出预测如何判分?
练习器会比较去掉首尾空白后的完整文本,包括大小写、空格和换行。
为什么有些答案是多行的?
程序可能打印多行。这些题目使用文本框,要求按顺序输入完整输出。
继续保持练习节奏。
完整题库会在这个浏览器里记住进度,支持按主题筛选,并包含每日一题和错题重练。