大家好,欢迎来到《Python 基础语法(上)》这一课。
这一篇是真正意义上的 Python 入门第一课,目标很简单:让零基础的同学能看懂代码、能动手运行代码、能理解 Python 最基本的语法规则。内容不会贪多,但每一个知识点都是后续做爬虫、数据处理、Web 开发、自动化脚本时绕不开的基础部件。
如果你之前没有接触过任何编程语言,这篇文章很适合你。如果你有其他语言基础(比如 C 语言、Java),也可以快速过一遍,重点看 Python 和它们不一样的地方,比如缩进规则、动态类型、for 循环的写法。
学完这一篇,你应该能做到:独立安装 Python 环境、写出并运行第一个 .py 文件、理解变量和数据类型、完成输入输出、使用条件判断和循环解决简单问题。这些能力足够支撑你继续学习函数、文件操作、面向对象等下一个阶段的内容。
1. Python 是什么,为什么要学它
1.1 Python 的历史与定位
Python 诞生于 1991 年,由 Guido van Rossum 设计并推广。它的名字来源于英国喜剧团体 Monty Python,而不是蟒蛇。Python 是一种解释型、面向对象、动态数据类型的高级编程语言。
所谓"解释型",指的是 Python 代码不需要像 C 语言那样先编译成机器码再运行,而是由 Python 解释器逐行读取、逐行执行。这让 Python 的开发效率非常高——写完代码就能立刻看到结果,非常适合做原型设计和快速迭代。
1.2 Python 能做什么
Python 的应用范围非常广,对于新手来说,这其实是一个很大的优势:
- 数据分析与可视化:比如使用 pandas、matplotlib 处理表格数据并绘图。
- 网络爬虫:用 requests 抓取网页、用 BeautifulSoup 解析 HTML。
- Web 开发:Django、Flask 都是非常成熟的 Python Web 框架。
- 人工智能与机器学习:TensorFlow、PyTorch 等主流框架都以 Python 为主要接口。
- 自动化运维与脚本工具:日常文件批量处理、定时任务、命令行工具。
所以,无论你以后想走哪个方向,Python 基础语法都是第一道门槛。语法掌握得越扎实,后面学任何框架的时候越轻松。
1.3 Python 2 和 Python 3 的区别
现在学习 Python,直接使用 Python 3 即可,完全不用考虑 Python 2。Python 2 已于 2020 年 1 月 1 日停止官方维护,目前绝大多数第三方库也都只支持 Python 3。
在学习基础语法时,只需要知道一个最常见的差异:Python 2 中print是语句(print "hello"),Python 3 中print()是函数(print("hello"))。我们后续所有示例都基于 Python 3。
2. 环境准备与第一个 Python 程序
2.1 安装 Python 解释器
在开始写代码之前,先确保你的电脑上已经安装了 Python。
打开终端(Windows 上是 CMD 或 PowerShell,macOS/Linux 上是 Terminal),输入:
python --version如果系统提示'python' 不是内部或外部命令,可能需要尝试:
python3 --version如果还不可以,说明需要手动安装 Python。
Windows 用户推荐从 Python 官网(python.org)下载安装包。安装时务必勾选"Add Python to PATH"选项,否则后续在命令行中使用 python 命令会提示找不到。
macOS 用户也可以使用 Homebrew 安装:
brew install python3版本需要根据你的项目实际情况调整,本文示例以常见稳定版本为例,重点演示语法本身。不管装的是 3.8 还是 3.12,本文涉及的基础语法都是通用的。
2.2 IDE 与编辑器选择
初学者不需要一上来就使用非常复杂的 IDE,但也不建议用记事本写代码。推荐以下几种:
- IDLE:安装 Python 时自带,适合第一次体验。
- PyCharm:功能强大,适合项目开发,社区版免费。
- VS Code:插件丰富,轻量好用,配置 Python 环境也很方便。
不管用哪个编辑器,请务必把文件保存为 UTF-8 编码,并在文件开头保留默认的字符集设置。Python 3 默认使用 UTF-8,所以中文字符串一般不会出现乱码。
2.3 编写第一个程序
新建一个文件,命名为hello.py,输入以下内容:
print("Hello, Python!")在终端中进入该文件所在目录,执行:
python hello.py输出结果:
Hello, Python!是不是很简单?print()是 Python 中最常用的内置函数,它的作用是把括号里的内容输出到屏幕上。
试着修改一下,在字符串中使用中文:
print("你好,Python!")只要文件保存为 UTF-8 编码,运行结果会正常显示:
你好,Python!需要注意的是,Python 中的字符串内容里的中文没有特殊处理,但你的代码文件本身必须采用 UTF-8 编码,否则读取时可能报SyntaxError或出现乱码。
2.4 Python 的交互式模式
除了运行 .py 文件,Python 还提供了交互式解释器。在终端中输入python后回车,会进入类似下面的界面:
Python 3.x.x ... Type "help", "copyright", "credits" or "license" for more information. >>>在>>>提示符后面直接输入代码,回车即可立即看到结果:
>>> print("hello") hello >>> 1 + 2 3交互模式适合快速验证简单语法,但写完整程序时建议保存为 .py 文件,方便重复运行和修改。
3. 变量、数据类型与类型转换
3.1 变量:给数据起个名字
变量是编程中最基础的概念。可以把变量理解为一个"贴了标签的盒子",盒子里面装的就是数据。
在 Python 中,创建变量不需要声明类型,直接赋值即可:
name = "小明" age = 18 score = 95.5这里创建了三个变量:
name变量保存了一个字符串"小明"。age变量保存了一个整数18。score变量保存了一个浮点数95.5。
Python 是一种动态类型语言,意思是变量的类型由它保存的值决定,而且可以在程序运行过程中改变:
x = 10 print(x) x = "现在变成字符串了" print(x)输出:
10 现在变成字符串了这在某些场景下很方便,但在项目开发中不建议频繁改变变量的类型,否则会增加代码阅读和排错的难度。
变量命名需要遵循几条规则:
- 变量名只能包含字母、数字、下划线,且不能以数字开头。
- 变量名不能是 Python 的关键字,比如
if、for、while、def、class等。 - 变量名区分大小写,
Name和name是两个不同的变量。 - 推荐使用小写字母加下划线,例如
user_name、total_price,这种风格叫 snake_case。
3.2 常用数据类型
Python 中最常用的基础数据类型有:
| 类型名称 | 作用 | 示例 |
|---|---|---|
| int | 整数 | 10、-3、0 |
| float | 浮点数(小数) | 3.14、-2.5 |
| str | 字符串 | "hello"、'python' |
| bool | 布尔值 | True、False |
| list | 列表 | [1, 2, 3] |
| tuple | 元组 | (1, 2, 3) |
| dict | 字典 | {"name": "小明"} |
| set | 集合 | {1, 2, 3} |
这一课重点介绍前四种,列表、字典等容器类型会在后续课程中单独讲解。
在 Python 中,可以使用type()函数查看变量的类型:
a = 10 b = 3.14 c = "hello" d = True print(type(a)) print(type(b)) print(type(c)) print(type(d))输出结果:
<class 'int'> <class 'float'> <class 'str'> <class 'bool'>3.3 字符串的引号问题
Python 中字符串可以使用单引号,也可以使用双引号:
s1 = 'hello' s2 = "world"两种写法是等价的。那什么时候要用不同的引号呢?当字符串内容本身包含引号时:
s1 = "He said 'hello'" s2 = 'She said "hi"'如果你想让字符串同时包含单引号和双引号,可以使用三引号:
s3 = """这是包含 '单引号' 和 "双引号" 的字符串"""三引号还有一个作用:写多行字符串。
text = """ 第一行 第二行 第三行 """ print(text)3.4 类型转换
在实际开发中,经常需要把一种类型转换成另一种类型。例如,通过input()输入的数字,默认是字符串,需要转换成整数才能参与数学运算。
num_str = "123" num_int = int(num_str) print(num_int + 1)输出:
124常用的类型转换函数:
| 函数 | 作用 | 示例 |
|---|---|---|
int() | 转换为整数 | int("123")得到123 |
float() | 转换为浮点数 | float("3.14")得到3.14 |
str() | 转换为字符串 | str(123)得到"123" |
bool() | 转换为布尔值 | bool(0)得到False |
注意,int()转换字符串时,字符串必须是合法的数字形式,否则会抛出ValueError。例如int("abc")会报错。
3.5 动态类型与强类型
Python 是动态类型,但也是强类型语言。所谓强类型,指的是不同类型的数据在某些运算中不能自动混用。例如字符串和整数直接相加会产生异常:
print("hello" + 123)运行结果:
TypeError: can only concatenate str (not "int") to str正确的写法是先把数字转换为字符串:
print("hello" + str(123))输出:
hello123这个特性看似繁琐,但能在程序早期发现类型错误,避免一些隐蔽的 bug。
4. 输入输出与格式化
4.1 input():获取用户输入
Python 内置了input()函数,用来读取用户在终端中输入的内容。input()接收一个字符串参数作为提示语,返回值永远是字符串类型。
name = input("请输入你的名字:") print("你好,", name)运行过程如下:
请输入你的名字:张三 你好, 张三注意,这里print("你好,", name)的输出中,逗号会在两个字符串之间自动添加一个空格。如果你不希望有空格,可以使用字符串拼接:
print("你好," + name)4.2 int + input:数字运算
因为input()返回的是字符串,所以需要先转换:
age_str = input("请输入你的年龄:") age = int(age_str) print("明年你的年龄是:", age + 1)运行示例:
请输入你的年龄:20 明年你的年龄是: 21如果用户输入的内容无法转换为整数,比如abc,程序会抛出ValueError。后面讲到异常处理时,会介绍更健壮的写法。
4.3 print() 的完整用法
print()函数可以接收多个参数,它们默认用空格分隔:
print("a", "b", "c")输出:
a b c可以通过sep参数自定义分隔符:
print("a", "b", "c", sep="-")输出:
a-b-cend参数可以指定输出结束后的字符,默认是换行符\n:
print("第一行", end="") print("第二行")输出:
第一行第二行4.4 格式化字符串(f-string)
在 Python 3.6 之后,推荐使用 f-string 来格式化字符串。f-string 是在字符串前面加上f,然后在字符串内部使用{}直接引用变量:
name = "李雷" age = 25 print(f"我的名字是{name},今年{age}岁。")输出:
我的名字是李雷,今年25岁。在花括号中还可以直接写表达式:
a = 10 b = 20 print(f"a + b = {a + b}")输出:
a + b = 30f-string 还支持格式控制,比如保留小数位数:
pi = 3.1415926535 print(f"圆周率取两位小数:{pi:.2f}")输出:
圆周率取两位小数:3.14:.2f的意思是保留两位小数。这个语法在数据分析和报表输出中非常常用。
4.5 转义字符
在字符串中,某些特殊字符需要使用反斜杠\进行转义。最常用的几个:
| 转义字符 | 含义 |
|---|---|
\n | 换行 |
\t | 制表符(Tab) |
\\ | 反斜杠本身 |
\' | 单引号 |
\" | 双引号 |
示例:
print("第一行\n第二行") print("列1\t列2")输出:
第一行 第二行 列1 列25. Python 运算符详解
5.1 算术运算符
Python 中的算术运算符与数学中的写法基本一致,但有几个需要特别注意的差异。
a = 10 b = 3 print(a + b) # 13 print(a - b) # 7 print(a * b) # 30 print(a / b) # 3.3333333333333335 print(a // b) # 3 print(a % b) # 1 print(a ** b) # 1000/是真正的除法,结果一定是浮点数,即使能整除,例如4 / 2的结果是2.0。//是整除,只保留商的整数部分,向下取整。%是取余,用来判断一个数能否被另一个数整除特别方便。**是幂运算,10 ** 3表示 10 的三次方。
5.2 整数与浮点数混合运算
当一个整数和一个浮点数进行运算时,结果是浮点数:
print(10 + 0.5) print(2 * 3.0)输出:
10.5 6.0这一点在 Python 的算术运算中很容易验证。
5.3 比较运算符
比较运算符的结果总是布尔值True或False。
a = 5 b = 8 print(a > b) # False print(a < b) # True print(a == b) # False print(a != b) # True print(a >= 5) # True print(b <= 8) # True==是比较两个值是否相等,而=是赋值,两者千万不能混淆。
5.4 逻辑运算符
Python 中逻辑运算符是三个英文单词:and、or、not。
age = 20 score = 85 print(age >= 18 and score >= 60) # True print(age < 18 or score >= 60) # True print(not age >= 18) # Falseand:两边都为真时结果才为真。or:两边至少一个为真时结果为真。not:取反。
5.5 赋值运算符
除了简单的=,Python 还提供了复合赋值运算符:
a = 10 a += 5 # 等价于 a = a + 5 print(a) # 15 a -= 3 # 等价于 a = a - 3 print(a) # 12 a *= 2 # 等价于 a = a * 2 print(a) # 24 a /= 4 # 等价于 a = a / 4,结果是浮点数 print(a) # 6.05.6 字符串的运算符
字符串也支持一些运算符,比如+用于拼接,*用于重复:
s1 = "Hello" s2 = "World" print(s1 + " " + s2) print(s1 * 3)输出:
Hello World HelloHelloHello字符串还支持成员运算符in和not in:
s = "hello python" print("python" in s) # True print("java" in s) # False6. 条件控制:if / elif / else
6.1 if 语句的基本结构
程序中的条件判断是让代码"聪明"起来的关键。Python 使用if、elif、else来实现分支逻辑。
基础语法如下:
if 条件: # 条件成立时执行的代码块 print("条件成立")注意,Python 中最重要的一条语法规则是:使用缩进来表示代码块。同一个代码块的每一行必须保持相同的缩进量,通常使用 4 个空格。
6.2 单分支、双分支与多分支
age = 18 if age >= 18: print("你是成年人") else: print("你是未成年人")当有多个条件需要依次判断时,使用elif:
score = 85 if score >= 90: print("优秀") elif score >= 80: print("良好") elif score >= 60: print("及格") else: print("不及格")运行输出:
良好这段代码的执行顺序是:从上到下依次判断条件,一旦某个条件成立,执行对应的代码块,然后跳过后面的所有elif和else。因此,条件的顺序很重要。如果把score >= 80放在score >= 90前面,85 分就会先匹配到"良好",而不是"优秀"。
6.3 嵌套判断
在条件分支内部,还可以继续嵌套新的if语句:
age = 20 has_id_card = True if age >= 18: if has_id_card: print("可以进入网吧") else: print("请出示身份证") else: print("未成年人禁止进入")嵌套层次不宜过深,超过两层时建议考虑逻辑重构。
6.4 条件表达式的写法
Python 提供了一种简洁的三元表达式写法,适用于简单的二选一逻辑:
age = 20 result = "成年人" if age >= 18 else "未成年人" print(result)这行代码等价于:
if age >= 18: result = "成年人" else: result = "未成年人"三元表达式可以让代码更紧凑,但嵌套使用会严重影响可读性,不推荐。
6.5 条件判断的常见误区
在 Python 中,某些值在参与布尔判断时会被视为False,它们包括:
- 0 和 0.0
- 空字符串
"" - 空列表
[] - 空字典
{} - 空元组
() None
其他值都被视为True。示例如下:
name = "" if name: print("name 不为空") else: print("name 为空")输出:
name 为空利用这个特性,可以简化很多判断,但刚开始学习时,建议显式写清楚条件,比如if name != "",可读性更好。
7. 循环:for 和 while
7.1 for 循环与 range()
for循环在 Python 中通常用于遍历可迭代对象。最经典的用法是配合range()函数实现指定次数的循环。
for i in range(5): print(i)输出:
0 1 2 3 4注意,range(5)生成的数字是从 0 开始,到 4 结束,不包含 5。这是编程中常见的"左闭右开"区间风格。
如果想从指定数字开始,可以传入两个参数:
for i in range(2, 6): print(i)输出:
2 3 4 5还可以指定步长:
for i in range(1, 10, 2): print(i)输出:
1 3 5 7 9如果需要循环变量递减,可以给 range 传负步长:
for i in range(5, 0, -1): print(i)输出:
5 4 3 2 17.2 for 循环遍历字符串
字符串是字符的有序序列,所以也可以直接使用for遍历:
word = "Python" for ch in word: print(ch)输出:
P y t h o n7.3 while 循环
while循环在条件成立时反复执行代码块,直到条件不成立为止。
count = 0 while count < 5: print(count) count += 1输出:
0 1 2 3 4这里必须记得在循环体内更新count,否则会陷入死循环。
7.4 break 与 continue
break用来结束整个循环,continue用来跳过本轮循环的剩余代码,进入下一轮。
for i in range(1, 10): if i == 5: break print(i)输出:
1 2 3 4continue示例:
for i in range(1, 6): if i == 3: continue print(i)输出:
1 2 4 57.5 else 与循环的搭配
Python 的循环结构有一个独特之处:可以在while或for循环结束后使用else子句。只有在循环"正常结束"(没有被 break 中断)时,else中的代码才会执行。
for i in range(1, 6): if i == 3: break print(i) else: print("循环正常结束")输出:
1 2因为第 3 次循环时触发了break,所以else没有执行。如果把break去掉,else就会执行。这个特性在查找类场景中比较实用,比如判断一个数是否存在。
7.6 循环嵌套
循环内部还可以包含循环。下面是一个简单的乘法口诀表:
for i in range(1, 10): for j in range(1, i + 1): print(f"{j} x {i} = {i * j}\t", end="") print()输出:
1 x 1 = 1 1 x 2 = 2 2 x 2 = 4 1 x 3 = 3 2 x 3 = 6 3 x 3 = 9 ...这段代码中,外层循环控制行数,内层循环控制每一行输出的表达式个数。end=""让 print 不换行,\t用制表符对齐。
8. 综合实战:一个简单的成绩评级程序
现在我们把前面学到的知识点串起来,写一个完整的实战程序。
8.1 需求分析
程序功能:
- 提示用户输入一个 0 到 100 的分数。
- 如果输入无效(不是数字或超出范围),给出提示。
- 根据分数输出评级:
- 90 分以上为 A
- 80 到 89 分为 B
- 70 到 79 分为 C
- 60 到 69 分为 D
- 60 分以下为 E
- 程序支持多次输入,输入
exit时退出。
8.2 代码实现
print("欢迎使用成绩评级系统") while True: # 获取用户输入 user_input = input("请输入成绩(输入 exit 退出):") # 判断是否退出 if user_input == "exit": print("已退出系统") break # 尝试转换为浮点数 score = float(user_input) # 判断成绩是否在有效范围内 if score < 0 or score > 100: print("请输入 0 到 100 之间的数字") continue # 根据分数评级 if score >= 90: grade = "A" elif score >= 80: grade = "B" elif score >= 70: grade = "C" elif score >= 60: grade = "D" else: grade = "E" print(f"成绩:{score} 分,评级:{grade}")8.3 运行结果示例
欢迎使用成绩评级系统 请输入成绩(输入 exit 退出):95.5 成绩:95.5 分,评级:A 请输入成绩(输入 exit 退出):72 成绩:72.0 分,评级:C 请输入成绩(输入 exit 退出):exit 已退出系统注意:示例中的float(user_input)没有做异常处理,如果用户输入abc,程序会报错。这个问题的解决方案会在讲解异常处理时补充。
9. 常见错误与排查思路
| 错误现象 | 常见原因 | 解决思路 |
|---|---|---|
SyntaxError: invalid syntax | 冒号遗漏、括号不匹配、缩进不一致 | 检查报错行附近的语法,重点看冒号和括号 |
IndentationError: unexpected indent | 代码缩进不一致,混用了空格和 Tab | 统一使用 4 个空格缩进 |
NameError: name 'xxx' is not defined | 变量名拼写错误,或变量在使用前未赋值 | 检查拼写,确认变量已定义 |
TypeError: can only concatenate str (not "int") to str | 字符串和整数直接使用+拼接 | 使用str()转换,或改用 f-string |
ValueError: invalid literal for int() | int()转换了非数字字符串 | 先确认输入内容,或使用异常处理 |
ZeroDivisionError: division by zero | 除数为 0 | 在运算前检查除数是否为 0 |
| 中文乱码 | 文件编码不是 UTF-8 | 保存为 UTF-8 编码 |
下面演示一个典型的缩进错误:
if True: print("hello")运行时报错:
File "test.py", line 2 print("hello") ^ IndentationError: expected an indented block解决办法是缩进:
if True: print("hello")还有一个常见情况,if、for、while等语句末尾忘记写冒号:
if True print("hello")报错:
File "test.py", line 1 if True ^ SyntaxError: invalid syntax初学者遇到这些报错不必紧张,Python 的报错信息已经指出了具体文件和行号,按图索骥去检查即可。
10. 最佳实践与学习建议
10.1 编码规范
虽然 Python 对代码格式要求很宽容,但建议一上手就养成好习惯:
- 缩进统一使用 4 个空格,不要在代码中混用 Tab 和空格。
- 变量名要有含义,
a、b、c不适合在大型项目中使用,user_name、total_price更清晰。 - 在运算符两侧加一个空格,例如
a + b,而不是a+b。 - 逗号后面加一个空格,例如
print(a, b),而不是print(a,b)。 - 每行代码不宜过长,超过 79 个字符时考虑换行。
10.2 代码注释
注释是对代码的解释说明,Python 使用#表示单行注释:
# 计算圆的面积 radius = 5 area = 3.14 * radius ** 2 print(area)多行注释可以使用三引号:
""" 本函数用来计算两个数的和 参数 a: 第一个数 参数 b: 第二个数 返回值: 两数之和 """好的注释能帮助别人(以及三个月后的自己)快速理解代码意图。但不要写过于冗长的注释,注释应该解释"为什么",而不是逐行翻译代码。
10.3 声明变量与命名风格
在 Python 中,类名通常使用大驼峰(StudentInfo),函数名和变量名使用小写加下划线(get_user_info、user_name),常量使用全大写(MAX_VALUE)。虽然这些不是语法强制要求,但是社区通用的约定。
10.4 边学边练
学习编程最关键的是动手。每看完一个小节,都可以打开 Python 交互模式或者创建一个 .py 文件,把示例代码敲一遍。敲代码的过程和抄代码完全是两回事,前者会逼你注意每一个标点和空格。
下面给出几个简单的练习题,建议独立完成:
- 输入两个数字,输出它们的和、差、积、商。
- 输入一个年份,判断它是否为闰年(年份能被 4 整除且不能被 100 整除,或者能被 400 整除)。
- 使用循环输出 1 到 100 之间的所有偶数。
- 使用 while 循环计算 1 到 100 的和。
- 打印一个由
*组成的直角三角形,第一行 1 个,第二行 2 个,以此类推。
10.5 善用官方文档
遇到不确定的语法细节,最权威的参考是 Python 官方文档,地址是 docs.python.org。搜索引擎也能帮你解决问题,但要注意判断资料是否基于 Python 3,以及是否适用于你当前的版本。
11. 下一步学习方向
这一篇我们完成了 Python 基础语法的上篇,重点内容包括:
- Python 环境搭建与第一个程序
- 变量、数据类型与类型转换
- 输入输出与 f-string 格式化
- 各类运算符的使用
- if 条件判断
- for 和 while 循环
- 一个完整的成绩评级实战程序
- 常见语法错误的排查思路
这些都是 Python 中最核心、最基础的部分。掌握了这些内容,你其实已经能写出一些简单的自动化脚本了,比如批量生成文件、循环输出报告、处理数学计算等。
下一篇(基础语法下篇)通常应该围绕这几个方向展开:
- 列表、元组的操作
- 字典与集合
- 函数定义与参数传递
- 文件读写
- 模块与包的使用
建议在学习这些内容之前,先把本课涉及的基础语法多练习几遍。每道练习题都亲自动手写一遍,再对照思路优化。如果文章中有什么不清楚的地方,也欢迎在评论区留言交流。