25级数应四班第五次实验(34)
| 学号 | 姓名 | 是否提交作业 |
| 2025010133 | 王子涵 | 是 |
| 2025010134 | 赵雯佳 | 是 |
| 2025010136 | 屈雨蒙 | 是 |
| 2025010137 | 刘柯凡 | 是 |
| 2025010139 | 潘佳乐 | 是 |
| 2025010140 | 杨亚洲 | 是 |
| 2025010141 | 王嘉伟 | 是 |
| 2025010142 | 杨旭洁 | 是 |
| 2025010143 | 肖雅楠 | 是 |
| 2025010144 | 张博洋 | 是 |
| 2025010145 | 黄冰冰 | 是 |
| 2025010146 | 顾芳菲 | 是 |
| 2025010147 | 刘芝怡 | 否 |
| 2025010148 | 岳嘉瑞 | 是 |
| 2025010149 | 马相淼 | 是 |
| 2025010150 | 唐景泽 |
是 |
| 2025010151 | 侯益波 | 是 |
| 2025010152 | 刘金惺 | 是 |
| 2025010153 | 范鹏展 | 是 |
| 2025010154 | 洪关瑞 | 是 |
| 2025010155 | 王状 | 是 |
| 2025010157 | 闫宸熙 | 是 |
| 2025010158 | 陈文洁 | 是 |
| 2025010159 | 成哲煜 | 是 |
| 2025010160 | 韩俊杰 | 是 |
| 2025010161 | 朱星月 | 是 |
| 2025010162 | 刘奕桐 | 是 |
| 2025010163 | 刘志杰 | 是 |
| 2025010164 | 李朋祖 | 是 |
| 2025010165 | 赵子月 | 是 |
| 2025010166 | 蒋子凡 | 是 |
| 2025010167 | 杨书宇 | 是 |
| 2025010168 | 袁艺伦 | 是 |
| 2025010169 | 闵子怡 | 是 |
| 2025010170 | 张家祺 | 是 |
| 2025010171 | 陈宣汝 | 是 |
| 2025010172 | 张景悦 | 是 |
| 2025010173 | 杨云飞 | 是 |
| 2025010174 | 刘研 | 是 |
| 2025010175 | 孙兰妮 | 是 |
2025010133王子涵
import pandas as pd #导入pandas库
# 读取销售明细表,指定openpyxl来读取
sale_df = pd.read_excel("销售明细表.xlsx", engine="openpyxl")
# 用字典定义商品单价
price_map = {
"中性笔": 1.5,
"笔记本": 5,
"文件夹": 7.2
}
# 计算单价和单笔销售额
sale_df["单价"] = sale_df["商品名称"].map(price_map) #p根据字典把商品名称换成对应的单价,s_d新增一列单价
sale_df["单笔销售额"] = sale_df["销售数量"] * sale_df["单价"]
# 按销售人员汇总(用字典传参避免括号语法问题)
summary_df = sale_df.groupby("销售人员").agg({ #g把同一个人的订单归为一组
"销售数量": "sum", #对分组数据合计
"单笔销售额": "sum"
}).rename(columns={
"销售数量": "总销售数量",
"单笔销售额": "总销售额(元)"
}).reset_index()
# 金额保留2位小数
summary_df["总销售额(元)"] = summary_df["总销售额(元)"].round(2)
# 导出汇总表
summary_df.to_excel("人员总销售额汇总表.xlsx", index=False, engine="openpyxl")
# 打印结果
print("✅ 汇总完成!")
print(summary_df)

2025010134 赵雯佳
列表转字典
def lists_to_dict(keys, values):
"""
将两个列表转换为字典,并自动处理长度不匹配的情况
"""
# 1. 判断长度是否不相等
if len(keys) != len(values):
print(f"⚠️ 警告:键列表长度({len(keys)})与值列表长度({len(values)})不匹配!")
# 情况 A:键比值多 (Key > Value) -> 补 None
if len(keys) > len(values):
print("👉 键列表较长,缺失的值将用 None 填充。")
result = {}
for i in range(len(keys)):
if i < len(values):
result[keys[i]] = values[i]
else:
result[keys[i]] = None
return result
# 情况 B:值比键多 (Value > Key) -> 截断值
else:
print("👉 值列表较长,多出的值将被舍弃。")
result = {}
for i in range(len(keys)):
result[keys[i]] = values[i]
return result
# 2. 否则 (长度相等)
else:
print("✅ 两个列表长度匹配,直接转换。")
return dict(zip(keys, values))
# --- 测试代码 ---
# 示例1:长度相等
keys1 = ['姓名', '年龄', '城市']
values1 = ['小明', 18, '西安']
print(lists_to_dict(keys1, values1), "\n")
# 示例2:值比键多 (你图中的示例2)
keys3 = ['语文', '数学']
values3 = [95, 100, 88, 76]
print(lists_to_dict(keys3, values3), "\n")
# 示例3:键比值多
keys4 = ['a', 'b', 'c', 'd']
values4 = [1, 2]
print(lists_to_dict(keys4, values4))

2025010136 屈雨蒙
加载马鞍图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 这里改成正确导入
# 解决中文乱码、字体警告
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题
# 生成x、y网格
x = np.linspace(-5, stop=5, num=100)
y = np.linspace(-5, stop=5, num=100)
X, Y = np.meshgrid(x, y)
# 马鞍面 z = x² - y²
Z = X ** 2 - Y ** 2
# 3D画布
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='coolwarm', alpha=0.8)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z') # 补上z轴标签
plt.show()

2025010137 刘柯凡
角度加减
# 角度加法函数
def jia(du1,fen1,miao1,du2,fen2,miao2):
miao = miao1 + miao2
fen = fen1 + fen2
du = du1 + du2
# 秒进位
if miao >= 60:
miao -= 60
fen += 1
# 分进位
if fen >= 60:
fen -= 60
du += 1
return du,fen,miao
# 角度减法函数
def jian(du1,fen1,miao1,du2,fen2,miao2):
miao = miao1 - miao2
fen = fen1 - fen2
du = du1 - du2
# 秒不够减借位
if miao < 0:
miao += 60
fen -= 1
# 分不够减借位
if fen < 0:
fen += 60
du -= 1
return du,fen,miao
# 手动输入数据
print("=====角度加减计算器=====")
print("请输入第一个角度:")
d1=int(input("度:"))
f1=int(input("分:"))
m1=int(input("秒:"))
print("请输入第二个角度:")
d2=int(input("度:"))
f2=int(input("分:"))
m2=int(input("秒:"))
# 调用函数
add_du,add_fen,add_miao = jia(d1,f1,m1,d2,f2,m2)
sub_du,sub_fen,sub_miao = jian(d1,f1,m1,d2,f2,m2)
# 输出结果
print("\n加法结果:",add_du,"度",add_fen,"分",add_miao,"秒")
print("减法结果:",sub_du,"度",sub_fen,"分",sub_miao,"秒")
2025010139 潘佳乐
判断等比等差数列
def check_sequence(sequence): #接受数列
if len(sequence) < 2:
return "数列长度不足,无法判断"
# ===== 判断 等差数列 =====
is_arithmetic = True
common_diff = sequence[1] - sequence[0]
for i in range(2, len(sequence)):
if sequence[i] - sequence[i - 1] != common_diff:
is_arithmetic = False
break
# ===== 判断 等比数列 =====
is_geometric = True
for num in sequence:
if num == 0:
is_geometric = False
break
if is_geometric:
common_ratio = sequence[1] / sequence[0]
for i in range(2, len(sequence)):
# 处理浮点数精度问题,允许微小误差
if abs(sequence[i] / sequence[i - 1] - common_ratio) > 1e-9:
is_geometric = False
break
# ===== 输出最终结果 =====
if is_arithmetic and is_geometric:
return "该数列既是等差数列,也是等比数列(常数列)"
elif is_arithmetic:
return f"该数列是【等差数列】,公差 = {common_diff}"
elif is_geometric:
return f"该数列是【等比数列】,公比 = {common_ratio}"
else:
return "该数列既不是等差数列,也不是等比数列"
# ========== 主程序:输入数列并判断 ==========
if __name__ == "__main__":
print("===== 数列判断器 =====")
print("输入规则:输入数列的数字,用空格隔开,按回车确认")
print("示例:1 2 3 4 或 2 4 8 16\n")
# 获取用户输入
input_str = input("请输入数列:")
# 分割字符串并转换为数字列表
num_list = [float(num) for num in input_str.split()]
# 调用函数判断并输出结果
result = check_sequence(num_list)
print("\n判断结果:", result)
2025010140杨亚洲
import os
os.startfile(r"C:\Users\杨亚洲\PyCharmMiscProject\5作业\新建文件夹\0a51590ebdd384fbd9ed9ccbcc1d9083.png")
2025010141王嘉伟
# 判断闰年
def run_nian(y):
if (y%4==0 and y%100!=0) or y%400==0:
return 366
return 365
# 每个月多少天
def yue_tian(y, m):
t = [31,28,31,30,31,30,31,31,30,31,30,31]
if m == 2 and run_nian(y)==366:
return 29
return t[m-1]
# 核心:算两个日期之间相差几天
def cha_tian(y1,m1,d1, y2,m2,d2):
cha = 0
# 先整年差
for y in range(y1, y2):
cha += run_nian(y)
# 再整月差
for m in range(m1, m2):
cha += yue_tian(y2, m)
# 最后天数差
cha += (d2 - d1)
return cha
# 最终算星期
def xingqi(nian,yue,ri):
# 固定基准:今天 2026.5.11 星期一
base_n, base_y, base_r = 2026, 5, 11
# 算出和今天差多少天
tian = cha_tian(base_n, base_y, base_r, nian, yue, ri)
week = ["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
yu = tian % 7
if yu < 0:
yu += 7
return week[yu]
# 运行
a = int(input("输入年份:"))
b = int(input("输入月份:"))
c = int(input("输入日期:"))
print(xingqi(a,b,c))
2025010142 杨旭洁
备份D盘某文件夹里面以a/A开头的文件
import shutil,os
s=r"D:\Program\PyCharm 2025.3.3\jbr\legal\jdk.internal.le"
t=r"D:\a备份"
for f in os.listdir(s):
if f.lower().startswith("a"):
shutil.copy(os.path.join(s,f),t)
![屏幕截图 2026-06-04 213823]()
2025010143 肖雅楠
加班费
# 定义统计周末加班加班费的函数
def count_overtime_salary(person_name, work_base_salary, month_weekend_days):
"""
:param person_name: 员工姓名
:param work_base_salary: 工作日单日基础加班费
:param month_weekend_days: 当月周六周日加班总天数
:return: 该员工当月周末加班总加班费
"""
# 周末加班一天 = 工作日的3倍
weekend_one_day = work_base_salary * 3
# 计算当月周末加班总费用
total_salary = weekend_one_day * month_weekend_days
return total_salary
# ========== 测试调用示例 ==========
if __name__ == "__main__":
# 输入示例:基础日薪100元,当月周末加班4天
name = input("请输入员工姓名:")
base_sal = float(input("请输入工作日单日加班费:"))
weekend_days = int(input("请输入当月周六周日加班总天数:"))
# 调用函数
total = count_overtime_salary(name, base_sal, weekend_days)
print(f"{name}当月周末加班总加班费为:{total} 元")

2025010144张博洋
文件分类
import os
import shutil
from datetime import datetime
FILES_TO_CLASSIFY = [
"C:/Users/ly013/Desktop/画集/1763568134742.jpeg",
"C:/Users/ly013/Desktop/Minecraft Launcher.lnk",
"C:/Users/ly013/Desktop/画集/1763911773587.jpeg",
"C:/Users/ly013/Desktop/pythonZY/实验五(Python语言程序设计基础)1_加水印.pdf"]
# 分类后存放的目标目录
TARGET_DIR = "新文件夹"
# 时间依据:'modified'(修改时间) 或 'created'(创建时间)
TIME_TYPE = "modified"
# 操作方式
ACTION = "copy"
def get_file_time(file_path):
"""获取文件的时间"""
stat = os.stat(file_path)
if TIME_TYPE == "modified":
timestamp = stat.st_mtime
else:
timestamp = stat.st_ctime
return datetime.fromtimestamp(timestamp)
def classify_files():
"""执行分类"""
if not os.path.exists(TARGET_DIR):
os.makedirs(TARGET_DIR)
print(f"创建目录:{TARGET_DIR}")
for file_path in FILES_TO_CLASSIFY:
# 检查文件是否存在
if not os.path.exists(file_path):
print(f"文件不存在:{file_path}")
continue
# 获取文件名和时间
filename = os.path.basename(file_path)
file_time = get_file_time(file_path)
# 按年月创建文件夹名(例如:2026-05)
folder_name = file_time.strftime("%Y-%m")
target_folder = os.path.join(TARGET_DIR, folder_name)
# 创建年份-月份文件夹
if not os.path.exists(target_folder):
os.makedirs(target_folder)
print("\n"f"---创建文件夹---:{folder_name}")
# 目标路径
target_path = os.path.join(target_folder, filename)
# 复制文件
if ACTION == "copy":
shutil.copy2(file_path, target_path)
print(f"{filename}" )
if __name__ == "__main__":
classify_files()
![屏幕截图 2026-06-07 162258]()

2025010145 黄冰冰
# 1. 生成一段字符串(可以自己修改内容)
my_str = "Hello, World! 你好,世界"
# 2. 倒序输出(Python 最简洁的写法)
reverse_str = my_str[::-1]
# 3. 打印结果
print("原字符串:", my_str)
print("倒序后:", reverse_str)
2025010146 顾芳菲
仿真物理实验凸透镜凹透镜光路
import turtle
# ========== 画布基础设置 ==========
screen = turtle.Screen()
screen.setup(width=800, height=600)
screen.title("凸透镜 & 凹透镜光路仿真")
screen.bgcolor("white")
pen = turtle.Turtle()
pen.speed(0)
pen.hideturtle()
# ========== 坐标轴绘制 ==========
def draw_axis():
pen.pencolor("gray")
pen.pensize(1)
# 主光轴横线
pen.penup()
pen.goto(-400, 0)
pen.pendown()
pen.goto(400, 0)
# 透镜中心原点黑点
pen.dot(size=5, color="black")
# ========== 绘制凸透镜 ==========
def draw_convex_lens():
pen.pencolor("blue")
pen.pensize(3)
pen.penup()
pen.goto(0, -150)
pen.pendown()
# 左右两段圆弧组成凸透镜
pen.circle(radius=150, extent=180)
pen.circle(-150, extent=180)
# ========== 绘制凹透镜 ==========
def draw_concave_lens():
pen.pencolor("red")
pen.pensize(3)
pen.penup()
pen.goto(0, -150)
pen.pendown()
# 反向圆弧组成凹透镜
pen.circle(-150, extent=180)
pen.circle(150, extent=180)
# ========== 凸透镜平行入射光路(汇聚) ==========
def convex_light():
pen.pencolor("orange")
pen.pensize(2)
ys = [-80, -40, 0, 40, 80]
for y in ys:
pen.penup()
pen.goto(-350, y)
pen.pendown()
pen.goto(0, y)
# 折射后汇聚到右焦点(150,0)
pen.goto(150, 0)
# ========== 凹透镜平行入射光路(发散) ==========
def concave_light():
pen.pencolor("green")
pen.pensize(2)
ys = [-80, -40, 0, 40, 80]
for y in ys:
pen.penup()
pen.goto(-350, y)
pen.pendown()
pen.goto(0, y)
# 折射发散
pen.goto(350, y - 0.3 * y)
# ========== 文字标注 ==========
def mark_text():
pen.pencolor("black")
pen.penup()
pen.goto(-280, 120)
pen.write("凸透镜汇聚光路", font=("宋体", 14))
pen.goto(-280, -180)
pen.write("凹透镜发散光路", font=("宋体", 14))
# ========== 主程序运行 ==========
if __name__ == "__main__":
draw_axis()
# 上方凸透镜
draw_convex_lens()
convex_light()
# 下移画笔,画下方凹透镜
pen.penup()
pen.goto(0, -300)
draw_concave_lens()
concave_light()
mark_text()
turtle.done()

2025010147刘芝怡 倒计时
import time
import os
# 清屏函数
def clear_screen():
os.system("cls" if os.name == "nt" else "clear")
# 用ASCII字符模拟数码管数字(0-9)
digit_segments = {
'0': [
" ██████ ",
"██ ██",
"██ ██",
"██ ██",
" ██████ "
],
'1': [
" ██ ",
" ███ ",
" ██ ",
" ██ ",
" ██████"
],
'2': [
" ██████ ",
" ██ ",
" ██████ ",
" ██ ",
" ██████ "
],
'3': [
" ██████ ",
" ██ ",
" ██████ ",
" ██ ",
" ██████ "
],
'4': [
"██ ██",
"██ ██",
" ██████ ",
" ██ ",
" ██ "
],
'5': [
" ██████ ",
" ██ ",
" ██████ ",
" ██ ",
" ██████ "
],
'6': [
" ██████ ",
" ██ ",
" ██████ ",
" ██ ██",
" ██████ "
],
'7': [
" ██████ ",
" ██ ",
" ██ ",
" ██ ",
" ██ "
],
'8': [
" ██████ ",
"██ ██",
" ██████ ",
"██ ██",
" ██████ "
],
'9': [
" ██████ ",
"██ ██",
" ██████ ",
" ██ ",
" ██████ "
]
}
# 把时间字符串转成数码管样式
def format_time_display(time_str):
# 把每个数字/符号按行拼接
lines = ["", "", "", "", ""]
for char in time_str:
if char == ':':
# 中间的冒号
segment = [" ", " ◆ ", " ", " ◆ ", " "]
else:
segment = digit_segments[char]
for i in range(5):
lines[i] += segment[i] + " "
return lines
def digital_timer(minutes=5, seconds=0):
total_seconds = minutes * 60 + seconds
while total_seconds >= 0:
clear_screen()
# 格式化时间为 MM:SS
mins = total_seconds // 60
secs = total_seconds % 60
time_str = f"{mins:02d}:{secs:02d}"
# 打印标题
print(" T I M E R ")
print()
# 打印数码管样式的时间
display_lines = format_time_display(time_str)
for line in display_lines:
print(" " + line)
print()
print(" BEEP READY ")
time.sleep(1)
total_seconds -= 1
clear_screen()
print(" T I M E R ")
print()
print(" ██████ ██████ ")
print(" ██ ██ ██ ██ ")
print(" ██████ ██████ ")
print(" ██ ██ ")
print(" ██ ██ ")
print()
print(" TIME'S UP! ")
# 设置倒计时
digital_timer(5, 0)

2025010148 岳嘉瑞 马鞍面
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 1. 生成 x, y 网格数据
x = np.linspace(-2, 2, 100) # x 范围:-2 到 2
y = np.linspace(-2, 2, 100) # y 范围:-2 到 2
X, Y = np.meshgrid(x, y) # 生成二维网格
# 2. 马鞍面方程:z = x² - y²
Z = X**2 - Y**2
# 3. 创建3D画布
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
# 4. 绘制曲面
ax.plot_surface(X, Y, Z)
# 5. 显示图像
plt.show()
2025010149马相淼
# 定义字符串 name = "马相淼" # 截取左侧前两个字符 res = name[0:2] print(res)

2025010150唐景泽
class Vector:
def __init__(self, data):
self.vec = list(data)
def __add__(self, other):
if len(self.vec) != len(other.vec):
raise ValueError("两个向量维度必须相同")
res = [a + b for a, b in zip(self.vec, other.vec)]
return Vector(res)
def __sub__(self, other):
if len(self.vec) != len(other.vec):
raise ValueError("两个向量维度必须相同")
res = [a - b for a, b in zip(self.vec, other.vec)]
return Vector(res)
def dot(self, other):
if len(self.vec) != len(other.vec):
raise ValueError("两个向量维度必须相同")
return sum(a * b for a, b in zip(self.vec, other.vec))
def cross(self, other):
if len(self.vec) != 3 or len(other.vec) != 3:
raise ValueError("叉乘仅支持三维向量")
x1, y1, z1 = self.vec
x2, y2, z2 = other.vec
x = y1 * z2 - z1 * y2
y = z1 * x2 - x1 * z2
z = x1 * y2 - y1 * x2
return Vector([x, y, z])
def __str__(self):
return str(self.vec)
if __name__ == "__main__":
v1 = Vector([1, 2, 3])
v2 = Vector([4, 5, 6])
print("向量 v1 =", v1)
print("向量 v2 =", v2)
# 加法
v_add = v1 + v2
print("v1 + v2 =", v_add)
# 减法
v_sub = v1 - v2
print("v1 - v2 =", v_sub)
# 点乘
v_dot = v1.dot(v2)
print("v1 · v2 (点乘) =", v_dot)
# 叉乘
v_cross = v1.cross(v2)
print("v1 × v2 (叉乘) =", v_cross)

2025010151侯益波
import requests
import pandas as pd
import mplfinance as mpf
import matplotlib.pyplot as plt
import time
# ---------------------- 配置 ----------------------
STOCKS = {
"贵州茅台": "sh600519",
"宁德时代": "sz300750",
"中国平安": "sh601318"
}
DAYS = 15 # 近半个月
# ---------------------------------------------------
def get_k_data(code, days=15):
"""
新浪财经接口获取 K 线,自带重试、延时
"""
url = "https://quotes.sina.com/stock/api/json.php"
params = {
"symbol": code,
"start": 0,
"count": days,
"type": "daily"
}
for i in range(3): # 最多重试3次
try:
resp = requests.get(url, params=params, timeout=10)
data = resp.json()
df = pd.DataFrame(data, columns=[
"date", "open", "high", "low", "close", "volume", "turnover"
])
df["date"] = pd.to_datetime(df["date"])
df = df.set_index("date")
df = df.astype({
"open": float,
"high": float,
"low": float,
"close": float,
"volume": float
})
return df
except Exception as e:
print(f"重试 {i+1} 次失败:{e}")
time.sleep(2)
return None
# 爬取
stock_dfs = {}
for name, code in STOCKS.items():
print(f"正在爬取:{name}")
df = get_k_data(code, DAYS)
if df is not None:
stock_dfs[name] = df
print(f"✅ {name} 成功")
time.sleep(1) # 防封
# 绘图
if stock_dfs:
fig, axes = plt.subplots(3, 1, figsize=(14, 12), sharex=True)
fig.suptitle("三支股票近半个月K线对比图", fontsize=18, fontweight="bold")
colors = ["red", "blue", "green"]
for i, (name, df) in enumerate(stock_dfs.items()):
ax = axes[i]
mpf.plot(
df,
type="candle",
ax=ax,
volume=False,
style="yahoo",
colorup="r",
colordown="g",
warn_too_much_data=1000
)
ax.set_title(name, fontsize=14, color=colors[i])
ax.grid(alpha=0.3)
plt.tight_layout()
plt.subplots_adjust(top=0.93)
plt.show()
else:
print("所有股票均爬取失败,可能是网络问题或IP被临时限制,稍后再试。")

2025010152刘金惺
import os
from PIL import Image
# 你要转换的文件夹路径(自己改这里)
folder_path = "./" # ./ 表示当前文件夹,也可以写成 "C:/图片/测试"
# 遍历文件夹里所有文件
for filename in os.listdir(folder_path):
# 只处理 .jpg 和 .jpeg 文件
if filename.lower().endswith((".jpg", ".jpeg")):
# 拼接完整路径
jpg_path = os.path.join(folder_path, filename)
# 生成新的 .png 文件名
png_filename = os.path.splitext(filename)[0] + ".png"
png_path = os.path.join(folder_path, png_filename)
# 打开并保存为 PNG
with Image.open(jpg_path) as img:
img.save(png_path, "PNG")
print("✅ 所有 .jpg 已转换为 .png!")
2025010153 范鹏展
光学实验
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 物理参数
wavelength = 589e-9 # 光波长 589nm (钠黄光)
d = 1.0e-3 # 双缝间距 (m)
D = 1.0 # 双缝到光屏距离 (m)
x = np.linspace(-0.02, 0.02, 2000) # 光屏坐标范围
# 创建画布
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 4))
line, = ax1.plot(x, np.zeros_like(x), "r")
im = ax2.imshow(np.zeros((200, len(x))), cmap="gray", aspect="auto", extent=[x.min(), x.max(), 0, 1])
ax1.set_ylim(0, 4.2)
ax1.set_title("双缝干涉 光强动态变化")
ax1.set_ylabel("相对光强")
ax1.grid(alpha=0.3)
ax2.set_title("动态干涉条纹")
ax2.set_xlabel("位置 x (m)")
ax2.set_yticks([])
# 动画更新函数
def update(frame):
# 模拟波长缓慢变化,观察条纹疏密改变
lam = wavelength + frame * 10e-12
phase = np.pi * d * x / (lam * D)
inten = 4 * (np.cos(phase)) ** 2
line.set_ydata(inten)
im.set_data(np.tile(inten, (200, 1)))
return line, im
# 生成动画
ani = FuncAnimation(
fig, update, frames=80, interval=80, blit=True
)
plt.tight_layout()
plt.show()
![屏幕截图 2026-06-06 224355]()
2025010154洪关瑞
# 用来存放每个人的加班总次数
work = {}
print("===== 签到加班录入系统 =====")
print("下班时间大于等于18点算加班\n")
while True:
name = input("请输入姓名(输入end结束):")
if name == "end":
break
time = int(input("输入下班时间(只输小时):"))
# 判断是否加班
if time >= 18:
# 加班次数+1
if name in work:
work[name] = work[name] + 1
else:
work[name] = 1
# 输出统计结果
print("\n======== 加班次数统计 ========")
for n, c in work.items():
print(f"{n} 总共加班:{c} 次")
2025010155王状
import cv2
import numpy as np
import matplotlib.pyplot as plt
# ================== 1. 读取图片并转为灰度图 ==================
# 把这里换成你的图片路径(支持 jpg、png、jpeg)
img = cv2.imread(r"C:\Users\27019\Desktop/test.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转为灰度图
# ================== 2. 分成 8 个灰度等级(0~255) ==================
# 8级:0, 32, 64, 96, 128, 160, 192, 224
levels = 8
step = 256 // levels
gray_8level = (gray // step) * step # 量化成8级灰度
# 统计每个灰度等级的像素数量
counts = [np.sum(gray_8level == val) for val in range(0, 256, step)]
# ================== 3. 绘制 8 列灰度柱状图 ==================
plt.rcParams["font.sans-serif"] = ["SimHei"] # 显示中文
plt.figure(figsize=(10, 5))
x_labels = [f"等级{i}\n({i*32})" for i in range(8)]
plt.bar(x_labels, counts, color="gray", width=0.6)
plt.title("图片8级灰度统计图(0~255)", fontsize=14)
plt.xlabel("灰度等级")
plt.ylabel("像素数量")
plt.grid(axis="y", linestyle="--", alpha=0.7)
plt.show()

闫宸熙2025010157
import cv2
import time
from datetime import datetime
def campus_check_in_camera():
"""
校园打卡拍照程序
功能:打开摄像头 → 实时显示时间 → 按 s 键拍照保存 → 按 q 键退出
"""
# 打开默认摄像头(0 是电脑自带摄像头,外接摄像头可能是 1)
cap = cv2.VideoCapture(0)
# 检查摄像头是否成功打开
if not cap.isOpened():
print("错误:无法打开摄像头!")
return
print("=== 校园打卡拍照工具 ===")
print("按 s 键:拍照并保存")
print("按 q 键:退出程序")
print("="*30)
while True:
# 读取一帧画面
ret, frame = cap.read()
if not ret:
print("读取画面失败")
break
# ========== 1. 获取当前系统时间 ==========
now = datetime.now()
time_str = now.strftime("%Y-%m-%d %H:%M:%S") # 显示格式
file_time_str = now.strftime("%Y%m%d_%H%M%S") # 文件名格式
# ========== 2. 在画面上叠加时间 ==========
# 字体、位置、颜色、大小
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, time_str, (10, 50), font, 1.2,
(0, 255, 255), 3, cv2.LINE_AA) # 黄色字体
# 显示画面窗口
cv2.imshow('校园打卡拍照 - 按s保存,q退出', frame)
# 键盘监听
key = cv2.waitKey(1) & 0xFF
# 按 s 键:拍照保存
if key == ord('s'):
# 文件名:打卡_年月日_时分秒.jpg
filename = f"打卡_{file_time_str}.jpg"
cv2.imwrite(filename, frame)
print(f"✅ 打卡成功!已保存:{filename}")
# 按 q 键:退出
if key == ord('q'):
print("👋 程序已退出")
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
# 启动打卡程序
if __name__ == "__main__":
campus_check_in_camera()

2025010158陈文洁
运费计算函数 重和长费用
def calculate_shipping_fee(weight, length): """
计算运费:按重量和长度双重计费
:param weight: 包裹重量(kg)
:param length: 包裹最长边长度(cm)
:return: 总运费(元)
"""
# 1. 按重量计费
if weight <= 1:
weight_fee = 10
else:
weight_fee = 10 + (weight - 1) * 5
# 2. 按长度计费(超过100cm加收)
if length > 100:
extra_length = length - 100
# 每超10cm加3元,不足10cm按10cm算
length_fee = (extra_length // 10 + 1) * 3
else:
length_fee = 0
# 3. 总运费
total_fee = weight_fee + length_fee return total_fee
# 测试
if __name__ == "__main__":
print("=== 运费计算器 ===")
w = float(input("请输入包裹重量(kg):"))
l = float(input("请输入包裹最长边长度(cm):"))
fee = calculate_shipping_fee(w, l)
print(f"包裹重量:{w}kg,长度:{l}cm")
print(f"应支付运费:{fee}元")
2025010159成哲煜
def calc_3x3_window_sum(matrix): """ 遍历4×4矩阵所有3×3窗口,计算每个9格窗口的总和 :param matrix: 4行4列二维列表(16格) :return: 所有窗口坐标 + 对应9格总和 """ result = [] # 4×4矩阵,3×3窗口左上角行、列只能取 0、1 for row in range(2): for col in range(2): total = 0 # 遍历当前3×3窗口内9个格子 for i in range(3): for j in range(3): val = matrix[row + i][col + j] total += val result.append({ "窗口左上角坐标": (row, col), "窗口9格总和": total }) return result # 测试:4×4 16格示例数据 if __name__ == "__main__": # 4行4列(16格) grid_16 = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16] ] res = calc_3x3_window_sum(grid_16) for item in res: print(item)
2025010160韩俊杰
将八个文件分配给40名学生
EXP_SOURCE_DIR = r"C:\Users\JioaeJ\Desktop\8份原始实验"
import os
import shutil
# ===================== 路径配置 =====================
EXP_SOURCE_DIR = r"C:\Users\JioaeJ\Desktop\8份原始实验"
OUTPUT_BASE_DIR = r"C:\Users\JioaeJ\Desktop\学生实验分发结果"
EXP_LIST = [
"实验1-基础操作",
"实验2-数据处理",
"实验3-排序算法",
"实验4-批量复制",
"实验5-文件管理",
"实验6-自动汇总",
"实验7-学号匹配",
"实验8-最终提交"
]
# ===================================================
def copy_oli_experiments():
print("🔍 正在校验8份实验文件...")
os.makedirs(OUTPUT_BASE_DIR, exist_ok=True)
# 容错处理:找不到源文件夹也不崩溃
if not os.path.exists(EXP_SOURCE_DIR):
print(f"⚠️ 提示:源文件夹不存在,仅演示分发流程")
print(f"请之后把8份实验放入:{EXP_SOURCE_DIR}")
else:
exp_count = len([f for f in os.listdir(EXP_SOURCE_DIR) if os.path.isfile(os.path.join(EXP_SOURCE_DIR, f))])
print(f"✅ 已找到 {exp_count} 份实验文件")
def generate_student_list():
students = []
for num in range(1, 41):
students.append({"学号": 2026000 + num, "姓名": f"学生{num}"})
students.sort(key=lambda x: x["学号"])
print(f"\n✅ 已生成并排序 {len(students)} 名学生\n")
return students
def distribute_files(stu_list):
print("===== 开始逐人分发8份实验 =====")
for stu in stu_list:
stu_id, stu_name = stu["学号"], stu["姓名"]
stu_root = os.path.join(OUTPUT_BASE_DIR, f"{stu_id}_{stu_name}")
os.makedirs(stu_root, exist_ok=True)
# 为每个学生创建8个独立实验文件夹
for exp_name in EXP_LIST:
os.makedirs(os.path.join(stu_root, exp_name), exist_ok=True)
print(f"✅ {stu_id} {stu_name} 8个实验目录全部创建完成")
if __name__ == "__main__":
copy_oli_experiments()
student_data = generate_student_list()
distribute_files(student_data)
print("\n🎉 全部40名学生、8次实验流程执行完毕!")
2025010161朱星月
录入学生
students = []
def add_student():
"""录入新增学生"""
try:
sid = int(input("输入学号:"))
name = input("输入姓名:")
age = int(input("输入年龄:"))
students.append([sid,name,age])
print("✅ 新增学生完成")
except:
print("❌ 输入格式错误")
# 调用
add_student()
print(students)

2025010162 刘奕桐
成绩转换表
import pandas as pd
score_map = {
"A+": 95,
"A": 90,
"A-": 85,
"B": 80,
"B-": 75
}
df = pd.read_excel("实验报告成绩表(等级).xlsx")
df["对应分数"] = df["等级"].map(score_map)
df.to_excel("实验成绩分数表.xlsx", index=False)
print("转换完成!已生成:实验成绩分数表.xlsx")
print("\n转换后表格预览:")
print(df)

2025010163 刘志杰
统计参加会议次数最多的前五名
import pandas as pd
from collections import Counter
import re # 引入正则表达式模块,用来处理多种标点
# 读取Excel文件
file_name = '工作簿2.xlsx'
# header=None 表示不读取第一行作为标题
df = pd.read_excel(file_name, header=None)
print(df)
all_attendees = []
# 遍历 B 列(第2列,索引为1)的数据
for names in df.iloc[:, 1]:
if pd.notna(names):
# 使用正则表达式 split(r'[,,]')
# 遇到“中文逗号”或者“英文逗号”都进行拆分
attendee_list = re.split(r'[,,]', str(names))
# 去除名字周围可能存在的空格(比如 " 张三" -> "张三")
cleaned_list = [name.strip() for name in attendee_list if name.strip()]
all_attendees.extend(cleaned_list)
# 统计每个人的出席次数
attendance_count = Counter(all_attendees)
#获取出席次数最多的前5名
top_5 = attendance_count.most_common(5)
# 打印结果
print("出席次数最多的前5名同学是:")
print("-" * 30)
print(f"{'排名':<5}{'姓名':<10}{'出席次数'}")
print("-" * 30)
for i, (name, count) in enumerate(top_5, 1):
print(f"{i:<5}{name:<12}{count}")
2025010164 李朋祖
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = """
Python 数据分析 人工智能 机器学习 深度学习 大数据
爬虫 算法 计算机视觉 自然语言处理 编程 代码
模型 训练 数据集 可视化 效率 科技 创新
"""
words = jieba.lcut(text)
processed_text = " ".join(words)
# 生成词云
wc = WordCloud(
background_color='white',
font_path="simhei.ttf",
width=1000,
height=600
)
wc.generate(processed_text)
plt.imshow(wc)
plt.axis("off")
plt.show()

2025010165 赵子月
按文件类型,分到不同文件夹
imfilenameport os
import shutil
source_dir = r"C:\Users\HUAWEI\Desktop\待分类文件"
def sort_all_files():
for filename in os.listdir(source_dir):
file_path = os.path.join(source_dir, filename)
if os.path.isdir(file_path):
continue
file_suffix = os.path.splitext(filename)[1].lower()
folder_name = file_suffix.lstrip(".") if file_suffix else "无后缀"
target_folder = os.path.join(source_dir, folder_name)
if not os.path.exists(target_folder):
os.mkdir(target_folder)
target_path = os.path.join(target_folder, filename)
if os.path.exists(target_path):
name, suf = os.path.splitext(filename)
filename = f"{name}_copy{suf}"
target_path = os.path.join(target_folder, filename)
shutil.move(file_path, target_path)
print(f"移动: {filename}")
if __name__ == "__main__":
sort_all_files()
print("✅ 全部文件分类完成!")
2025010166蒋子凡
import random
import os
# 配置
SIZE = 8
COLOR_CHAR = ["●", "■", "▲", "◆", "★"]
grid = []
score = 0
# 生成棋盘
def init_board():
board = []
for y in range(SIZE):
row = []
for x in range(SIZE):
row.append(random.randint(0, 4))
board.append(row)
# 清除开局自动三消
while find_match(board):
board = []
for y in range(SIZE):
row = [random.randint(0,4) for _ in range(SIZE)]
board.append(row)
return board
# 打印棋盘
def show_board():
os.system("cls")
print(f"===== 消消乐 | 得分:{score} =====")
print(" 0 1 2 3 4 5 6 7")
for i, line in enumerate(grid):
print(i, end=" ")
for num in line:
print(COLOR_CHAR[num], end=" ")
print()
print("输入格式:x1 y1 x2 y2 交换两个相邻方块")
print("输入q退出游戏")
# 判断两点相邻
def near(p1, p2):
x1,y1 = p1
x2,y2 = p2
dx = abs(x1-x2)
dy = abs(y1-y2)
return (dx == 1 and dy == 0) or (dx == 0 and dy == 1)
# 交换格子
def swap(board, p1, p2):
x1,y1 = p1
x2,y2 = p2
board[y1][x1], board[y2][x2] = board[y2][x2], board[y1][x1]
# 查找所有消除坐标
def find_match(board):
match = set()
# 横向
for y in range(SIZE):
x = 0
while x < SIZE - 2:
c = board[y][x]
if board[y][x+1]==c and board[y][x+2]==c:
match.add((x,y))
match.add((x+1,y))
match.add((x+2,y))
step = 3
while x+step < SIZE and board[y][x+step]==c:
match.add((x+step,y))
step +=1
x +=1
# 纵向
for x in range(SIZE):
y = 0
while y < SIZE - 2:
c = board[y][x]
if board[y+1][x]==c and board[y+2][x]==c:
match.add((x,y))
match.add((x,y+1))
match.add((x,y+2))
step =3
while y+step < SIZE and board[y+step][x]==c:
match.add((x,y+step))
step +=1
y +=1
return list(match)
# 消除+下落+补新方块
def eliminate(board):
global score
match_list = find_match(board)
if not match_list:
return False
score += len(match_list)*10
# 标记为空
for x,y in match_list:
board[y][x] = -1
# 下落填充
for x in range(SIZE):
stack = []
for y in range(SIZE-1, -1, -1):
if board[y][x] != -1:
stack.append(board[y][x])
# 从下往上填
for y in range(SIZE-1, -1, -1):
if stack:
board[y][x] = stack.pop(0)
else:
board[y][x] = random.randint(0,4)
return True
# 循环消除连锁
def full_clear(board):
while eliminate(board):
pass
# 主游戏逻辑
def game_loop():
global grid
grid = init_board()
while True:
show_board()
cmd = input("请输入指令:").strip()
if cmd.lower() == "q":
print("游戏结束,最终得分:", score)
break
try:
x1,y1,x2,y2 = map(int, cmd.split())
p1 = (x1,y1)
p2 = (x2,y2)
if not near(p1,p2):
input("只能交换相邻方块!按回车继续")
continue
# 交换测试
swap(grid, p1, p2)
if not find_match(grid):
swap(grid, p1, p2)
input("交换后无法消除,自动复原,回车继续")
else:
full_clear(grid)
except:
input("输入错误!格式示例:0 0 0 1 ,回车继续")
if __name__ == "__main__":
game_loop()

2025010167杨书宇
停车场AI识别
import cv2
import hyperlpr3 as lpr3
import tkinter as tk
from tkinter import messagebox
import time
# 计费参数
PER_HOUR_PRICE = 4 # 每小时4元
# 车辆存储字典:{车牌号:入场时间戳}
car_data = {}
# 初始化AI车牌识别
plate_ai = lpr3.LicensePlateCatcher(detect_level=lpr3.DETECT_LEVEL_HIGH)
# 入场弹窗
def enter_pop(plate_num):
root = tk.Tk()
root.withdraw()
win = tk.Toplevel()
win.title("车辆入场")
win.geometry("270x150")
tk.Label(win, text=f"车牌:{plate_num}\n入场登记完成", font=("黑体",12)).pack(pady=40)
tk.Button(win, text="关闭", command=win.destroy).pack()
# 出场计费弹窗
def exit_pop(plate_num, hour, money):
root = tk.Tk()
root.withdraw()
win = tk.Toplevel()
win.title("停车收费")
win.geometry("320x190")
msg = f"车牌:{plate_num}\n停车时长:{hour:.2f}小时\n应付金额:{money:.2f}元"
tk.Label(win, text=msg, font=("黑体",11)).pack(pady=35)
def pay_finish():
del car_data[plate_num]
win.destroy()
tk.Button(win, text="缴费完成离场", command=pay_finish).pack()
# 打开摄像头
cap = cv2.VideoCapture(0)
print("启动摄像头,识别车牌自动入场,再次识别同一车牌自动计费,按q关闭")
while True:
ret, img = cap.read()
if not ret:
break
# AI识别整张画面车牌
result_list = plate_ai(img)
for info in result_list:
plate, score, _, pos = info
x1,y1,x2,y2 = pos
# 画框+标注车牌
cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.putText(img,f"{plate} {score:.2f}",(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2)
# 停车逻辑
if plate not in car_data:
car_data[plate] = time.time()
enter_pop(plate)
else:
in_time = car_data[plate]
stop_hours = (time.time() - in_time)/3600
fee = round(stop_hours*PER_HOUR_PRICE,2)
exit_pop(plate,stop_hours,fee)
cv2.imshow("AI车牌识别停车场",img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()

2025010168 袁艺伦
# import pandas as pd
#
# # 模拟榜单数据
# data = [
# {"排名": 1, "歌曲ID": 100001, "歌名": "歌曲A", "歌手": "歌手1", "时长(秒)": 215},
# {"排名": 2, "歌曲ID": 100002, "歌名": "歌曲B", "歌手": "歌手2/歌手3", "时长(秒)": 242},
# {"排名": 3, "歌曲ID": 100003, "歌名": "歌曲C", "歌手": "歌手4", "时长(秒)": 198},
# {"排名": 4, "歌曲ID": 100004, "歌名": "歌曲D", "歌手": "歌手5/歌手6", "时长(秒)": 267},
# {"排名": 5, "歌曲ID": 100005, "歌名": "歌曲E", "歌手": "歌手7", "时长(秒)": 229}
# ]
#
# df = pd.DataFrame(data)
# # 最简洁稳定的导出写法,不用嵌套ExcelWriter
# df.to_excel("网易云热歌榜.xlsx", index=False)
# print("✅ Excel文件导出成功!")
# print(df)
import requests
import pandas as pd
import time
from concurrent.futures import ThreadPoolExecutor
# 榜单配置
RANK_LIST = {
"热歌榜": 3778678,
"新歌榜": 3779629,
"飙升榜": 19723756,
"原创榜": 28840835
}
SELECT_RANK = "热歌榜"
MAX_WORKERS = 2
# 完整浏览器请求头,大幅降低被网易云拦截概率
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",
"Referer": "https://music.163.com/",
"Origin": "https://music.163.com",
"Accept-Language": "zh-CN,zh;q=0.9",
"Accept": "application/json, text/plain, */*",
"sec-ch-ua": '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "Windows",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin"
}
def get_rank_all_songs(playlist_id):
api_url = f"http://music.163.com/api/playlist/detail?id={playlist_id}"
try:
time.sleep(0.3) # 轻微延时防高频风控
resp = requests.get(api_url, headers=HEADERS, timeout=12)
res_data = resp.json()
if res_data["code"] != 200:
print(f"❌ 歌单{playlist_id}请求失败,错误码:{res_data['code']}")
return None
# 解析榜单歌曲数据
playlist_info = res_data["result"]["playlist"]
song_raw_list = playlist_info["tracks"]
song_result = []
for rank, song in enumerate(song_raw_list, start=1):
song_id = song["id"]
song_name = song["name"]
# 拼接多位歌手名字
singer_names = "/".join([artist["name"] for artist in song["ar"]])
# 毫秒转秒
duration = round(song["dt"] / 1000)
song_result.append({
"排名": rank,
"歌曲ID": song_id,
"歌名": song_name,
"歌手": singer_names,
"时长(秒)": duration
})
print(f"✅ 成功抓取{len(song_result)}首榜单歌曲")
return song_result
except Exception as e:
print(f"⚠️ 爬取出现异常:{e}")
return None
if __name__ == "__main__":
target_id = RANK_LIST[SELECT_RANK]
song_data = get_rank_all_songs(target_id)
if song_data:
df = pd.DataFrame(song_data)
file_name = f"网易云_{SELECT_RANK}.xlsx"
df.to_excel(file_name, index=False)
print(f"\n🎉 全部完成!数据已导出文件:{file_name}")
else:
print("\n💡 未获取到榜单数据,接口被拦截/网络异常,可多运行1~2次重试")
2025010169闵子怡+亮度调节
import cv2
import numpy as np
import os
def imread_chinese(path):
"""支持中文路径的图片读取"""
with open(path, "rb") as f:
data = f.read()
img_array = np.asarray(bytearray(data), dtype=np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
return img
def imwrite_chinese(path, img):
"""支持中文路径的图片保存"""
ext = os.path.splitext(path)[1]
success, encoded = cv2.imencode(ext, img)
if success:
with open(path, "wb") as f:
f.write(encoded.tobytes())
return True
return False
# ========== 你的图片路径 ==========
image_path = r"C:\Users\Admin\Desktop\闵子怡.jpg"
# 读取图片
img = imread_chinese(image_path)
if img is None:
print("❌ 图片读取失败!请检查:")
print(" 1. 文件是否在桌面上")
print(f" 2. 路径是否正确: {image_path}")
print(" 3. 文件名是否是「闵子怡.jpg」")
exit()
print(f"✅ 读取成功!图片尺寸: {img.shape}")
brightness = 0
window_name = "亮度调节 - 拖动滑动条"
def update(x):
global brightness
brightness = x - 100
img_bright = np.clip(img.astype(np.int16) + brightness, 0, 255).astype(np.uint8)
display = img_bright.copy()
cv2.putText(display, f"亮度: {brightness:+d}", (10, 40),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow(window_name, display)
cv2.namedWindow(window_name)
cv2.createTrackbar("滑动条", window_name, 100, 200, update)
update(100)
print("\n【操作说明】")
print(" 🖱️ 拖动滑动条 → 实时调节亮度")
print(" 💾 按空格键 → 保存图片")
print(" ❌ 按 ESC键 → 退出")
while True:
key = cv2.waitKey(1) & 0xFF
if key == 27: # ESC
break
elif key == ord(' '): # 空格保存
img_bright = np.clip(img.astype(np.int16) + brightness, 0, 255).astype(np.uint8)
save_path = r"C:\Users\Admin\Desktop\闵子怡_bright.jpg"
if imwrite_chinese(save_path, img_bright):
print(f"✅ 已保存: {save_path} (亮度: {brightness:+d})")
else:
print("❌ 保存失败")
cv2.destroyAllWindows()

2025010170张家祺
蔬菜店打折计算函数
from datetime import (datetime)
def vegetable_discount(produce_str, buy_str, price):
produce_date = datetime.strptime(produce_str, "%Y/%m/%d")
buy_date = datetime.strptime(buy_str, "%Y/%m/%d")
days = (buy_date - produce_date).days
if days <= 3:
discount = 1.0
elif days == 4:
discount = 0.9
elif days == 5:
discount = 0.8
else:
discount = 0.7
final_price = price * discount
return days, discount, final_price
print("蔬菜店折扣计算")
produce_date = input("请输入生产日期(格式:YYYY/MM/DD):")
buy_date = input("请输入购买日期(格式:YYYY/MM/DD):")
original_price = float(input("请输入蔬菜原价:"))
days, dis, final = vegetable_discount(produce_date, buy_date, original_price)
print(f"蔬菜存放天数:{days} 天")
print(f"折扣比例:{dis}")
print(f"折后价格:{final:.2f} 元")
2025010171陈宣汝
# 导入课本datetime日期模块 + 窗口工具 from datetime import date import tkinter as tk # 计算倒计时 def dao_ji(): # 读取截止日期 y = int(year.get()) m = int(month.get()) d = int(day.get()) jiezhi = date(y, m, d) xianzai = date.today() # 算相差天数 tian = (jiezhi - xianzai).days res.config(text=f"距离任务结束还有:{tian} 天") # 创建简单窗口 win = tk.Tk() win.title("简易倒计时") # 输入框 tk.Label(win,text="截止年份:").pack() year = tk.Entry(win) year.pack() tk.Label(win,text="截止月份:").pack() month = tk.Entry(win) month.pack() tk.Label(win,text="截止日期:").pack() day = tk.Entry(win) day.pack() # 按钮+结果 tk.Button(win,text="点击计算",command=dao_ji).pack(pady=10) res = tk.Label(win,text="",font=("黑体",15)) res.pack() win.mainloop()
2025010172 张景悦
字符串截取函数
# 1. 自己定义一个截取子串的函数 def my_cut(s, start, end): result = "" for i in range(start, end): result += s[i] return result # 2. 用这个函数截取三段字符串 if __name__ == "__main__": text = "Python安康学院编程" # 原字符串 part1 = my_cut(text, 0, 3) part2 = my_cut(text, 3, 7) part3 = my_cut(text, 7, 11) # 3. 输出三段结果 print("第一段:", part1) print("第二段:", part2) print("第三段:", part3)

2025010173杨云飞
一个音频随机抽取一个片段
import wave
import random
def random_wav_segment(input_path, output_path, duration=5):
with wave.open(input_path, 'rb') as in_wav:
# 获取音频参数(声道数、采样宽度、帧率等)
params = in_wav.getparams()
frame_rate = params.framerate # 每秒帧数
total_frames = params.nframes # 总帧数
total_duration = total_frames / frame_rate # 总时长(秒)
# 检查片段时长是否合理
if duration >= total_duration:
print("抽取时长超过音频总时长,直接保存完整音频")
with wave.open(output_path, 'wb') as out_wav:
out_wav.setparams(params)
out_wav.writeframes(in_wav.readframes(total_frames))
return
# 计算片段的起始帧数和结束帧数
start_frame = random.randint(0, int((total_duration - duration) * frame_rate))
end_frame = start_frame + int(duration * frame_rate)
# 定位到起始帧并读取片段
in_wav.setpos(start_frame)
segment_frames = in_wav.readframes(end_frame - start_frame)
# 保存片段
with wave.open(output_path, 'wb') as out_wav:
out_wav.setparams(params)
out_wav.writeframes(segment_frames)
print(f"已随机抽取 {duration} 秒WAV片段,保存至:{output_path}")
# 示例使用(仅支持WAV格式)
if __name__ == "__main__":
random_wav_segment("input.wav", "output_segment.wav", duration=3)

2025010174 刘研
窗口登陆查询体测成绩
from tkinter import * from tkinter import messagebox # 体测成绩数据库 我已经帮你建好 data = { "2025001":{"name":"张三","身高体重":80,"肺活量":76,"50米":82,"长跑":75,"立定跳远":79}, "2025002":{"name":"李四","身高体重":60,"肺活量":55,"50米":59,"长跑":45,"立定跳远":65}, "2025003":{"name":"你的名字","身高体重":88,"肺活量":90,"50米":85,"长跑":80,"立定跳远":92} } # 判断合格函数 def judge(score): if score >= 60: return "合格" else: return "不合格" # 查询功能 def search(): id = entry_id.get() name = entry_name.get() if id not in data: messagebox.showerror("错误","该学号不存在") return if data[id]["name"] != name: messagebox.showerror("错误","姓名与学号不匹配") return # 取出所有成绩 s1 = data[id]["身高体重"] s2 = data[id]["肺活量"] s3 = data[id]["50米"] s4 = data[id]["长跑"] s5 = data[id]["立定跳远"] res = f""" ====体测成绩查询结果==== 身高体重:{s1}分 {judge(s1)} 肺活量:{s2}分 {judge(s2)} 50米跑:{s3}分 {judge(s3)} 耐力长跑:{s4}分 {judge(s4)} 立定跳远:{s5}分 {judge(s5)} """ messagebox.showinfo("查询成功",res) # 搭建窗口 root = Tk() root.title("体测成绩查询系统") root.geometry("400x300") # 组件布置 Label(root,text="学号",font=15).place(x=50,y=60) Label(root,text="姓名",font=15).place(x=50,y=120) entry_id = Entry(root,width=30) entry_id.place(x=120,y=65) entry_name = Entry(root,width=30) entry_name.place(x=120,y=125) Button(root,text="点击查询成绩",command=search,bg="#4299ff",fg="white",width=15).place(x=140,y=180) root.mainloop()

2025010175 孙兰妮
通讯录窗口
import tkinter as tk
from tkinter import simpledialog, messagebox
class AddressBook:
def __init__(self, root):
self.root = root
self.root.title("通讯录")
self.root.geometry("500x400")
self.contacts = {"张三": "13800000000", "李四": "13912345678"} # 示例数据
# 左侧列表框
self.lb = tk.Listbox(root)
self.lb.pack(side=tk.LEFT, padx=10, pady=10, fill=tk.BOTH, expand=True)
self.lb.bind('<<ListboxSelect>>', self.show_info)
# 右侧按钮
frame = tk.Frame(root)
frame.pack(side=tk.RIGHT, padx=10, pady=10)
for text, cmd in [("添加", self.add), ("删除", self.delete), ("修改", self.modify), ("查找", self.search)]:
tk.Button(frame, text=text, command=cmd, width=10).pack(pady=5)
# 底部信息栏
self.info = tk.Label(root, text="", anchor="w")
self.info.pack(side=tk.BOTTOM, fill=tk.X, padx=10, pady=5)
self.refresh()
def refresh(self):
"""刷新列表和底部计数"""
self.lb.delete(0, tk.END)
for name in sorted(self.contacts):
self.lb.insert(tk.END, name)
self.info.config(text=f"共 {len(self.contacts)} 人")
def show_info(self, event):
"""点击联系人显示电话"""
sel = self.lb.curselection()
if sel:
name = self.lb.get(sel[0])
self.info.config(text=f"{name} : {self.contacts[name]}")
def add(self):
name = simpledialog.askstring("添加", "姓名")
if name and name not in self.contacts:
phone = simpledialog.askstring("添加", "电话")
if phone:
self.contacts[name] = phone
self.refresh()
elif name in self.contacts:
messagebox.showerror("错误", "联系人已存在")
def delete(self):
sel = self.lb.curselection()
if sel and messagebox.askyesno("确认", "删除?"):
name = self.lb.get(sel[0])
del self.contacts[name]
self.refresh()
def modify(self):
sel = self.lb.curselection()
if sel:
name = self.lb.get(sel[0])
new_phone = simpledialog.askstring("修改", f"新电话 for {name}")
if new_phone:
self.contacts[name] = new_phone
self.refresh()
else:
messagebox.showwarning("警告", "请先选择")
def search(self):
name = simpledialog.askstring("查找", "姓名")
if name in self.contacts:
messagebox.showinfo("结果", f"{name} : {self.contacts[name]}")
# 高亮
for i, n in enumerate(self.lb.get(0, tk.END)):
if n == name:
self.lb.selection_clear(0, tk.END)
self.lb.selection_set(i)
self.lb.see(i)
self.show_info(None)
break
elif name:
messagebox.showerror("未找到", "无此联系人")
if __name__ == "__main__":
root = tk.Tk()
AddressBook(root)
root.mainloop()






浙公网安备 33010602011771号