本文围绕 Python 基础编程展开,深入讲解程序控制语句与组合数据类型。程序控制语句涵盖条件判断(if 家族 )、循环(for/while 及嵌套、break/continue )、异常处理(try - except ),借模拟超市收银系统等案例实操。组合数据类型剖析列表(创建、索引、方法 )、元组(不可变特性 )、字典(键值对操作 ),结合学生信息管理等场景,串联语法与实际应用,构建 Python 基础编程核心能力体系。
宏观关键词:程序控制语句;组合数据类型;语法;实操应用
一.模块一:程序控制语句 —— 掌握代码执行逻辑
1.if条件控制体系
问题:1.当我们需要根据两个输入数字的大小关系,选择不同的运算规则计算结果。
——解决方案就是
这样的代码,简化版本
2.循环语句实战(for&while深度对比)
2.1.for
- 核心内容:
for
?,遍历(字符串、列表、range()
?)、while
?条件循环、嵌套循环break/continue
?控制流程
for 变量 in 循环内容:
代码块
01 for a in "Python":
02 print(a)
03 print("程序要结束啦! ")
2.1.1. 基础遍历:for 变量 in 循环内容
需求:打印 3 个水果名,说 “我喜欢吃:XXX”
代码:
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits: # 变量fruit依次取fruits里的内容
print("我喜欢吃:", fruit)
2.2.2. 生成数字序列:range 函数
需求:打印 1 - 5 的序号,说 “第 X 次打卡”
代码:
for i in range(1, 6): # range(1,6)生成1、2、3、4、5(左闭右开)
print("第", i, "次打卡")
2.2.3. 复合嵌套:处理多层数据
需求:有 2 个同学,每人 2 门科目成绩,打印 “XXX 的科目 X 得分:YY”
代码:
scores = [["小明", 90, 85], ["小红", 88, 92]]
for student in scores: # 外层循环取每个同学的信息
name = student[0]
for i in range(1, 3): # 内层循环取科目1、科目2成绩
print(name, "的科目", i, "得分:", student[i])
总结一下:用?for 变量 in 循环内容
?能遍历各种数据(列表、字符串…),range
?专门造数字序列,遇到复杂结构就用复合嵌套,这 3 招一结合
2.2.4while
while 条件判断表达式:
代码块
while 循环与 for 循环有一定的区别,主要表现在循环次数由谁来决定。for 循环的次数由循环内容决定
需求:模拟 “猜数字游戏”,程序随机生成 1 - 100 的整数(你作为玩家),通过不断输入猜测值,程序用?while
?循环判断猜测是否正确,直到猜中为止。
target = 50 # 假设程序生成的目标数字
guess = None # 存储玩家猜测的变量
# while 循环:只要没猜中(guess != target),就一直循环让玩家猜
while guess != target:
guess = int(input("猜 1 - 100 的数字:"))
if guess > target:
print("猜大了,再试试!")
elif guess < target:
print("猜小了,再试试!")
print("恭喜猜中!")
2.2.5break ,continue
3.异常处理机制(try-except 容错实践 )
- 核心内容:单异常捕获、多异常捕获(
except (TypeError, ValueError)
?)、异常处理与循环 / 条件结合
需求:
- 生成 3 轮随机数(1 - 10),每轮有 2 次猜测机会。
- 使用?
for
?循环控制轮数(已知 3 轮),while
?循环控制每轮的猜测次数(动态判断是否猜中)。
import random
# for 循环:控制已知的 3 轮游戏
for round in range(1, 4):
print(f"\n第 {round} 轮:")
target = random.randint(1, 10) # 每轮随机数不同
guess_count = 0 # 记录当前轮的猜测次数
# while 循环:控制每轮的猜测次数(动态条件)
while guess_count < 2:
guess = int(input("猜 1-10 的数字:"))
guess_count += 1
if guess == target:
print(f"猜对了!答案是 {target}")
break # 猜中则提前退出当前轮的 while 循环
else:
print(f"猜错了,还剩 {2 - guess_count} 次机会")
# 每轮结束后,无论是否猜中都提示下一轮
if guess_count == 2 and guess != target:
print(f"本轮结束,答案是 {target}")
模块 2:组合数据类型 —— 构建数据存储与操作能力
子主题 1:列表类型 —— 动态数据容器
- 核心内容:列表创建、索引 / 切片取值、常用方法(
append()
?pop()
?sort()
?reverse()
?等 )、嵌套列表操作
概念:列表(List)是 Python 中最常用的组合数据类型之一,用方括号[]
表示,内部元素之间用逗号分隔,元素可以是不同的数据类型(如整数、字符串、列表等),且列表是可变的(可修改元素)。
示例:my_list = [10, "hello", True, [2, 3]]
1. append () 方法
概念:append()
?用于在列表的末尾添加一个元素,语法为?列表名.append(元素)
。
问题:现有列表?fruits = ["apple", "banana"]
,如何在列表末尾添加元素 "orange"?
解答:使用?append()
?方法:
?
fruits = ["apple", "banana"]
fruits.append("orange") # 在末尾添加"orange"
print(fruits) # 输出:["apple", "banana", "orange"]
2. clear () 方法
概念:clear()
?用于清空列表中的所有元素,语法为?列表名.clear()
,清空后列表变为空列表。
问题:有列表?numbers = [1, 2, 3, 4]
,如何删除列表中所有元素?
解答:使用?clear()
?方法:
numbers = [1, 2, 3, 4]
numbers.clear() # 清空列表
print(numbers) # 输出:[]
3. copy () 方法
概念:copy()
?用于复制一个列表(浅复制),生成一个新列表,语法为?新列表名 = 原列表名.copy()
,修改新列表不会影响原列表。
问题:有列表?colors = ["red", "green"]
,如何创建该列表的副本,并在副本中添加 "blue" 而不改变原列表?
解答:使用?copy()
?方法:
colors = ["red", "green"]
colors_copy = colors.copy() # 复制原列表
colors_copy.append("blue") # 只修改副本
print(colors) # 原列表不变:["red", "green"]
print(colors_copy) # 副本变化:["red", "green", "blue"]
4. count () 方法
概念:count()
?用于统计列表中某个元素出现的次数,语法为?列表名.count(元素)
,返回次数(整数)。
问题:列表?nums = [2, 5, 2, 8, 2]
?中,元素 2 出现了几次?
解答:使用?count()
?方法:
?
nums = [2, 5, 2, 8, 2]
print(nums.count(2)) # 统计2出现的次数,输出:3
5. index () 方法
概念:index()
?用于查找某个元素在列表中首次出现的索引(索引从 0 开始),语法为?列表名.index(元素)
,若元素不存在则报错。
问题:列表?animals = ["cat", "dog", "cat", "bird"]
?中,"cat" 首次出现的位置是多少?
解答:使用?index()
?方法:
animals = ["cat", "dog", "cat", "bird"]
print(animals.index("cat")) # 首次出现的索引,输出:0
6. insert () 方法
概念:insert()
?用于在列表的指定索引位置插入一个元素,语法为?列表名.insert(索引, 元素)
,原索引及之后的元素会向后移动。
问题:现有列表?letters = ["a", "c", "d"]
,如何在索引 1 的位置插入元素 "b"?
解答:使用?insert()
?方法:
letters = ["a", "c", "d"]
letters.insert(1, "b") # 在索引1处插入"b"
print(letters) # 输出:["a", "b", "c", "d"]
7. pop () 方法
概念:pop()
?用于删除列表中指定索引的元素(默认删除最后一个元素),并返回被删除的元素,语法为?列表名.pop(索引)
(索引可选)。
问题:列表?cities = ["北京", "上海", "广州", "深圳"]
,如何删除索引 1 的元素,并查看删除的元素?
解答:使用?pop()
?方法:
cities = ["北京", "上海", "广州", "深圳"]
deleted = cities.pop(1) # 删除索引1的元素
print(deleted) # 输出被删除的元素:"上海"
print(cities) # 剩余列表:["北京", "广州", "深圳"]
8. remove () 方法
概念:remove()
?用于删除列表中首次出现的指定元素,语法为?列表名.remove(元素)
,若元素不存在则报错。
问题:列表?names = ["Alice", "Bob", "Alice", "Charlie"]
?中,如何删除首次出现的 "Alice"?
解答:使用?remove()
?方法:
names = ["Alice", "Bob", "Alice", "Charlie"]
names.remove("Alice") # 删除首次出现的"Alice"
print(names) # 输出:["Bob", "Alice", "Charlie"]
9. reverse () 方法
概念:reverse()
?用于将列表中的元素反转顺序,语法为?列表名.reverse()
,直接修改原列表。
问题:如何将列表?order = [1, 2, 3, 4, 5]
?反转成?[5, 4, 3, 2, 1]
?
解答:使用?reverse()
?方法:
10. sort () 方法
概念:sort()
?用于对列表中的元素进行排序(默认升序),语法为?列表名.sort(reverse=False)
(reverse=True
?表示降序),直接修改原列表(元素需可比较,如数字、字符串)。
问题:如何将列表?scores = [85, 92, 78, 90]
?按从高到低的顺序排序?
解答:使用?sort()
?方法并设置?reverse=True
:
scores = [85, 92, 78, 90]
scores.sort(reverse=True) # 降序排序
print(scores) # 输出:[92, 90, 85, 78]
子主题 2:元组类型 —— 不可变数据容器
- 核心内容:元组创建、不可变特性(对比列表 )、基础操作(索引取值、元组解包 )
元组(tuple)属于不可变序列,它和列表(list)的不同之处在于,元组创建之后就不能对其元素进行修改、添加或者删除操作。下面我会结合示例代码来详细介绍元组的基本概念、用法以及它和列表的差异。
empty_tuple = () # 空元组
single_tuple = (1,) # 单个元素的元组,必须加逗号
normal_tuple = (1, "apple", True) # 多个元素的元组
implicit_tuple = 1, 2, 3 # 省略括号的元组
# 访问元组元素
print(normal_tuple[0]) # 输出: 1
print(normal_tuple[1:]) # 输出: ('apple', True)
# 元组不可修改,以下代码会报错
# normal_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
子主题 3:字典类型 —— 键值对映射容器
- 核心内容:字典创建、键值对操作(增删改查 )、常用方法(
keys()
?values()
?items()
?遍历 )、嵌套字典
1.?clear()
?方法
问题:如何清空字典中的所有元素?
方法:使用?clear()
?方法。
代码示例:
student = {"name": "Alice", "age": 20, "grade": "A"}
student.clear() # 清空字典
print(student) # 输出: {}
2.?get()
?方法
问题:如何安全地获取字典中某个键对应的值,避免键不存在时的错误?
方法:使用?get(key, default)
?方法。
代码示例:
student = {"name": "Bob", "age": 22}
age = student.get("age") # 获取存在的键
print(age) # 输出: 22
score = student.get("score", 0) # 获取不存在的键,默认值为0
print(score) # 输出: 0
3.?keys()
?方法
问题:如何获取字典中所有的键?
方法:使用?keys()
?方法。
代码示例:
student = {"name": "Charlie", "age": 21, "city": "New York"}
all_keys = student.keys()
print(list(all_keys)) # 输出: ['name', 'age', 'city']
解释:keys()
?返回一个可迭代的视图对象,包含字典的所有键。
4.?values()
?方法
问题:如何获取字典中所有的值?
方法:使用?values()
?方法。
代码示例:
student = {"name": "David", "age": 23, "grade": "B"}
all_values = student.values()
print(list(all_values)) # 输出: ['David', 23, 'B']
解释:values()
?返回一个可迭代的视图对象,包含字典的所有值。
5.?items()
?方法
问题:如何同时获取字典中的键和值?
方法:使用?items()
?方法。
代码示例:
student = {"name": "Eve", "age": 20}
for key, value in student.items():
print(f"{key}: {value}")
# 输出:
# name: Eve
# age: 20
解释:items()
?返回一个包含键值对元组的可迭代对象,便于遍历字典。
6.?pop()
?方法
问题:如何删除字典中指定的键并返回其值?
方法:使用?pop(key, default)
?方法。
代码示例:
student = {"name": "Frank", "age": 22, "city": "London"}
age = student.pop("age") # 删除并返回"age"对应的值
print(age) # 输出: 22
print(student) # 输出: {'name': 'Frank', 'city': 'London'}
grade = student.pop("grade", "N/A") # 删除不存在的键,返回默认值
print(grade) # 输出: 'N/A'
7. 字典的遍历(for
?循环)
问题:如何遍历字典中的键、值或键值对?
方法:使用?for
?循环结合?keys()
、values()
?或?items()
。
代码示例:
student = {"name": "Grace", "age": 21, "city": "Paris"}
# 遍历键
for key in student.keys():
print(key) # 输出: name, age, city
# 遍历值(简化写法)
for value in student.values():
print(value) # 输出: Grace, 21, Paris
# 遍历键值对
for key, value in student.items():
print(f"{key} -> {value}") # 输出: name -> Grace, age -> 21, city -> Paris
8. 数据的维度问题(嵌套字典)
问题:如何处理多维数据结构(如嵌套字典)?
方法:使用多层字典存储复杂数据,并通过多级键访问。
代码示例:
# 嵌套字典示例:存储多个学生的信息
students = {
"student1": {"name": "Hank", "age": 22, "grades": {"math": 90, "english": 85}},
"student2": {"name": "Ivy", "age": 20, "grades": {"math": 88, "english": 92}}
}
# 访问嵌套数据
print(students["student1"]["name"]) # 输出: Hank
print(students["student2"]["grades"]["english"]) # 输出: 92
# 修改嵌套数据
students["student1"]["grades"]["math"] = 95
print(students["student1"]["grades"]) # 输出: {'math': 95, 'english': 85}
?解释:嵌套字典允许存储多维数据,通过逐级指定键来访问或修改深层数据。
总结
程序控制语句:掌控代码执行逻辑
- if 条件控制体系:能根据不同条件选择相应的运算规则,可通过简洁的代码实现对两个输入数字大小关系的判断及对应运算。
- 循环语句(for & while)
- for 循环:核心是遍历,可遍历字符串、列表等,借助
range()
函数生成数字序列,还能通过嵌套循环处理多层数据,如遍历学生成绩信息。 - while 循环:基于条件进行循环,循环次数由条件动态决定,如猜数字游戏中,只要未猜中就持续让玩家输入猜测值。
- break 与 continue:用于控制循环流程,
break
可提前退出当前循环,continue
则跳过本次循环剩余部分进入下一次循环。
- for 循环:核心是遍历,可遍历字符串、列表等,借助
- 异常处理机制(try-except):包括单异常捕获、多异常捕获,能与循环、条件结合使用,增强程序的容错性,例如在多轮猜数字游戏中处理可能出现的输入异常等情况。
组合数据类型:构建数据存储与操作能力
- 列表(动态数据容器):用方括号
[]
表示,元素可修改且类型多样。具备创建、索引 / 切片取值等操作,还有append()
、pop()
、sort()
等常用方法,可进行嵌套操作,能灵活存储和处理动态变化的数据。 - 元组(不可变数据容器):用圆括号
()
表示(可省略),创建后元素不可修改,支持索引取值、切片等操作,适用于存储不需要改变的数据。 - 字典(键值对映射容器):用大括号
{}
表示,由键值对组成。支持键值对的增删改查,拥有clear()
、get()
、keys()
等常用方法,可通过for
循环遍历键、值或键值对,还能进行嵌套以处理多维数据,便于存储和管理具有映射关系的数据。