菜鸟教程Python 100例在Python 3环境下的代码修正指南

追风的人
追风的人
发布时间:2026-10-28| 8人浏览过
原创

针对菜鸟教程经典的Python 100例在Python 3环境下运行时常见的语法与内置函数报错,提供系统化的代码修改方案、对比分析与排错步骤。

菜鸟教程经典“Python 100例”是许多初学者练习编程逻辑的入门题库,但其中早期整理的部分题目代码源自 Python 2 语法规范。初学者直接复制到 Python 3 解释器中运行时,常会遭遇 SyntaxError 或 NameError。本文直接归纳核心报错根源,系统列出高频修改规则、典型例题代码对照以及环境迁移排错流程,帮助读者顺利在 Python 3 环境下完成全部百例练习。

一、高频报错特征与迁移排查流程

Python 2 到 Python 3 并非简单的增量更新,而是对部分基础语法、I/O 机制以及内置容器迭代方式做了破坏向后兼容的清理。在 100 例练习中,绝大多数执行失败都集中在控制台打印、用户输入、整型除法和生成器范围 4 个关键语法点上。

遇到实例运行报错时,应首先通过解释器抛出的异常类型准确定位差异源头,随后按照固定范式做微调,整体排错流程如下图所示:

菜鸟教程Python 100例在Python 3环境下的代码修正指南
图 1: Python 100例代码在 Python 3 下的错误排查与修复流程

二、四大核心语法的关键差异与修改规则

只要掌握以下四项语法转换,菜鸟教程中 90% 以上无法直接运行的百例题目即可恢复正常执行。

1. print 语句转为 print() 函数

在 Python 2 中,print 属于关键字语句,后面直接跟空格与表达式;末尾加逗号表示不换行。在 Python 3 中,print() 成为内置函数,所有打印参数必须用圆括号包裹,不换行则通过 end 命名参数指定。

  • 常规换行输出: print "Hello" 必须修改为 print("Hello")。
  • 行末不换行: print x, 必须修改为 print(x, end=' ') 或 print(x, end='')。若原题用于打印九九乘法表或几何图案,保留 end=' ' 可防止输出被打散成多行。

2. 输入函数 raw_input() 与 input() 的统一

在 Python 2 中,raw_input() 读取控制台原始文本输入并返回 str;而 input() 则会对输入字符串执行 eval() 求值。Python 3 彻底移除了 raw_input(),并将 input() 调整为始终返回字符串类型。

  • 获取文本: 原 name = raw_input("请输入:") 直接替换为 name = input("请输入:")。
  • 获取数字并计算: 原代码若写 num = input() 期待得到整数,在 Python 3 中必须显式添加类型转换:num = int(input("请输入数字:"))。

3. 循环迭代 xrange() 与 range()

在 Python 2 中,range() 会在内存中立即生成完整的列表,而 xrange() 返回惰性生成器以节省内存。百例中有大量遍历数字范围的习题使用了 xrange()。Python 3 删除了 xrange(),并让内置的 range() 本身就具备惰性求值特性。

  • 修改方式: 全文直接查找并将 xrange(...) 替换为 range(...)。

4. 真除法与整除运算符

在 Python 2 中,两个整数使用 / 相除会截断小数取整(例如 5 / 2 == 2)。在 Python 3 中,单个斜杠 / 统一为真除法,5 / 2 将返回浮点数 2.5。如果算法依赖原有的向零取整逻辑(例如回文数判断、数位拆分、坐标换算),必须显式改用双斜杠 // 整除运算符。

菜鸟教程Python 100例在Python 3环境下的代码修正指南
图 2: 菜鸟教程百例关键语法对比矩阵

三、易混淆认知辨析:直接加括号是否就够了?

许多初学者存在一种常见误解:“Python 3 与 Python 2 最大的差别就是 print,遇到报错只要在 print 后面套上一对括号就能解决所有问题。”

这种说法之所以流行,是因为 print "..." 造成的 SyntaxError: Missing parentheses in call to 'print' 往往出现在代码的第一行或第二行,修复后程序立刻可以往下走。但这种观点并不完整,在菜鸟教程百例的以下场景中容易导致隐蔽的运行错误:

  1. 多项打印的元组陷阱: 在 Python 2 中,print a, b 输出两个用空格隔开的值。若机械地改成 print (a, b),在 Python 2 下会被解析为打印一个元组并带括号 (a, b);在 Python 3 中虽然 print(a, b) 合法,但如果多加了括号层级如 print((a, b)),输出格式就会失真,导致判题或对比失效。
  2. 字典与迭代器遍历: Python 2 教程源码常见 dict.has_key('k')、dict.iteritems()。在 Python 3 中,has_key 已被彻底废除,必须写成 'k' in dict;iteritems() 需改写为 dict.items()。
  3. 排序函数 cmp 参数废弃: 百例中部分高级排序练习题使用了 list.sort(cmp=...) 或 sorted(iterable, cmp=...)。Python 3 中 cmp 参数完全移除,必须改用 key 参数配合 lambda 或 functools.cmp_to_key。

四、典型题目的修正代码对比实例

下面挑选菜鸟教程百例中几道极具代表性的例题,给出原版代码与 Python 3 规范写法对照。

例题 1:九九乘法表(考察 print 不换行与格式化)

原版代码使用末尾逗号控制不换行,且外层使用了 xrange:

# Python 2 原版写法(在 Python 3 中报错)
for i in xrange(1, 10):
    for j in xrange(1, i + 1):
        print "%d*%d=%-3d" % (i, j, i * j),
    print ''

在 Python 3 环境下修正为:

# Python 3 修正写法
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{i}*{j}={i * j:<3}", end=' ')
    print()

修正说明:xrange 变更为 range;print 添加括号并通过 end=' ' 保留每行项之间的空格;字符串格式化改用更直观的 f-string(或保持 "%d*%d=%-3d" % (i, j, i * j))。

例题 2:回文数判断(考察整除与输入类型)

原版代码直接使用 raw_input 获取输入并对整数做数位提取:

# Python 2 原版写法
a = int(raw_input("请输入一个5位数:\n"))
x = a / 10000
y = a % 10
if x == y:
    print "这是个回文数"
else:
    print "这不是回文数"

在 Python 3 环境下修正为:

# Python 3 修正写法
a = int(input("请输入一个5位数:\n"))
x = a // 10000  # 注意:必须使用 // 整除,否则 x 会变成浮点数
y = a % 10
if x == y:
    print("这是个回文数")
else:
    print("这不是回文数")

修正说明:raw_input 改为 input;计算万位数值时必须使用 //,若写成 a / 10000,在 Python 3 中 x 会是浮点类型(例如 12321 / 10000 得到 1.2321),后续条件判断将彻底出错。

菜鸟教程Python 100例在Python 3环境下的代码修正指南
图 3: Python 3 题库代码执行过程中的类型安全防线

五、批量处理建议与常见注意事项

在系统刷完百例题目的过程中,读者可以根据自身情况选择适宜的排查策略:

  • 逐题手工修正(推荐入门者): 每次遇到报错时,查阅本文图 1 流程,手动将 print 补齐括号、将 raw_input 改为 input。这种肌肉记忆能加深对 Python 基础语法的理解。
  • 使用官方 2to3 工具自动化扫描: Python 安装包通常自带 2to3 命令行工具(例如运行 2to3 -w example.py)。该工具能够自动把 print 语句、xrange、以及字典方法转换为 Python 3 语法。需要注意的是,2to3 无法替你判断哪些 / 需要改成 //,仍需人工复查整除逻辑。
  • 保留良好编码习惯: 在 Python 3 环境下书写百例代码时,优先采用 f-string(如 f"结果为: {res}")进行字符串插值,不仅书写更简洁,也能规避原教程中常见的 % 格式化参数不匹配问题。
排错提醒:如果在百例的字符串处理题中遇到 TypeError: can only concatenate str (not "int") to str,说明原代码中存在 print "Result: " + count 这类利用弱类型隐式拼接的假想。在 Python 3 中必须使用逗号传参 print("Result:", count) 或显式强转 str(count)。
菜鸟教程Python 100例在Python 3环境下的代码修正指南
图 4: Python 100例全面迁移自查清单

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。