Python基础语法
参考:豆包-跟着ai学习
-
本章学习知识点
-
注释(单行 #、多行 """""")、代码缩进规则(4 个空格)
-
变量与命名规范(字母 / 数字 / 下划线,不能以数字开头,PEP8 规范)
-
核心数据类型:
- 基本类型:字符串(str)、整数(int)、浮点数(float)、布尔值(bool)
- 容器类型:列表(list)、元组(tuple)、字典(dict)、集合(set)
- 运算符:算术运算(+/-/*//%/**)、比较运算(==/!=/is)、逻辑运算(and/or/not)、赋值运算(+=/-=)
-
一、注释
注释是对代码的解释说明,不会被 Python 解释器执行,目的是让自己或他人看懂代码。
-
单行注释(最常用)
-
语法:用
#开头,#后面的内容为注释 -
位置:可单独占一行,或跟在代码后面(需间隔 2 个空格)
python# 这是单独一行的单行注释:定义用户姓名 name = "小明" # 这是行尾注释:变量存储用户姓名(代码与注释间隔2空格) age = 20 # 存储用户年龄,整数类型
-
-
多行注释(代码块说明)
-
语法:用 3 对双引号
""" 注释内容 """包裹 -
适用场景:注释多行代码、函数 / 类的功能说明(文档字符串)
python""" 这是多行注释的第一行 第二行:用于说明下面的代码功能 功能:计算两个数的和并打印结果 """ a = 10 b = 20 print(a + b) # 输出 30 # 文档字符串(特殊的多行注释,可通过 help() 查看) def add(x, y): """ 两数相加函数(文档字符串) :param x: 第一个加数 :param y: 第二个加数 :return: 两个数的和 """ return x + y help(add) # 运行后会显示上面的文档字符串, 会直接输出整个函数
-
-
注释规范(PEP8 要求)
- 单行注释尽量简洁,避免冗余
- 行尾注释仅用于说明关键代码,不滥用
- 复杂代码块必须加注释,说明 "为什么这么写"(而非 "写了什么")
二、代码缩进
Python 不像其他语言(如 Java、C)用
{}划分代码块,而是用 缩进 来标识代码层级,缩进错误会直接导致语法错误。
-
缩进规则
-
标准缩进:4 个空格(Python 官方推荐,IDE 中按 Tab 键可自动转换)
-
同一层级的代码必须保持相同缩进(否则报错)
-
不同层级的代码缩进不同(如 if 条件下的代码比 if 本身多 4 空格)
bash# 正确示例:if 语句的代码块缩进 4 空格 name = "小红" if name == "小红": print("姓名匹配") # 缩进 4 空格(与 if 同一层级的子代码) print("欢迎使用") # 同一层级,保持 4 空格缩进 else: print("姓名不匹配") # else 与 if 同一层级,子代码仍缩进 4 空格 # 示例2 if name == "小红": print("姓名匹配") # 缩进 4 空格(与 if 同一层级的子代码) else: print("姓名不匹配") # 只要不是同一个处理段内的 缩进不同也能执行,最好保持一致 # 错误示例:缩进不一致 if name == "小红": print("正确缩进") print("错误缩进") # 缩进变成 2 空格,会报 SyntaxError
-
-
常见缩进场景
-
条件语句:if-elif-else 的子代码
-
循环语句:for/while 的子代码
-
函数 / 类:def/class 定义后的子代码
python# 循环语句缩进 for i in range(3): print(i) # 缩进 4 空格,循环体内的代码 if i == 1: print("这是第二个数") # 嵌套缩进(再加 4 空格,共 8 空格) # 函数定义缩进 def say_hello(): print("Hello") # 函数体内缩进 4 空格 print("Python")
-
-
易错点提示
- 不要混合使用空格和 Tab 缩进(IDE 可能显示正常,但运行时会报错)
- 缩进层级要清晰,嵌套越多,缩进越多(建议嵌套不超过 3 层,否则代码可读性差)
- VS Code 中可开启 "显示空格" 功能(设置 → 搜索 "显示空格"),避免缩进错误
三、变量与命名规范
变量是指代一块内存地址的 "标签",用于存储数据(如数字、字符串),后续可通过变量名调用数据。
3.1、变量定义与赋值
-
语法:
变量名 = 值(=是赋值运算符,不是 "等于") -
特点:Python 是动态类型语言,无需声明变量类型,赋值时自动确定类型
python# 定义不同类型的变量 name = "小李" # 字符串类型变量 age = 25 # 整数类型变量 height = 1.75 # 浮点数类型变量 is_student = True # 布尔值类型变量 # 变量重新赋值(类型可改变) age = 26 # 从 25 改为 26(同一变量名可存储不同值) is_student = False # 从 True 改为 False(类型不变) height = "175cm" # 从浮点数改为字符串(类型可改变) # 多变量同时赋值 a, b, c = 10, 20, 30 # a=10,b=20,c=30 x = y = 5 # x=5,y=5(同一值赋值给多个变量)
3.2、命名规范
-
必须遵守的规则
-
变量名只能包含:字母(a-z/A-Z)、数字(0-9)、下划线(_)
-
不能以数字开头(如
123name非法) -
不能使用 Python 关键字(如
if、for、class等,见下方列表) -
大小写敏感(
name和Name是两个不同变量)python# 合法变量名 user_name = "张三" age18 = 18 student_id = 1001 _name = "匿名用户" # 非法变量名(运行会报错) # 1name = "错误" # 以数字开头 # user-name = "错误" # 包含减号(只能用下划线) # if = 5 # 使用关键字 if
-
-
Python 关键字列表(不可用作变量名)
python# 查看所有关键字 import keyword print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield'] -
推荐遵循的规范(PEP8 标准)
-
下划线命名法(变量 / 函数推荐):小写字母 + 下划线,如
user_name、order_total -
全大写(常量推荐):如
MAX_AGE = 120、DB_HOST = "localhost"(语法无强制,仅规范) -
见名知意:变量名要体现存储的数据含义,如
age存储年龄,user_list存储用户列表 -
避免单字母变量(除了临时变量如
i、j用于循环)python# 推荐命名 user_age = 30 # 见名知意,下划线命名 product_price = 99.9 # 清晰表达"商品价格" MAX_RETRY = 3 # 全大写表示常量(最大重试次数) # 不推荐命名 a = 30 # 不知道存储的是什么 u_n = "李四" # 缩写不清晰 ProductPrice = 99.9 # 驼峰体(Python 中变量不推荐)
-
四、核心数据类型
Python 有 8 种核心数据类型,我们先掌握最常用的 4 种基本类型 + 4 种容器类型,覆盖 90% 基础开发场景。
4.1、基本类型(存储单一值)
字符串(str)、整数(int)、浮点数(float)、布尔值(bool)
-
字符串(str): 文本数据
-
定义:用单引号
' '、双引号" "或三引号""" """包裹的文本 -
特点:不可修改(修改需创建新字符串)
-
常用操作:拼接(
+)、重复(*)、获取长度(len())python# 定义字符串 s1 = '单引号字符串' s2 = "双引号字符串" s3 = """三引号字符串(支持多行) 第一行 第二行""" # 常用操作 print(s1 + s2) # 拼接:单引号字符串双引号字符串 print(s1 * 2) # 重复:单引号字符串单引号字符串 print(len(s2)) # 长度:6(统计字符个数) # 字符串索引(获取单个字符,从 0 开始) print(s1[0]) # 输出 '单'(第 1 个字符) print(s1[-1]) # 输出 '串'(最后 1 个字符) # 注意:字符串不可修改(以下代码报错) # s1[0] = '双' # TypeError: 'str' object does not support item assignment
-
-
整数(int): 整数数字
-
定义:没有小数部分的数字(正整数、负整数、0)
-
范围:无大小限制(可存储极大的整数)
-
常用操作:算术运算(加减乘除等)
python# 定义整数 num1 = 10 # 正整数 num2 = -5 # 负整数 num3 = 0 # 零 num4 = 999999999999999999 # 极大整数(Python 支持) # 常用操作 print(num1 + num2) # 加法:5 print(num1 * num3) # 乘法:0 print(num1 **2) # 幂运算:100(10的2次方) print(10 // 3) # 取整除:3(向下取整)
-
-
浮点数(float): 小数数字
-
定义:带有小数部分的数字(注意:浮点数可能有精度误差)
-
常用场景:身高、体重、价格等需要小数的场景
python# 定义浮点数 f1 = 1.23 f2 = 3.14159 f3 = -0.5 print(f1+f2) # 4.371589999999999 print(f1-f2) # -1.91159 print(f2*2) # 6.28318 # 注意:浮点数精度误差(避免直接比较浮点数是否相等) print(0.1+0.2) # 0.30000000000000004 # 正确比较方式:判断差值是否小于极小值 print(abs(0.1 + 0.2 - 0.3) < 1e-9) # 输出 True
-
-
布尔值(bool): 逻辑判断
-
定义:只有两个值:
True(真)和False(假) -
适用场景:条件判断(if 语句、循环条件等)
-
转换规则:0、空字符串、空容器 →
False;非 0、非空 →Truepython# 定义布尔值 b1 = True b2 = False # 逻辑运算 print(b1 and b2) # 与运算:False(都真才真) print(b1 or b2) # 或运算:True(一真就真) print(not b1) # 非运算:False(取反) # 类型转换(bool() 函数) print(bool(0)) # False(0 → 假) print(bool(10)) # True(非 0 → 真) print(bool("")) # False(空字符串 → 假) print(bool("abc")) # True(非空字符串 → 真) print(bool([])) # False(空列表 → 假)
-
4.2、容器类型(存储多个值)
列表(list),元组(tuple),字典(dict),集合(set)
-
列表(list):有序、可修改的集合
-
定义:用
[]包裹,元素用逗号分隔,元素类型可不同 -
特点:有序(元素位置固定)、可修改(增删改元素)
-
常用操作:索引、切片、添加、删除
python# 定义列表 list1 = [1, 2, 3, 4] # 整数列表 list2 = ["a", "b", "c"] # 字符串列表 list3 = [1, "hello", True, 3.14] # 混合类型列表 list4 = [] # 空列表 # 常用操作 # 1. 索引获取元素(从 0 开始) print(list1[0]) # 输出 1 print(list2[-1]) # 输出 'c'(最后一个元素) # 2. 切片获取子列表(左闭右开) print(list1[1:3]) # 输出 [2,3](第 2 到第 3 个元素) print(list1[:2]) # 输出 [1,2](从开头到第 2 个元素) print(list1[2:]) # 输出 [3,4](从第 3 个元素到结尾) # 3. 修改元素(列表可修改) list1[0] = 100 print(list1) # 输出 [100, 2, 3, 4] # 4. 添加元素 list1.append(5) # 末尾添加:[100,2,3,4,5] list1.insert(2, 200) # 索引 2 处添加:[100,2,200,3,4,5] # 5. 删除元素 list1.remove(3) # 删除值为 3 的元素:[100,2,200,4,5] del list1[1] # 下标从0开始,删除索引 1 的元素:[100,200,4,5] # 6. 其他操作 print(len(list1)) # 长度:4 print(sorted(list1)) # 排序:[4, 100, 200, 5](返回新列表)
-
-
元组(tuple):有序、不可修改的集合
-
定义:用
()包裹,元素用逗号分隔(单个元素需加逗号,如(1,)) -
特点:有序、不可修改(创建后不能增删改元素)、比列表更节省内存
-
适用场景:存储固定不变的数据(如坐标、配置项)
python# 定义元组 t1 = (1, 2, 3) # 普通元组 t2 = ("a", "b") # 字符串元组 t3 = (1, "hello", 3.14) # 混合类型 t4 = (5,) # 单个元素的元组(必须加逗号,否则是整数 5) t5 = () # 空元组 # 常用操作(与列表类似,但不能修改) print(t1[0]) # 索引获取:1 print(t1[1:3]) # 切片:(2,3) print(len(t2)) # 长度:2 # 注意:元组不可修改(以下代码报错) # t1[0] = 100 # TypeError: 'tuple' object does not support item assignment # t1.append(4) # AttributeError: 'tuple' object has no attribute 'append' # 元组的应用场景:函数返回多值 def get_user(): return "小明", 20 # 本质是返回元组 (("小明", 20)) name, age = get_user() # 解包元组:name="小明",age=20 print(name, age) # 输出 小明 20
-
-
字典(dict):键值对的无序集合
-
定义:用
{}包裹,元素是key: value键值对,键唯一且不可变 -
特点:无序(Python 3.7+ 实际有序)、通过键快速查找值(效率高)
-
键的要求:必须是不可变类型(字符串、整数、元组),不能是列表、字典
python# 定义字典 dict1 = {"name": "小红", "age": 22, "is_student": True} # 常用格式 dict2 = {} # 空字典 dict3 = dict(name="小李", age=25) # 用 dict() 函数创建 # 常用操作 # 1. 通过键获取值(两种方式) print(dict1["name"]) # 输出 '小红'(键不存在会报错) print(dict1.get("age")) # 输出 22(键不存在返回 None,推荐使用) print(dict1.get("gender", "女")) # 键不存在返回默认值 '女' # 2. 添加/修改键值对(键存在则修改,不存在则添加) dict1["gender"] = "女" # 添加:{"name":"小红", "age":22, "is_student":True, "gender":"女"} dict1["age"] = 23 # 修改:age 从 22 改为 23 # 3. 删除键值对 del dict1["is_student"] # 删除键为 is_student 的元素 dict1.pop("gender") # 弹出键为 gender 的元素(返回值) # 4. 遍历字典 for key in dict1: print(key, dict1[key]) # 遍历键,输出 name 小红 age 23 for key, value in dict1.items(): print(key, value) # 遍历键值对(推荐) # 5. 其他操作 print(len(dict1)) # 长度:2(键值对个数) print(dict1.keys()) # 所有键:dict_keys(['name', 'age']) print(dict1.values()) # 所有值:dict_values(['小红', 23])
-
-
集合(set):无序、无重复的集合
-
定义:用
{}包裹(空集合不能用{},需用set()),元素用逗号分隔 -
特点:无序、无重复元素、支持集合运算(交集、并集、差集)
-
适用场景:去重、数据对比(如两个列表的共同元素)
python# 定义集合 set1 = {1, 2, 3, 4} # 普通集合 set2 = {3, 4, 5, 6} # 普通集合 set3 = set([1, 2, 2, 3]) # 列表转集合(自动去重)→ {1,2,3} set4 = set() # 空集合(不能用 {},{} 是空字典) # 常用操作 # 1. 去重(集合自动去重) list_with_duplicate = [1, 2, 2, 3, 3, 3] set_without_duplicate = set(list_with_duplicate) print(set_without_duplicate) # 输出 {1,2,3} list_without_duplicate = list(set_without_duplicate) # 集合转列表 # 2. 集合运算 print(set1 & set2) # 交集:{3,4}(两个集合都有的元素) print(set1 | set2) # 并集:{1,2,3,4,5,6}(两个集合所有元素,去重) print(set1 - set2) # 差集:{1,2}(set1 有但 set2 没有的元素) print(set1 ^ set2) # 对称差集:{1,2,5,6}(两个集合互不相同的元素) # 3. 添加/删除元素 set1.add(5) # 添加元素:{1,2,3,4,5} set1.remove(5) # 删除元素(元素不存在报错) set1.discard(6) # 删除元素(元素不存在不报错,推荐) # 4. 注意:集合无序,不能通过索引获取元素(以下代码报错) # print(set1[0]) # TypeError: 'set' object is not subscriptable
-
4.3、类型转换(常用函数)
-
不同类型之间可通过内置函数转换,解决数据类型不匹配问题:
函数 功能 示例 str(x)转换为字符串 str(123) → "123"int(x)转换为整数(字符串需是纯数字) int("123") → 123、int(3.9) → 3float(x)转换为浮点数 float("3.14") → 3.14、float(10) → 10.0bool(x)转换为布尔值 bool(0) → False、bool("abc") → Truelist(x)转换为列表 list((1,2,3)) → [1,2,3]、list("abc") → ["a","b","c"]tuple(x)转换为元组 tuple([1,2,3]) → (1,2,3)set(x)转换为集合(去重) set([1,2,2,3]) → {1,2,3}dict(x)转换为字典(需是键值对序列) dict([("name","小明"), ("age",20)]) → {"name":"小明", "age":20} -
示例
python# 实战示例:用户输入转换 age_input = input("请输入年龄:") # input() 返回字符串 age = int(age_input) # 转换为整数 print(age + 1) # 可正常进行算术运算 # 列表转集合去重 scores = [90, 85, 90, 78, 85] unique_scores = list(set(scores)) print(unique_scores) # 输出 [90,85,78](顺序不确定)
五、运算符
Python 支持 4 类常用运算符:算术运算、比较运算、逻辑运算、赋值运算。
-
算术运算符(数值计算)
-
参数
运算符 描述 示例(a=10,b=3) +加法 a + b = 13-减法 a - b = 7*乘法(字符串可重复) a * b = 30;"a"*3 = "aaa"/除法(返回浮点数) a / b = 3.333...%取模(求余数) a % b = 1(10 除以 3 余 1)**幂运算(x 的 y 次方) a**b = 1000(10 的 3 次方)//取整除(向下取整) a // b = 3;-10//3 = -4 -
示例
pythona = 10 b = 3 print(a + b) # 13 print(a / b) # 3.3333333333333335 print(a % b) # 1(常用于判断奇偶:num%2 == 0 是偶数) print(a **2) # 100(平方) print(b **3) # 27(立方) print(10 // 3) # 3 print(-10 // 3) # -4(向下取整,不是 -3) # 字符串特殊用法:* 重复 print("Python" * 3) # 输出 "PythonPythonPython"
-
-
比较运算符(逻辑判断)
-
用于比较两个值的大小或相等性,返回布尔值(
True/False):运算符 描述 示例(a=10,b=3) ==等于(比较值是否相等) a == b → False;10 == 10 → True!=不等于 a != b → True>大于 a > b → True<小于 a < b → False>=大于等于 a >= 10 → True<=小于等于 b <= 2 → Falseis身份判断(比较内存地址) a is b → False;c=10,a is c → True(小整数缓存)is not身份不相等 a is not b → True -
示例
pythona = 10 b = 3 c = 10 d = "10" print(a == b) # False print(a == c) # True(值相等) print(a == d) # False(类型不同,值也不同) print(a is c) # True(a 和 c 指向同一内存地址,小整数缓存) print(a is d) # False(类型不同,内存地址不同) # 字符串比较(按字符编码顺序) print("apple" < "banana") # True('a' 的编码小于 'b') # 列表比较(按元素顺序逐一比较) print([1,2,3] < [1,2,4]) # True(前两个元素相等,第三个 3 < 4)
-
-
逻辑运算符(组合判断)
-
用于组合多个布尔值,返回布尔值,支持 "短路特性"(优化效率):
运算符 描述 短路特性(左值决定结果时,不计算右值) 示例(a=10,b=3) and逻辑与(都真才真) 左为 False 时,直接返回 False (a>b) and (a<20) → Trueor逻辑或(一真就真) 左为 True 时,直接返回 True (a<b) or (a>5) → Truenot逻辑非(取反) 无短路特性 not (a>b) → False -
示例
pythona = 10 b = 3 # and 示例:两个条件都满足才为真 print(a > 5 and b < 5) # True(10>5 且 3<5) print(a > 15 and b < 5) # False(10>15 为假,短路,不计算后面) # or 示例:满足一个条件就为真 print(a > 15 or b < 5) # True(3<5 为真,短路,不计算前面) print(a < 5 or b > 5) # False(两个条件都为假) # not 示例:取反 print(not (a > b)) # False(a>b 为真,取反为假) print(not "") # True(空字符串为假,取反为真) # 复杂组合(优先级:not > and > or) print(not a > 15 and b < 5 or a < 5) # True(先算 not,再算 and,最后算 or)
-
-
赋值运算符(简化赋值)
-
参数
运算符 等价写法 示例(a=10) =基础赋值 a = 10+=a = a + xa += 5 → 15-=a = a - xa -= 3 → 7*=a = a * xa *= 2 → 20/=a = a / xa /= 4 → 2.5%=a = a % xa %= 3 → 1**=a = a **xa**= 2 → 100//=a = a //xa//= 3 → 3 -
示例
pythona = 10 a += 5 # 等价于 a = a +5 → 15 print(a) # 15 a *= 2 # 等价于 a = a *2 → 30 print(a) # 30 a //= 3 # 等价于 a = a //3 → 10 print(a) # 10 # 字符串也支持 += s = "Hello" s += " Python" print(s) # 输出 "Hello Python"
-
六、综合实战:用户信息管理小脚本
-
示例
python""" 用户信息管理脚本 功能:添加用户、查询用户、显示所有用户 技术点:变量、列表、字典、条件判断、循环、输入输出、注释 """ # 定义存储用户信息的列表(容器:列表存储字典) users = [] # 循环显示菜单 while True: print("\n===== 用户信息管理系统 =====") print("1. 添加用户") print("2. 查询用户") print("3. 显示所有用户") print("5. 删除用户") print("6. 退出系统") # 获取用户选择(输入转换为整数) choice = input("请输入操作编号(1-4):") if not choice.isdigit(): # 判断输入是否为数字 print("输入错误!请输入 1-4 之间的数字。") continue choice = int(choice) # 1. 添加用户 if choice == 1: name = input("请输入用户名:") age_input = input("请输入年龄:") # 验证年龄是否为整数 if not age_input.isdigit(): print("年龄输入错误!请输入整数。") continue age = int(age_input) gender = input("请输入性别:") # 创建用户字典,添加到列表 user = {"name": name, "age": age, "gender": gender} users.append(user) print(f"用户 {name} 添加成功!") # 2. 查询用户 elif choice == 2: query_name = input("请输入要查询的用户名:") found = False # 标记是否找到用户 for user in users: if user["name"] == query_name: print(f"\n找到用户:") print(f"姓名:{user['name']}") print(f"年龄:{user['age']}") print(f"性别:{user['gender']}") found = True break if not found: print(f"未找到用户 {query_name}") # 3. 显示所有用户 elif choice == 3: if not users: # 判断列表是否为空 print("暂无用户信息!") continue print("\n所有用户信息:") for idx, user in enumerate(users, start=1): # 枚举,索引从 1 开始 print(f"\n用户 {idx}:") print(f"姓名:{user['name']}") print(f"年龄:{user['age']}") print(f"性别:{user['gender']}") # 4. 退出系统 elif choice == 4: print("感谢使用,再见!") break # 5. 删除用户 elif choice == 5: delete_name = input("请输入要删除的用户名:") found = False # 标记是否找到用户 for user in users: if user["name"] == delete_name: users.remove(user) print(f"用户 {delete_name} 删除成功!") found = True break if not found: print(f"未找到用户 {delete_name}") # 输入其他数字 else: print("输入错误!请输入 1-4 之间的数字。") -
练习
python# 1、使用while循环输入 1 2 3 4 5 6 8 9 10 # 2、求1-100的所有数的和 # 3、输出 1-100 内的所有奇数 # 4、输出 1-100 内的所有偶数 # 5、求1-2+3-4+5 ... 99的所有数的和 # 6、用户登陆(三次机会重试) # 7、九九乘法表 -
实战目标
- 运行脚本,体验所有功能(添加、查询、显示、退出)
- 分析代码中用到的基础语法(注释、缩进、变量、数据类型、运算符、条件 / 循环)
- 尝试修改脚本:添加 "删除用户" 功能(提示:遍历列表找到用户,用
remove()删除)
七、常见易错点总结
- 缩进错误:同一层级代码缩进不一致,或混合空格和 Tab
- 字符串不可修改:尝试通过索引修改字符串会报错
- 字典键错误:通过
dict["key"]获取不存在的键会报错,推荐用dict.get("key") - 浮点数精度:避免直接比较浮点数是否相等,用差值判断
- 集合无序:不能通过索引获取集合元素,遍历顺序不确定
- 变量命名:关键字、数字开头、特殊字符会导致语法错误
- 输入类型:
input()返回字符串,需手动转换为整数 / 浮点数才能进行数值运算
按照本手册逐节学习,结合实战代码练习,就能扎实掌握 Python 基础语法,为后续进阶(函数、模块、面向对象)打下坚实基础!