第 1 章 第一个程序:Hello, World!
学习目标
- 完成 Python 的安装并验证版本
- 能用三种方式运行 Python:交互式解释器、脚本文件、编辑器
- 会使用
print输出文本与数值 - 认识注释与缩进
- 能读懂第一条报错信息
1.1 认识 Python
Python 是一种解释型、面向对象的编程语言。所谓「解释型」,是指代码由解释器逐行读取并执行,不需要像 C 语言那样先编译成机器码。你写下的每一行代码,解释器读到哪一行,就执行哪一行。
本书所有示例基于 Python 3.10 及以上版本,统称为 Python 3。本书约定命令行统一使用 python3 命令(Windows 上若只有 python 命令,下文所有 python3 替换为 python 即可)。
1.2 安装 Python
- 打开官方网站 https://www.python.org/downloads/,下载对应操作系统的最新 Python 3 安装包。
- Windows:安装时务必勾选 Add Python to PATH(把 Python 加入环境变量),否则命令行找不到
python3命令。 - macOS:安装官方安装包,或使用 Homebrew(
brew install python)。 - Linux:多数发行版自带 Python 3,可用系统包管理器安装。
安装完成后,在终端(Windows 为「命令提示符」或 PowerShell)输入:
$ python3 --version输出类似:
Python 3.12.3小版本号以你安装的为准。只要以 3 开头即可继续学习。
1.3 三种运行方式
1.3.1 交互式解释器(REPL)
REPL 是 Read-Eval-Print Loop(读取-求值-打印循环)的缩写,指逐行输入、立即执行并显示结果的交互式环境。
在终端输入 python3 回车,出现 >>> 提示符后即可逐行输入代码:
$ python3
>>> print("Hello, World!")
Hello, World!
>>> if True:
... print("缩进内的代码")
...
缩进内的代码REPL 适合实验语法、快速验证想法。退出方式:输入 exit() 后回车,或按 Ctrl+D(macOS / Linux)/ Ctrl+Z(Windows)。
1.3.2 脚本文件
把代码保存到以 .py 结尾的文件,再用解释器一次运行整个文件。这是写程序的主要方式,代码可以保存、修改、反复运行。
新建文件 hello.py,内容:
print("Hello, World!")在终端运行:
$ python3 hello.py
Hello, World!1.3.3 编辑器(VS Code)
编辑器是带语法高亮、自动补全和调试功能的写代码工具。推荐 VS Code:
- 安装 VS Code,再安装扩展 Python(微软官方)。
- 打开
hello.py,点右上角三角形「运行」按钮,或按 F5。 - 输出会显示在下方终端面板。
三种方式的取舍:REPL 用来试语法,脚本文件用来写正式程序,编辑器让写脚本更顺手。本书从下一章起,统一把代码写在脚本文件里。
1.4 print:输出函数
函数是一段有名字、可被调用的代码。print() 是 Python 内置函数,作用是把括号里的内容输出到屏幕。
print("Hello, World!")
print(1 + 2)
print("你好,Python")运行输出:
Hello, World!
3
你好,Python两点约定,先记住:
- 字符串(一串文字)用引号包裹:
"Hello, World!"是字符串,Hello, World!(不带引号)不是。 - 数值不用引号:
print(1 + 2)会先计算 1+2 再输出 3。
print 可以一次输出多个内容,逗号分隔,默认用空格连接;sep 参数可指定分隔符:
print(1, 2, 3, sep="-")输出:
1-2-31.5 注释
注释是以 # 开头、写给读者看的文字。解释器会完全忽略注释,不执行它们。
# 打印问候语
print("Hello, World!")规范:注释说明「为什么这样写」,而不是复述「代码在做什么」——代码本身已经说明了做什么。
1.6 缩进:Python 的语法规则
缩进指行首的空格。在大多数语言里缩进只是排版习惯,但在 Python 里,缩进是语法的一部分:它表示一段代码属于哪个代码块。
if True:
print("条件成立")if True: 下一行缩进了 4 个空格,表示这一行属于 if 语句的代码块。同一代码块内的行必须使用相同的缩进,否则 Python 会报 IndentationError。本书约定统一用 4 个空格缩进(编辑器通常会自动把 Tab 键转换为 4 个空格)。
1.7 读懂第一条报错
代码写错时,解释器会打印 traceback(错误追踪),它至少包含三样信息:出错的文件与行号、错误类型、错误信息。先看下面的真实例子。
例子一:名字没有定义
在 REPL 中输入 print(你好)——注意,你好 没有加引号:
>>> print(你好)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name '你好' is not defined解读:错误类型是 NameError(名字错误),信息是 name '你好' is not defined(名字 '你好' 未定义)。因为 你好 没有加引号,Python 不认为它是字符串,而是把它当作一个「名字」去找对应的值,找不到就报错。正确写法是 print("你好")。
例子二:字符串缺少结束引号
脚本文件 demo.py 第 2 行少写了一个右引号:
File "/tmp/demo.py", line 2
print("这一行会出错)
^
SyntaxError: unterminated string literal (detected at line 2)解读:错误类型是 SyntaxError(语法错误),^ 指示出错位置,unterminated string literal 表示字符串没有结束引号。
读报错三步:
- 看最后一行:错误类型 + 一句话说明。
- 看文件名与行号:去对应文件、对应行检查。
- 对照
^指示的位置,逐字符检查。
报错不是失败,而是解释器在告诉你「代码哪里不符合规则」。学会读报错,是独立编程的第一项基本功。
动手实践
- 新建
hello.py,用print打印你的名字和一句自我介绍(两行),运行并确认输出。 - 在 REPL 里故意输入
print(张三),观察报错;再用「读报错三步」说出:错误类型是什么、错在哪里、如何修复。 - 写一段包含
#注释和if True:缩进代码的程序,运行验证输出。
常见错误
| 错误写法 | 报错信息 | 原因 |
|---|---|---|
print(你好) | NameError: name '你好' is not defined | 字符串忘了加引号 |
print("你好) | SyntaxError: unterminated string literal | 右引号缺失或不成对 |
print(“你好”) | SyntaxError: invalid character '“' (U+201C) | 用了中文全角引号 |
| if 后代码不缩进 | IndentationError: expected an indented block | 代码块必须缩进 |
Print("hi") | NameError: name 'Print' is not defined. Did you mean: 'print'? | Python 大小写敏感,Print 不是 print |
章末练习
基础
- 编写程序,输出以下三行内容(每行一句):
Hello, World! I am learning Python. Nice to meet you. - 编写程序,用一条
print输出2026-08-02,要求使用sep参数。 - 在 REPL 中完成:先输入
print("你好"),再故意输入print(你好),观察两种结果的差别。
提高
- 下面代码有两处错误,找出并修复:python
# 打印我的年龄 print("我今年" 18 "岁") - 用注释解释下面代码中每一行的作用:python
# 你的解释写在这里 print("第一行") print("第二行", "第三行", sep=" | ")
挑战
- 不运行代码,写出
print("A", "B", sep="+", end="!")的输出结果,再运行验证。end参数的含义可以自己查资料或试验后给出。
章末自测
每题选择一个最佳答案。本书不附答案:完成后交由老师或 AI 老师批改讲解。
- Python 代码文件的标准扩展名是?
- A.
.py - B.
.txt - C.
.exe - D.
.doc
- A.
- 在终端进入 Python 交互式环境的命令是?
- A.
python3 run - B.
python3 - C.
run python3 - D.
python3 start
- A.
print("2 + 3")的输出是?- A.
5 - B.
2 + 3 - C. 报错
- D.
"2 + 3"
- A.
print(2 + 3)的输出是?- A.
5 - B.
2 + 3 - C. 报错
- D.
"2 + 3"
- A.
- 下列哪一行是合法的注释?
- A.
// 注释 - B.
<!-- 注释 --> - C.
# 注释 - D.
/* 注释 */
- A.
- 在 Python 中,
if True:下一行代码必须?- A. 顶格书写
- B. 缩进书写
- C. 加引号
- D. 加括号
print("a", "b")的输出是?- A.
a b - B.
ab - C.
a,b - D.
a"b"
- A.
- 报错信息中的
NameError通常表示?- A. 文件名错误
- B. 使用了未定义的名字
- C. 网络错误
- D. 内存不足
- 输出
2026-08-02,正确的写法是?- A.
print(2026, 08, 02, sep="-") - B.
print("2026-08-02") - C. A 和 B 都可以
- D.
print("2026", "08", "02")
- A.
- 退出 REPL 的方法是? A. 输入
exit()B. 按 Ctrl+D(Linux/macOS) C. 以上都可以 D. 关闭终端
