案例一:简单的计算器程序
功能描述
该程序允许用户输入两个数字及指定运算操作(加、+、乘、除),根据用户选择执行计算并输出结果,同时处理 "除数为 0" 和 "非法操作符" 两种异常场景。
代码实现
python
python
# 获取用户输入的两个数字(转换为浮点型,支持小数计算)
num1 = float(input("请输入第一个数字: "))
num2 = float(input("请输入第二个数字: "))
# 获取用户选择的运算操作
operation = input("请选择运算操作(+、-、*、/): ")
# 根据操作符执行计算并输出结果
if operation == "+":
result = num1 + num2
print(f"{num1} {operation} {num2} = {result}")
elif operation == "-":
result = num1 - num2
print(f"{num1} {operation} {num2} = {result}")
elif operation == "*":
result = num1 * num2
print(f"{num1} {operation} {num2} = {result}")
elif operation == "/":
# 处理除数为0的异常情况
if num2 == 0:
print("除数不能为0,请重新输入。")
else:
result = num1 / num2
print(f"{num1} {operation} {num2} = {result}")
else:
# 处理非法操作符输入
print("输入的运算操作不合法,请重新输入。")
案例分析
该案例核心运用 Python 输入输出(input()
/print()
) 和 条件判断(if-elif-else
) 逻辑:
- 通过
float()
将用户输入的字符串转为数值,支持小数计算; - 用多分支
if-elif
覆盖四种合法运算,用else
捕获非法操作符; - 单独判断 "除数为 0" 场景,避免程序报错,体现基础的异常场景处理思维,适合初学者理解 "用户交互 - 逻辑判断 - 结果输出" 的完整流程。
案例二:文件读取与写入
功能描述
从指定文本文件(input.txt
)中读取内容,将所有字母转为大写后,写入新文件(output.txt
),全程用with
语句自动管理文件资源,避免 "忘记关闭文件" 导致的资源泄露。
代码实现
python
python
# 1. 读取原文件内容(with语句自动关闭文件,无需手动调用close())
with open('input.txt', 'r', encoding='utf-8') as file_in: # 指定encoding,避免中文乱码
content = file_in.read() # 读取文件全部内容
# 2. 处理内容:将所有字母转为大写
processed_content = content.upper()
# 3. 写入新文件(文件不存在时自动创建,存在时覆盖内容)
with open('output.txt', 'w', encoding='utf-8') as file_out:
file_out.write(processed_content)
# 提示操作结果
print("文件处理并写入成功!")
案例分析
该案例聚焦 Python 文件操作 和 字符串处理 核心知识点:
with open(...)
是文件操作的推荐写法,自动处理 "打开 - 使用 - 关闭" 流程,规避资源泄露风险;encoding='utf-8'
解决中文内容读写时的乱码问题,适配多语言场景;- 字符串方法
upper()
实现文本大写转换,体现 "读取 - 处理 - 写入" 的经典数据流转逻辑,在日志处理、文本预处理等实际场景中高频使用。
案例三:猜数字游戏
功能描述
程序在 1-100 范围内随机生成一个目标数字,玩家循环输入猜测值,程序提示 "猜大了" 或 "猜小了",直到猜对为止,同时统计猜测次数,并处理 "输入非整数" 的异常。
代码实现
python
python
import random # 导入随机数模块
# 生成1-100之间的随机整数(目标数字)
number_to_guess = random.randint(1, 100)
guess_count = 0 # 初始化猜测次数计数器
# 循环接收用户猜测(直到猜对才退出)
while True:
try:
# 获取用户输入并转为整数(捕获非整数输入异常)
user_guess = int(input("请猜一个1到100之间的数字: "))
guess_count += 1 # 每猜一次,计数器+1
# 判断猜测结果并给出提示
if user_guess == number_to_guess:
print(f"恭喜你,猜对了!你一共猜了{guess_count}次。")
break # 猜对后退出循环
elif user_guess < number_to_guess:
print("猜的数字小了,再试试吧。")
else:
print("猜的数字大了,再试试吧。")
except ValueError:
# 处理用户输入非整数的情况
print("请输入整数哦,重新猜一下吧。")
案例分析
该案例是 循环(while
)、条件判断、异常处理(try-except
) 的综合应用:
random.randint(1,100)
生成随机目标值,体现模块的调用逻辑;while True
实现 "无限循环直到猜对" 的交互模式,break
控制循环退出;try-except ValueError
捕获非整数输入,避免程序因类型错误崩溃,提升用户体验;- 猜测次数统计功能增加游戏趣味性,同时让初学者理解 "变量累加" 的应用。
案例四:学生成绩管理系统(简单版)
功能描述
基于字典存储学生 "姓名 - 成绩" 映射关系,实现三大核心功能:添加学生成绩、查询指定学生成绩、计算班级平均成绩,通过命令行菜单提供交互,支持循环操作直到用户选择退出。
代码实现
python
python
# 初始化空字典,用于存储学生姓名(键)和成绩(值)
student_scores = {}
# 循环展示菜单,直到用户选择退出
while True:
# 打印功能菜单
print("\n===== 学生成绩管理系统 =====")
print("1. 添加学生成绩")
print("2. 查询学生成绩")
print("3. 计算班级平均成绩")
print("4. 退出")
# 获取用户选择
choice = input("请输入你的选择(1-4): ")
# 根据选择执行对应功能
if choice == "1":
name = input("请输入学生姓名: ")
score = float(input("请输入学生成绩: "))
student_scores[name] = score # 向字典添加键值对
print("学生成绩添加成功!")
elif choice == "2":
name = input("请输入要查询成绩的学生姓名: ")
# 判断姓名是否在字典中
if name in student_scores:
print(f"{name}的成绩是: {student_scores[name]}")
else:
print(f"不存在名为{name}的学生成绩记录。")
elif choice == "3":
# 判断字典是否为空(无成绩时无法计算平均)
if len(student_scores) == 0:
print("还没有添加学生成绩记录哦,请先添加。")
else:
total_score = sum(student_scores.values()) # 求和字典所有值
average_score = total_score / len(student_scores) # 计算平均值
print(f"班级平均成绩是: {average_score:.2f}") # 保留2位小数,更规范
elif choice == "4":
print("感谢使用,程序已退出。")
break # 退出循环,结束程序
else:
print("输入的选择不合法,请重新输入(1-4)。")
案例分析
该案例以 字典数据结构 为核心,结合循环与条件判断构建简易系统:
- 字典
student_scores
的 "键唯一" 特性适配 "姓名 - 成绩" 一一对应关系,keys()
/values()
方法实现数据查询与统计; - 菜单式交互通过
while True
循环实现 "反复操作",break
控制退出,符合用户使用习惯; - 边界场景处理(空字典计算平均、查询不存在的学生)让程序更健壮,体现 "数据管理系统" 的基础设计思路,适合理解 "数据存储 - 功能交互 - 边界处理" 的逻辑。
案例五:网络爬虫获取网页标题(合规版)
功能描述
使用requests
库发送 HTTP 请求获取指定网页内容,通过BeautifulSoup
解析 HTML 结构,提取网页标题;同时判断请求状态码(如 200 表示成功),确保爬取流程合规(遵守网站robots.txt
协议)。
代码实现
python
python
# 需提前安装依赖:pip install requests beautifulsoup4
import requests
from bs4 import BeautifulSoup
# 目标网页URL(示例为合规测试页,实际爬取需遵守网站规则)
url = "https://www.example.com"
# 发送GET请求获取网页内容(添加请求头,模拟浏览器访问,避免被拦截)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
# 判断请求是否成功(状态码200表示请求正常)
if response.status_code == 200:
# 解析HTML内容(指定解析器为html.parser,无需额外安装)
soup = BeautifulSoup(response.text, "html.parser")
# 提取网页标题(soup.title获取<title>标签,.string获取标签内文本)
if soup.title:
title = soup.title.string.strip() # 去除标题前后空格
print(f"该网页的标题是: {title}")
else:
print("未找到网页标题。")
else:
print(f"请求网页失败,状态码: {response.status_code}(常见错误:404=页面不存在,403=权限拒绝)")
案例分析
该案例是 Python 网络爬虫基础 的典型应用,核心知识点包括:
requests
库:发送 HTTP 请求、设置请求头(规避反爬机制)、判断状态码;BeautifulSoup
库:解析 HTML 结构,通过标签名(如title
)提取目标数据,strip()
处理文本空格;- 合规提示:强调 "遵守网站
robots.txt
" 和 "模拟浏览器请求",避免非法爬取; - 适合理解 "网络请求 - 数据解析 - 结果处理" 的爬虫流程,为复杂爬虫(如多页爬取、数据存储)打下基础。
案例六:图片处理(基于 Pillow 库)
功能描述
使用 Pillow 库打开一张图片,获取其原始尺寸后缩小为原来的 1/2,最后将处理后的图片保存为新文件,支持常见图片格式(JPG、PNG 等)。
代码实现
python
python
# 需提前安装依赖:pip install pillow
from PIL import Image
# 1. 打开图片(需确保图片路径正确,支持相对路径/绝对路径)
try:
# 示例:打开当前目录下的"original.jpg",若为PNG则改为"original.png"
image = Image.open("original.jpg")
print(f"原始图片尺寸: {image.size}(宽x高)") # 输出格式:(宽度, 高度)
except FileNotFoundError:
print("图片文件未找到,请检查路径是否正确。")
exit() # 终止程序
# 2. 计算缩放后的尺寸(整除2,确保尺寸为整数)
width, height = image.size # 解包原始尺寸(宽、高)
new_width = width // 2
new_height = height // 2
# 3. 执行缩放操作(resize()方法接收元组格式的新尺寸)
resized_image = image.resize((new_width, new_height))
# 4. 保存处理后的图片(指定新文件名,格式与原文件一致)
resized_image.save("resized.jpg")
print(f"缩放后图片尺寸: {resized_image.size}(宽x高)")
print("图片处理并保存成功!新文件名为:resized.jpg")
案例分析
该案例围绕 Pillow 库(Python 图像处理主流库) 的核心操作:
Image.open()
:打开图片文件,支持多种格式,配合try-except
处理 "文件不存在" 异常;image.size
:获取图片宽高(元组格式),resize()
实现尺寸调整,满足 "图片压缩" 的常见需求;- 实际应用场景:网页图片优化、相册批量处理、AI 图像预处理等,帮助初学者理解 "图像数据操作" 的基本逻辑,同时培养 "异常处理" 的编程习惯。
案例七:列表排序与筛选
功能描述
创建一个整数列表,先使用内置函数对其进行升序排序,再通过列表推导式筛选出 "大于指定阈值(如 5)" 的元素,最终输出排序后列表和筛选后列表。
代码实现
python
python
# 1. 创建示例整数列表(包含无序元素)
number_list = [5, 3, 8, 1, 9, 2]
print(f"原始列表: {number_list}")
# 2. 升序排序(使用sorted()函数,返回新列表,不修改原列表)
sorted_list = sorted(number_list)
print(f"升序排序后的列表: {sorted_list}")
# 3. 筛选元素:提取大于阈值(5)的元素(使用列表推导式,简洁高效)
threshold = 5
filtered_list = [num for num in sorted_list if num > threshold]
print(f"筛选后(大于{threshold})的列表: {filtered_list}")
# 扩展:若需降序排序,可给sorted()加reverse=True参数
desc_sorted_list = sorted(number_list, reverse=True)
print(f"降序排序后的列表: {desc_sorted_list}")
案例分析
该案例聚焦 Python 列表操作 的两个高频场景:排序与筛选:
sorted()
函数:内置排序工具,支持升序 / 降序(reverse=True
),返回新列表,不破坏原数据(区别于list.sort()
,后者修改原列表);- 列表推导式:
[表达式 for 元素 in 可迭代对象 if 条件]
,一行代码实现 "遍历 - 判断 - 筛选",比for
循环 +append()
更简洁,效率更高; - 适合理解 "数据预处理" 的基础流程(排序→筛选),在数据分析、算法题解中广泛应用,同时体会 Python "简洁语法" 的优势。
案例八:简单的图形界面程序(基于 Tkinter)
功能描述
使用 Python 内置的 Tkinter 库创建一个窗口,包含 "文本框" 和 "按钮" 两个组件:点击按钮后,在文本框中插入预设文字("欢迎来到 Python 的图形界面世界!"),实现基础 GUI 交互。
代码实现
python
ini
# 导入Tkinter库(Python内置,无需安装),约定简写为tk
import tkinter as tk
from tkinter import ttk # 可选:导入美化组件库,让界面更现代
# 1. 创建主窗口(程序的顶层窗口)
root = tk.Tk()
root.title("简单GUI示例") # 设置窗口标题
root.geometry("400x200") # 设置窗口初始尺寸(宽x高,单位:像素)
# 2. 定义按钮点击事件的函数(点击按钮时执行)
def show_message():
# 向文本框插入内容:tk.END表示插入到文本末尾,避免覆盖原有内容
text_box.insert(tk.END, "欢迎来到Python的图形界面世界!\n")
# 禁用按钮(可选,避免重复插入)
btn.config(state=tk.DISABLED)
# 3. 创建文本框组件(height=5:显示5行文本,width=30:每行显示30个字符)
text_box = tk.Text(root, height=5, width=30, font=("微软雅黑", 10))
# 布局文本框(pack():简单布局,padx/pady:内边距,避免紧贴窗口)
text_box.pack(padx=20, pady=10)
# 4. 创建按钮组件(text:按钮文字,command:绑定点击事件函数)
btn = ttk.Button(root, text="点击显示文字", command=show_message)
# 布局按钮(pady:与文本框保持垂直间距)
btn.pack(pady=5)
# 5. 启动主窗口的事件循环(让窗口保持显示,等待用户操作)
root.mainloop()
案例分析
该案例是 Tkinter(Python 内置 GUI 库) 的入门应用,核心知识点:
- 组件创建:
tk.Tk()
创建主窗口,tk.Text()
创建文本框,ttk.Button()
创建按钮(ttk
组件比原生更美观); - 事件绑定:
command=show_message
将按钮点击与函数关联,实现 "交互响应"; - 布局管理:
pack()
是 Tkinter 的基础布局方式,通过padx/pady
控制组件间距,避免界面杂乱; - 适合理解 "桌面应用开发" 的基本逻辑:窗口→组件→事件绑定→事件循环,为复杂 GUI(如表单、工具软件)打下基础。
案例九:数据可视化(基于 Matplotlib)
功能描述
模拟 "一个月内每天的销售额" 数据,使用 Matplotlib 库绘制折线图,直观展示销售额随天数的变化趋势,同时添加图表标题和坐标轴标签,提升可读性。
代码实现
python
ini
# 需提前安装依赖:pip install matplotlib
import matplotlib.pyplot as plt
# 解决中文显示乱码问题(关键配置,否则中文会显示为方框)
plt.rcParams["font.sans-serif"] = ["SimHei", "WenQuanYi Zen Hei"] # 支持的中文字体
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示异常问题
# 1. 准备数据:模拟29天的销售额(单位:元)
sales_data = [100, 120, 90, 110, 130, 140, 120, 150, 160, 140, 130,
170, 180, 190, 200, 180, 170, 160, 150, 140, 130, 120,
110, 100, 90, 80, 70, 60, 50]
# 横坐标:天数(1到len(sales_data))
days = list(range(1, len(sales_data) + 1))
# 2. 创建折线图(days为x轴,sales_data为y轴,linewidth:线宽,color:线色)
plt.plot(days, sales_data, linewidth=2, color="#1f77b4", marker="o", markersize=4)
# 3. 添加图表标题和坐标轴标签(fontsize:字体大小)
plt.title("一个月内每天的销售额变化趋势", fontsize=14, pad=20) # pad:标题与图表的间距
plt.xlabel("天数", fontsize=12)
plt.ylabel("销售额(元)", fontsize=12)
# 4. 优化坐标轴(x轴范围:1到天数最大值,y轴范围:0到销售额最大值+20,避免数据紧贴边界)
plt.xlim(1, len(days))
plt.ylim(0, max(sales_data) + 20)
# 5. 显示网格线(可选,便于读取数据)
plt.grid(True, alpha=0.3) # alpha:透明度,避免网格线遮挡折线
# 6. 显示图表
plt.show()
案例分析
该案例是 Matplotlib(Python 数据可视化主流库) 的基础应用:
- 中文配置:
plt.rcParams
解决中文乱码,是 Matplotlib 中文显示的必备步骤; - 折线图核心:
plt.plot()
定义 x/y 轴数据,通过linewidth
/color
/marker
优化图表样式,提升可读性; - 图表优化:
title()
/xlabel()
/ylabel()
添加说明,grid()
显示网格线,xlim()
/ylim()
调整坐标轴范围; - 实际应用场景:业务数据报表、实验数据展示、学术图表绘制等,帮助初学者理解 "数据→可视化" 的转化逻辑,培养 "图表美观性" 的设计思维。
案例十:多线程编程示例
功能描述
创建两个线程,分别并行执行 "打印 1-99 的奇数" 和 "打印 0-98 的偶数" 任务,模拟多线程并发执行效果,最后等待所有线程完成后输出 "执行完毕"。
代码实现
python
python
import threading
import time # 可选:添加延迟,更直观展示并发效果
# 定义线程1的任务:打印1-99的奇数
def print_odd_numbers():
print("线程1(打印奇数)开始执行:")
for i in range(1, 100, 2):
print(f"奇数: {i}")
time.sleep(0.01) # 延迟0.01秒,避免输出过快导致混乱
print("线程1(打印奇数)执行完毕!\n")
# 定义线程2的任务:打印0-98的偶数
def print_even_numbers():
print("线程2(打印偶数)开始执行:")
for i in range(0, 100, 2):
print(f"偶数: {i}")
time.sleep(0.01) # 与线程1保持相同延迟,确保并发效果明显
print("线程2(打印偶数)执行完毕!\n")
# 1. 创建线程对象(target:绑定线程要执行的函数)
thread1 = threading.Thread(target=print_odd_numbers, name="OddThread") # name:线程名,便于调试
thread2 = threading.Thread(target=print_even_numbers, name="EvenThread")
# 2. 启动线程(调用start()方法,线程开始执行target函数)
print("主线程:启动两个子线程...\n")
thread1.start()
thread2.start()
# 3. 等待子线程执行完毕(join():主线程阻塞,直到子线程结束)
thread1.join()
thread2.join()
# 4. 所有子线程完成后,主线程继续执行
print("主线程:所有子线程执行完毕!")
案例分析
该案例围绕 Python 多线程(threading
模块) 的核心概念:
- 线程创建与启动:
threading.Thread(target=函数)
创建线程,start()
启动线程(注意:不能直接调用函数,否则为单线程执行); - 线程同步:
join()
方法确保主线程等待子线程完成后再结束,避免 "主线程提前退出导致子线程被强制终止"; - 并发效果:
time.sleep(0.01)
减缓输出速度,让 "奇数" 和 "偶数" 交替打印,直观体现多线程 "并行执行" 的特点; - 注意事项:Python 多线程受 GIL(全局解释器锁)影响,CPU 密集型任务(如大量计算)建议用多进程,I/O 密集型任务(如网络请求、文件读写)用多线程更高效;
- 适合理解 "并发编程" 的基础逻辑,为后续复杂并发场景(如多任务处理、异步编程)打下基础。