1.2 Python 基本语法
前言:为什么语法是编程的基石?
在成功搭建了开发环境之后,我们正式踏入了Python编程的世界。如果说编程是构建数字世界的魔法,那么语法(Syntax) 就是施展这个魔法所必须念诵的精准咒语。
语法是一套规则,它定义了如何将词汇(关键字、变量名、运算符等)组合成计算机能够理解和执行的指令。学习语法看似枯燥,但它是你与计算机沟通的基础。本篇文章将带你系统性地掌握Python的核心语法元素,并通过大量实战案例,让你不仅“知道”是什么,更能“理解”为什么,并“学会”怎么用。
一、 初识Python程序:你的第一句“Hello, World!”
遵循编程界的传统,我们的起点是让计算机向世界问好。
实战案例1-1:Hello World程序
在你的PyCharm或VSCode中,创建一个新的Python文件,命名为 basic_syntax.py。输入以下代码:
# 这是一个简单的打印语句
print("Hello, World!")
print('你好,世界!')
代码解析与运行结果:
print()是Python内置的一个函数(Function),它的作用是将括号内的内容输出到控制台。- 被打印的内容
"Hello, World!"和'你好,世界!'被称为字符串(String),是Python的一种基本数据类型。在Python中,单引号'和双引号"都可以用来表示字符串。 - 以
#开头的内容是注释(Comment),计算机会忽略它,它是写给程序员看的说明文字。 - 运行结果:
Hello, World! 你好,世界!
这个简单的程序展示了Python语法的一个核心特点:简洁和直观。你不需要像C/Java那样先定义一个类或main函数,直接写指令即可执行。
二、 代码的组织结构:缩进、注释与行连接
Python以其独特的语法规则而闻名,其中最著名的就是使用缩进来定义代码块。
1. 缩进(Indentation):Python的“花括号”
在大多数语言(如C、Java)中,使用花括号 {} 来标识代码块(如函数体、循环体)。而Python使用缩进(通常是4个空格或一个Tab键)来强制规定代码的结构。
正确示例:
if True:
print("This is inside the if block") # 前面有4个空格的缩进
print("This is also inside") # 同样需要缩进
print("This is outside the if block") # 缩进结束,回到外层代码块
if True:后面的两行缩进代码属于同一个代码块。- 最后一行没有缩进,表示它不在
if语句的控制范围内。
错误示例(会导致IndentationError):
if True:
print("This will cause an error!") # 错误:缺少缩进
print("This is wrong too!") # 错误:意外的缩进
重要: 在整个项目中,务必保持缩进风格一致(要么全用空格,要么全用Tab)。PyCharm/VSCode等编辑器通常会自动帮你处理为4个空格,这是PEP 8(Python官方风格指南)推荐的做法。
2. 注释(Comments):代码的说明书
注释用于解释代码的目的、逻辑或暂时禁用某段代码,是提高代码可读性和可维护性的关键。
- 单行注释: 以
#开头,其后的内容直到行尾都是注释。# 这是一个单行注释 radius = 5 # 这是定义圆半径的代码,后面也可以跟注释 - 多行注释(块注释): 虽然Python没有真正的多行注释语法,但通常用三个连续的单引号
'''或双引号"""来包裹多行注释。实际上,它们是未被赋值的字符串(文档字符串,Docstring),但解释器会忽略它们,因此常被用作注释。''' 这是一个多行注释(文档字符串) 可以用来描述函数、模块的功能 或者写一段较长的说明文字 这是第三行 '''
3. 行连接:让长代码更易读
当一行代码非常长时(PEP 8建议每行不超过79字符),为了易读性,我们需要将其分成多行。
- 使用反斜杠
\:total_sum = value_one + \ value_two + \ value_three - 使用括号
(): 在括号((),[],{})中的内容会自动连接,这是更推荐的方式。total_sum = (value_one + value_two + value_three) # 更清晰,且无需反斜杠 my_list = [ 'item1', 'item2', 'very_long_item_number_three' ]
三、 变量的命名与赋值:给数据贴上好记的标签
变量(Variable) 可以理解为计算机内存中一个存储位置的标签,你通过这个标签来存取数据。
1. 变量的赋值
Python中使用等号 = 进行赋值操作。
# 将数字 10 赋值给变量名为 message 的变量
message = "Hello Python World!"
print(message)
# 将数字 100 赋值给变量 counter
counter = 100
print(counter)
# 可以同时为多个变量赋值
a, b, c = 1, 2, "john"
print(a, b, c)
运行结果:
Hello Python World!
100
1 2 john
2. 变量的命名规则(非常重要)
良好的变量名是“代码即文档”的第一体现。
- 可以包含: 字母(a-z, A-Z)、数字(0-9)、下划线(_)
- 必须以字母或下划线开头,不能以数字开头。
- 区分大小写:
my_var、My_Var和MY_VAR是三个不同的变量。 - 不能使用Python的保留字(关键字) 作为变量名。
Python部分关键字一览:and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield
命名风格(PEP 8推荐):
- 蛇形命名法(snake_case): 变量、函数、方法名应全部小写,单词间用下划线连接。例如:
student_name,calculate_average_score。 - ** Pascal命名法(PascalCase):** 类名应采用首字母大写的驼峰式。例如:
Student,BankAccount。 - 全大写+下划线(UPPER_CASE): 常量名通常全部大写。例如:
PI,MAX_CONNECTIONS。
好的命名 vs 坏的命名:
# 坏的命名:含义模糊
n = "Alice" # n是什么?
a = 25 # a是什么?
# 好的命名:清晰表达意图
student_name = "Alice"
student_age = 25
file_path = "/home/user/data.txt"
is_connected = True
四、 核心数据类型初探:数字、字符串与布尔值
Python中的每个值都有一个特定的数据类型(Data Type)。理解数据类型是正确操作数据的前提。
1. 数字(Number)
主要用于存储数值,分为整数、浮点数、复数等。
- 整型(int): 正整数、负整数和零。例如:
10,-5,0。Python 3的int是无限精度的。 - 浮点型(float): 带小数点的数。例如:
3.14,-0.001,2.0。可以用科学计数法表示:6.022e23。 - 复数(complex): 例如
1+2j,常用于科学计算。
实战案例1-2:数字的基本运算
# 赋值
integer_var = 10
float_var = 3.14
complex_var = 1 + 2j
# 查看变量的类型
print(type(integer_var)) # <class 'int'>
print(type(float_var)) # <class 'float'>
print(type(complex_var)) # <class 'complex'>
# 类型转换
result = integer_var + float_var # int 和 float 运算,结果是 float
print(result) # 13.14
print(type(result)) # <class 'float'>
# 强制类型转换
float_to_int = int(3.99) # 直接截断小数部分,结果是 3,不是四舍五入
int_to_float = float(10) # 结果是 10.0
numeric_string_to_int = int("100") # 字符串 "100" 转成整数 100
2. 字符串(String)
由零个或多个字符组成的有限序列,用单引号 ' 或双引号 " 包围。
single_quotes = '这是一个字符串'
double_quotes = "这也是一个字符串"
字符串的常用操作:
- 拼接(Concatenation): 使用
+号first_name = "张" last_name = "三" full_name = first_name + last_name print(full_name) # 张三 - 重复(Repetition): 使用
*号laugh = "Ha" big_laugh = laugh * 5 print(big_laugh) # HaHaHaHaHa - 索引(Indexing): 通过下标获取单个字符,下标从0开始。
s = "Python" print(s[0]) # 'P' print(s[3]) # 'h' print(s[-1]) # 'n' (负数索引表示从右往左数,-1是最后一个) - 切片(Slicing): 获取字符串的子串,语法
[start:end:step]。s = "HelloWorld" print(s[0:5]) # 'Hello' (从0开始,到5结束,不包含5) print(s[5:]) # 'World' (从5开始,到末尾) print(s[:5]) # 'Hello' (从开头,到5结束) print(s[::2]) # 'Hlool' (步长为2,隔一个取一个) print(s[::-1]) # 'dlroWolleH' (步长为-1,实现字符串反转) - 常用方法(Methods): 字符串是对象,可以调用其方法。
s = " hello, World! " print(s.lower()) # ' hello, world! ' 转小写 print(s.upper()) # ' HELLO, WORLD! ' 转大写 print(s.strip()) # 'hello, World!' 去除首尾空格 print(s.replace('o', '0')) # ' hell0, W0rld! ' 替换 print(s.split(',')) # [' hello', ' World! '] 分割,返回列表 print(len(s)) # 15 获取字符串长度
3. 布尔值(Boolean)
只有两个值:True 和 False(注意首字母大写)。常用于条件判断和逻辑运算。
is_sunny = True
is_raining = False
print(type(is_sunny)) # <class 'bool'>
布尔值通常由比较运算符产生:
age = 18
print(age >= 18) # True
print(age == 10) # False
print(age != 10) # True
五、 运算符与表达式:让数据“动”起来
运算符是用于执行程序代码运算的符号。
1. 算术运算符: +, -, *, /, // (整除), % (取模), ** (幂)
a = 10
b = 3
print(a + b) # 13
print(a - b) # 7
print(a * b) # 30
print(a / b) # 3.333... (结果是float)
print(a // b) # 3 (整除,向下取整)
print(a % b) # 1 (取余数)
print(a ** b) # 1000 (10的3次方)
2. 比较(关系)运算符: ==, !=, >, <, >=, <=
(返回值是布尔型 True 或 False)
x = 5
y = 8
print(x == y) # False
print(x != y) # True
print(x > y) # False
print(x < y) # True
print(x <= 5) # True
3. 赋值运算符: =, +=, -=, *=, /=, //=, %=, **=
count = 10
count += 2 # 等价于 count = count + 2
print(count) # 12
count **= 2 # 等价于 count = count ** 2
print(count) # 144
4. 逻辑运算符: and, or, not
(用于组合多个布尔条件)
age = 25
has_license = True
# and: 两者都为True,结果才为True
can_drive = age >= 18 and has_license
print(can_drive) # True
# or: 只要有一个为True,结果就为True
is_weekend = True
is_holiday = False
can_relax = is_weekend or is_holiday
print(can_relax) # True
# not: 取反
is_busy = not can_relax
print(is_busy) # False
5. 成员运算符: in, not in
(用于检查一个值是否存在于序列(如字符串、列表)中)
name = "Alice"
print('A' in name) # True
print('lice' in name) # True
print('z' not in name) # True
numbers = [1, 2, 3, 4]
print(3 in numbers) # True
6. 身份运算符: is, is not
(用于比较两个对象的内存地址是否相同,即是否是同一个对象)
a = [1, 2, 3]
b = a # b 和 a 指向同一个列表对象
c = [1, 2, 3] # c 是另一个新的列表对象,虽然值和a一样
print(a is b) # True
print(a is c) # False (id(a) != id(c))
print(a == c) # True (值相等)
注意: 通常用 == 比较值是否相等,用 is 比较是否是同一个对象。对于 None、True、False 这样的单例对象,使用 is 进行比较是更推荐的做法。
六、 程序的控制流:让程序学会“思考”和“重复”
程序不再是简单的从上到下执行,而是可以根据条件选择不同的路径,或者循环执行某段代码。
1. 条件语句(if, elif, else):决策的艺术
if 语句用于判断一个条件是否成立,并决定执行哪块代码。
基本语法:
if condition1:
# 如果 condition1 为 True,执行这里的代码块
do_something()
elif condition2:
# 如果 condition1 为 False 但 condition2 为 True,执行这里
do_something_else()
else:
# 如果所有上述条件都为 False,执行这里
do_default_thing()
elif是 “else if” 的缩写,你可以有任意多个elif。else是可选的。
实战案例1-3:成绩等级判断
# 从用户输入获取成绩,input()返回的是字符串,需要用int()转换
score = int(input("请输入你的成绩(0-100): "))
if score >= 90:
grade = 'A'
print("优秀!")
elif score >= 80:
grade = 'B'
print("良好。")
elif score >= 70:
grade = 'C'
print("中等。")
elif score >= 60:
grade = 'D'
print("及格。")
else:
grade = 'F'
print("不及格,需要努力!")
print(f"你的成绩等级是:{grade}") # 使用f-string格式化输出,后续文章详解
可能的运行结果:
请输入你的成绩(0-100): 85
良好。
你的成绩等级是:B
嵌套if语句:
num = 10
if num > 0:
print("正数")
if num % 2 == 0:
print("并且是偶数")
else:
print("并且是奇数")
else:
print("非正数")
2. 循环语句(for, while):重复的力量
A. for 循环:遍历序列for 循环用于迭代遍历任何可迭代对象(如字符串、列表、元组等)。
基本语法:
for element in iterable:
# 对每个 element 执行操作
process(element)
实战案例1-4:遍历各种序列
# 遍历字符串
language = "Python"
for char in language:
print(char, end='-') # P-y-t-h-o-n-
print("\n") # 换行
# 遍历数字序列:使用 range() 函数
# range(start, stop, step)
print("打印 0 到 4:")
for i in range(5): # 从0开始,到5停止(不包含5)
print(i, end=' ') # 0 1 2 3 4
print("\n打印 2 到 8,步长为2:")
for i in range(2, 9, 2):
print(i, end=' ') # 2 4 6 8
print("\n计算1+2+...+100的和:")
total = 0
for number in range(1, 101):
total += number
print(f"总和是:{total}") # 5050
B. while 循环:条件循环
只要给定的条件为 True,while 循环就会一直执行。
基本语法:
while condition:
# 只要 condition 为 True,就重复执行
do_something()
# 通常需要在循环体内改变条件,否则可能成为死循环
实战案例1-5:while循环与用户交互
# 简单的计数器
countdown = 5
while countdown > 0:
print(f"倒计时: {countdown}")
countdown -= 1 # 等同于 countdown = countdown - 1
print("发射!")
# 用户交互:直到用户输入'quit'才退出
user_input = ""
while user_input.lower() != 'quit': # .lower()使输入不区分大小写
user_input = input("请输入一些内容(输入'quit'退出): ")
if user_input != 'quit':
print(f"你输入了: {user_input}")
print("程序已退出。")
循环控制语句:break, continue, else
break:立即终止整个当前循环。continue:跳过当前循环的剩余语句,直接进入下一轮循环。else:如果循环正常执行完毕(即不是由break语句终止),则会执行else后面的代码块。这是一个非常有用但常被忽略的特性。
实战案例1-6:循环控制实战
# 寻找第一个能被7和9整除的数
print("寻找第一个能被7和9整除的数(在1-100之间):")
for num in range(1, 101):
if num % 7 == 0 and num % 9 == 0:
print(f"找到了!它是: {num}")
break # 找到后立即退出循环,提高效率
else:
# 如果整个循环走完都没遇到break,才会执行这里
print("在范围内没有找到这样的数。")
# 打印10以内的奇数(使用continue跳过偶数)
print("\n10以内的奇数有:")
for i in range(11):
if i % 2 == 0:
continue # 如果是偶数,跳过下面的print,直接下一轮
print(i, end=' ') # 1 3 5 7 9
# 一个简单的“猜数字”游戏(综合运用)
print("\n\n--- 猜数字游戏 ---")
secret_number = 42
guess = None
attempts = 0
while guess != secret_number:
attempts += 1
guess = int(input("猜一个1到100之间的数字: "))
if guess < secret_number:
print("猜小了!再试一次。")
elif guess > secret_number:
print("猜大了!再试一次。")
else:
print(f"恭喜你!你在第{attempts}次猜对了!")
七、 综合实战:极简命令行计算器
现在,让我们运用本章所学的所有知识(变量、数据类型、运算符、输入输出、条件判断、循环),构建一个可以持续运行的计算器。
项目目标:
- 支持加(+)、减(-)、乘(*)、除(/)四种运算。
- 程序持续运行,直到用户选择退出。
- 处理基本的输入错误(如除零错误、非数字输入)。
代码实现:
# comprehensive_calculator.py
print("欢迎使用极简命令行计算器!")
print("支持运算: +, -, *, /")
print("输入 'quit' 退出程序")
while True:
# 获取用户输入
user_input = input("\n请输入算式 (例如: 5 + 3): ")
# 退出检查
if user_input.lower() == 'quit':
print("感谢使用,再见!")
break
# 分割输入
parts = user_input.split() # 默认按空格分割,例如 "5 + 3" -> ['5', '+', '3']
# 输入验证:必须是三部分
if len(parts) != 3:
print("错误:请输入有效的算式,格式为 '数字 运算符 数字' (例如: 5 + 3)")
continue
num1_str, operator, num2_str = parts
# 验证输入是否为数字
try:
num1 = float(num1_str)
num2 = float(num2_str)
except ValueError:
print("错误:请输入有效的数字!")
continue
# 进行计算
result = None
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
# 处理除零错误
if num2 == 0:
print("错误:除数不能为零!")
continue
else:
result = num1 / num2
else:
print(f"错误:不支持的运算符 '{operator}'")
print("请使用 +, -, *, 或 /")
continue
# 输出结果
# 如果结果是整数,则输出为整数形式,避免多余的 .0
if result.is_integer():
result = int(result)
print(f"{num1} {operator} {num2} = {result}")
代码深度解析:
- 整体结构: 使用
while True:构建一个无限循环,通过内部的break来退出。 - 输入处理: 使用
split()方法将用户输入的字符串分割成列表,便于提取操作数和运算符。 - 错误处理(初级):
if len(parts) != 3:检查输入格式是否正确。try...except ValueError:尝试将输入字符串转换为浮点数,如果转换失败(用户输入了非数字字符),则捕获ValueError异常并提示用户。if num2 == 0:在除法运算前检查除数是否为零,避免程序因ZeroDivisionError而崩溃。
- 条件判断: 使用
if-elif-else链来判断运算符并执行相应的计算。 - 输出优化: 使用
is_integer()方法判断结果是否为整数,如果是则转换为int类型输出,使结果显示更美观。
运行示例:
欢迎使用极简命令行计算器!
支持运算: +, -, *, /
输入 'quit' 退出程序
请输入算式 (例如: 5 + 3): 10 / 3
10.0 / 3.0 = 3.3333333333333335
请输入算式 (例如: 5 + 3): 8 * 7
8.0 * 7.0 = 56
请输入算式 (例如: 5 + 3): 5 / 0
错误:除数不能为零!
请输入算式 (例如: 5 + 3): hello + world
错误:请输入有效的数字!
请输入算式 (例如: 5 + 3): quit
感谢使用,再见!
总结与展望
本文我们系统地学习了Python的基本语法,这是你编程之旅的坚实第一步。我们从最简单的“Hello, World!”程序开始,逐步深入到:
- 代码结构: 理解了缩进、注释和行连接的重要性。
- 变量与命名: 学会了如何给数据命名并赋值,并遵守良好的命名规范。
- 核心数据类型: 探索了数字(int, float)、字符串和布尔值(bool)及其常用操作。
- 运算符: 掌握了算术、比较、赋值、逻辑等运算符,让数据产生交互和变化。
- 控制流: 赋予了程序“思考”(if/elif/else)和“重复劳动”(for/while)的能力,并学会了用break和continue精细控制循环。
- 综合实战: 最后,我们将所有知识点融会贯通,完成了一个具有错误处理功能的命令行计算器项目。
这些概念是通用的编程基础,不仅适用于Python,对你学习任何其他语言都会有巨大帮助。
思考题:
- 如果不使用
try...except,你还能用什么方法验证用户输入的是否为数字? - 我们的计算器目前要求数字和运算符之间必须有空格,如何修改才能让它也能识别
5+3这样的无空格输入? - 如果想给计算器添加乘方(**)运算,应该如何修改代码?
更多推荐

所有评论(0)