Files
coding-mentor-agent/kb/python-course-kb-practical-python/wiki/summaries/02_Hello_world.md
T

8.9 KiB
Raw Blame History

doc_type, full_text
doc_type full_text
short sources/02_Hello_world.md

02_Hello_world 总结

本文是 Python 入门课程的第一个实践程序章节,围绕如何运行解释器、使用交互式 REPL、创建并执行 .py 文件,以及理解最基础的 Python 语法结构展开。它为后续学习数字、表达式、控制流和调试奠定基础。相关主题可延伸为 Python解释器、REPL、Python基础语法、调试与错误信息。

运行 Python

Python 程序总是在解释器中运行。解释器通常是一个基于控制台的程序,可以从终端或命令行启动:

python3

启动后会进入 Python 提示符环境。虽然初学者可能更常使用 IDE,但掌握在终端中运行 Python 仍然是重要技能,因为很多课程练习和调试操作都假设学习者能直接与解释器交互。

交互模式与 REPL

启动 Python 后会进入交互模式,也称为 REPL(Read-Eval-Print Loop,读取-求值-打印循环)。在该模式中输入语句会立即执行,无需经历传统的编辑、编译、运行、调试循环。

示例:

>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

REPL 的关键提示符包括:

  • >>>:开始输入新语句。
  • ...:继续输入多行语句,例如循环体或条件块。
  • 空行:结束多行输入并执行。

交互模式中,下划线 _ 保存上一次表达式的结果:

>>> 37 * 42
1554
>>> _ * 2
3108

但这一行为只适用于交互模式,不应在普通程序文件中依赖 _。

创建和运行程序文件

Python 程序通常写在 .py 文件中,例如:

# hello.py
print('hello world')

可以使用任意文本编辑器创建该文件。执行程序时,在终端中调用 Python:

python hello.py

在 Windows 上,可能需要指定解释器完整路径,例如:

c:\python36\python hello.py

如果 Python 安装配置正确,也可能直接运行脚本文件名。

示例程序:西尔斯大厦纸币问题

章节通过一个指数增长问题展示 Python 程序结构:假设第一天在芝加哥西尔斯大厦旁放 1 张美元纸币,此后每天纸币数量翻倍,问纸币堆多长时间会超过大厦高度。

核心程序:

bill_thickness = 0.11 * 0.001 # Meters (0.11 mm)
sears_height = 442 # Height (meters)
num_bills = 1
day = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

程序展示了变量、表达式、while 循环、缩进代码块、打印输出和循环终止条件等核心概念。运行结果表明,第 23 天纸币高度超过大厦,高度约为 461.37344 米。

语句

Python 程序由一系列语句组成:

a = 3 + 4
b = a * 2
print(b)

每条语句通常以换行结束,程序按从上到下的顺序执行,直到文件末尾或流程控制改变执行路径。

注释

注释是不会被执行的文本,用于解释代码:

a = 3 + 4
# This is a comment
b = a * 2

Python 使用 # 表示注释,从 # 开始直到行尾的内容都会被解释器忽略。

变量与命名规则

变量是值的名字。Python 变量名可以包含:

  • 大小写字母;
  • 下划线 _;
  • 数字,但数字不能作为第一个字符。

示例:

height = 442   # 合法
_height = 442  # 合法
height2 = 442  # 合法
2height = 442  # 非法

类型与动态类型

Python 变量不需要声明类型。类型属于右侧的值,而不是变量名本身:

height = 442           # 整数
height = 442.0         # 浮点数
height = 'Really tall' # 字符串

这说明 Python 是动态类型语言:同一个变量名在程序执行过程中可以绑定到不同类型的值。相关主题可归入 动态类型。

大小写敏感

Python 区分大小写。以下是三个不同变量:

name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'

Python 语言关键字必须使用小写:

while x < 0:   # 正确
WHILE x < 0:   # 错误

while 循环

while 语句用于重复执行一组语句:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

只要 while 后面的条件表达式为真,缩进块中的语句就会持续执行。循环结束后,程序继续执行后续未缩进的语句。

该主题可连接到 循环控制。

缩进

Python 使用缩进表示语句分组,而不是使用花括号。以下缩进语句共同构成 while 循环体:

    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

未缩进的语句不属于循环体:

print('Number of days', day)

空行只影响可读性,不影响程序执行。

缩进最佳实践:

  • 使用空格而不是制表符;
  • 每一级缩进使用 4 个空格;
  • 使用支持 Python 的编辑器;
  • 同一代码块内缩进必须一致。

缩进不一致会导致语法错误或逻辑错误。相关主题可见 Python缩进。

条件语句

if 语句用于条件执行:

if a > b:
    print('Computer says no')
else:
    print('Computer says yes')

多个条件可以用 elif 表示:

if a > b:
    print('Computer says no')
elif a == b:
    print('Computer says yes')
else:
    print('Computer says maybe')

这构成 Python 基础控制流的一部分,可链接到 条件控制。

print 输出

print() 函数用于输出一行文本:

print('Hello world!')

打印变量时,输出的是变量当前绑定的值,而不是变量名:

x = 100
print(x)

传入多个值时,print() 默认用空格分隔:

name = 'Jake'
print('My name is', name)

print() 默认在末尾添加换行。可通过 end 参数修改结尾内容:

print('Hello', end=' ')
print('My name is', 'Jake')

输出结果为:

Hello My name is Jake

用户输入

input() 函数用于读取用户键入的一行文本:

name = input('Enter your name:')
print('Your name is', name)

input() 会先显示提示信息,然后返回用户输入的字符串。它适合小程序、学习练习和简单调试,但在真实大型程序中并不常作为主要交互方式。

pass 空语句

pass 用于表示空代码块:

if a > b:
    pass
else:
    print('Computer says false')

它也称为 no-op 语句,即“不执行任何操作”。通常用作占位符,方便之后补充代码。

练习 1.5:弹跳球

练习要求编写 bounce.py:一个橡皮球从 100 米高度落下,每次反弹到上一次下落高度的 3/5,打印前 10 次反弹高度。

目标输出类似:

1 60.0
2 36.0
3 21.599999999999998
...
10 0.6046617599999998

可以使用 round() 函数将结果四舍五入到 4 位,以获得更整洁的输出:

1 60.0
2 36.0
3 21.6
...
10 0.6047

这个练习强化变量更新、循环计数和浮点数显示问题。

练习 1.6:调试

练习提供了一个带错误的 sears.py 版本:

day = days + 1

运行后会出现:

NameError: name 'days' is not defined

关键调试要点:

  • 回溯信息(traceback)的最后一行通常说明真正的错误原因;
  • 回溯中会显示文件名、行号和出错代码片段;
  • 本例错误是变量名写错:应使用 day,而不是未定义的 days;
  • 修正为:
day = day + 1

该练习强调阅读错误信息是 Python 编程的重要技能,相关主题可整理为 Python异常与回溯 和 调试与错误信息。

核心收获

  • Python 程序运行在解释器中,可通过终端或 IDE 使用。
  • REPL 适合探索、实验和快速调试。
  • .py 文件用于保存可重复运行的程序。
  • Python 程序由顺序执行的语句组成。
  • # 用于注释。
  • 变量无需声明类型,Python 是动态类型语言。
  • Python 区分大小写,关键字必须小写。
  • while、if、elif、else 构成基础控制流。
  • 缩进是 Python 语法的一部分,用于定义代码块。
  • print() 输出文本,input() 获取用户输入。
  • pass 可作为空代码块占位符。
  • 阅读 traceback 是定位和修复错误的关键能力。