1. 题目背景与价值解析
董付国老师的Python小屋系列编程题在Python学习者中享有盛誉,其中121-130这组题目特别适合已经掌握Python基础语法、正需要提升实际问题解决能力的中级学习者。这组题目覆盖了字符串处理、数学运算、文件操作等核心知识点,每个题目都设计精巧,能够有效训练编程思维。
我在实际教学中发现,很多学习者在完成基础语法学习后,会遇到"知道语法但不会解决问题"的瓶颈期。这组题目恰好填补了这个空白——它们不像算法竞赛题那样艰深,又比基础练习题更有挑战性,是提升实战能力的绝佳素材。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目详解与实现思路
2.1 题目121:字符串加密
题目要求实现一个简单的字母替换加密算法,将输入字符串中的每个字母替换为字母表中后面第n个字母。
核心解法:
python复制def encrypt(text, n):
result = []
for char in text:
if char.isalpha():
shift = 65 if char.isupper() else 97
new_pos = (ord(char) - shift + n) % 26
result.append(chr(new_pos + shift))
else:
result.append(char)
return ''.join(result)
关键点说明:
- 使用
ord()和chr()实现字母与ASCII码的转换 - 考虑大小写区分处理(65和97分别是A和a的ASCII码)
- 取模运算处理z之后循环回到a的情况
注意:实际应用中这种简单替换加密并不安全,这里仅作算法练习。生产环境应使用标准加密库。
2.2 题目122:素数生成器
生成指定范围内的所有素数,使用埃拉托斯特尼筛法实现。
优化实现:
python复制def primes_in_range(start, end):
if end < 2:
return []
sieve = [True] * (end + 1)
sieve[0] = sieve[1] = False
for i in range(2, int(end ** 0.5) + 1):
if sieve[i]:
sieve[i*i::i] = [False] * len(sieve[i*i::i])
return [i for i, is_prime in enumerate(sieve) if is_prime and i >= start]
算法解析:
- 初始化一个布尔列表表示数字的素数状态
- 从2开始,将每个素数的倍数标记为非
