穿越来找茬
35.39MB · 2025-09-13
该程序允许用户输入两个数字及指定运算操作(加、+、乘、除),根据用户选择执行计算并输出结果,同时处理 “除数为 0” 和 “非法操作符” 两种异常场景。
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
捕获非法操作符;从指定文本文件(input.txt
)中读取内容,将所有字母转为大写后,写入新文件(output.txt
),全程用with
语句自动管理文件资源,避免 “忘记关闭文件” 导致的资源泄露。
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
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
# 初始化空字典,用于存储学生姓名(键)和成绩(值)
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
# 需提前安装依赖: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 库打开一张图片,获取其原始尺寸后缩小为原来的 1/2,最后将处理后的图片保存为新文件,支持常见图片格式(JPG、PNG 等)。
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()
实现尺寸调整,满足 “图片压缩” 的常见需求;创建一个整数列表,先使用内置函数对其进行升序排序,再通过列表推导式筛选出 “大于指定阈值(如 5)” 的元素,最终输出排序后列表和筛选后列表。
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 的图形界面世界!”),实现基础 GUI 交互。
python
# 导入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
控制组件间距,避免界面杂乱;模拟 “一个月内每天的销售额” 数据,使用 Matplotlib 库绘制折线图,直观展示销售额随天数的变化趋势,同时添加图表标题和坐标轴标签,提升可读性。
python
# 需提前安装依赖: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
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)
减缓输出速度,让 “奇数” 和 “偶数” 交替打印,直观体现多线程 “并行执行” 的特点;