十个 Python 案例分享

案例一:简单的计算器程序

功能描述

该程序允许用户输入两个数字及指定运算操作(加、+、乘、除),根据用户选择执行计算并输出结果,同时处理 "除数为 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 密集型任务(如网络请求、文件读写)用多线程更高效;
  • 适合理解 "并发编程" 的基础逻辑,为后续复杂并发场景(如多任务处理、异步编程)打下基础。
相关推荐
ZZHow10247 小时前
02OpenCV基本操作
python·opencv·计算机视觉
计算机学长felix7 小时前
基于Django的“酒店推荐系统”设计与开发(源码+数据库+文档+PPT)
数据库·python·mysql·django·vue
站大爷IP7 小时前
Python随机数函数全解析:5个核心工具的实战指南
python
悟乙己7 小时前
使用 Python 中的强化学习最大化简单 RAG 性能
开发语言·python·agent·rag·n8n
max5006007 小时前
图像处理:实现多图点重叠效果
开发语言·图像处理·人工智能·python·深度学习·音视频
AI原吾7 小时前
玩转物联网只需十行代码,可它为何悄悄停止维护
python·物联网·hbmqtt
云动雨颤7 小时前
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
python·单元测试
SunnyDays10118 小时前
Python 实现 HTML 转 Word 和 PDF
python·html转word·html转pdf·html转docx·html转doc
跟橙姐学代码8 小时前
Python异常处理:告别程序崩溃,让代码更优雅!
前端·python·ipython