25级第六次实验报告
| 2025010089 | 1 |
| 2025010090 | 1 |
| 2025010091 | 1 |
| 2025010092 | 1 |
| 2025010093 | 1 |
| 2025010094 | 1 |
| 2025010095 | 1 |
| 2025010096 | 1 |
| 2025010097 | 1 |
| 2025010098 | 1 |
| 2025010099 | 1 |
| 2025010100 | 1 |
| 2025010101 | 1 |
| 2025010102 | 1 |
| 2025010103 | 1 |
| 2025010104 | 1 |
| 2025010105 | |
| 2025010106 | |
| 2025010107 | 1 |
| 2025010108 | |
| 2025010109 | 1 |
| 2025010110 | |
| 2025010112 | 1 |
| 2025010113 | 1 |
| 2025010114 | 1 |
| 2025010115 | 1 |
| 2025010117 | 1 |
| 2025010118 | 1 |
| 2025010119 | 1 |
| 2025010120 | |
| 2025010121 | 1 |
| 2025010122 | 1 |
| 2025010124 | 1 |
| 2025010125 | 1 |
| 2025010126 | |
| 2025010127 | 1 |
| 2025010128 | 1 |
| 2025010130 | 1 |
| 2025010131 | 1 |
| 2025010132 | 1 |
2025010089张静文
三维马鞍面
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 生成数据 x = np.linspace(-3, 3, 50) y = np.linspace(-3, 3, 50) X, Y = np.meshgrid(x, y) Z = X**2 - Y**2 # 绘图 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, cmap='coolwarm') plt.show()

2025010090殷慧湘
import os
import shutil
class FileClassifier:
def __init__(self, source_dir):
# 源文件夹路径
self.source_dir = source_dir
# 定义分类规则:文件夹名 : 匹配后缀
self.category_map = {
"图片": [".jpg", ".png", ".jpeg", ".gif"],
"文档": [".txt", ".docx", ".pdf", ".xlsx"],
"视频": [".mp4", ".avi", ".mov"],
"音频": [".mp3", ".wav"],
"程序": [".py", ".exe"],
"压缩包": [".zip", ".rar", ".7z"]
}
def create_folder(self, folder_name):
"""创建分类文件夹"""
full_path = os.path.join(self.source_dir, folder_name)
if not os.path.exists(full_path):
os.mkdir(full_path)
print(f"已创建文件夹:{folder_name}")
def get_file_category(self, file_suffix):
"""根据后缀判断文件所属分类"""
for folder, suffix_list in self.category_map.items():
if file_suffix.lower() in suffix_list:
return folder
return "其他文件"
def sort_all_files(self):
"""核心:遍历文件并分类移动"""
# 先创建所有分类文件夹
for folder in self.category_map.keys():
self.create_folder(folder)
self.create_folder("其他文件")
# 遍历源目录下所有内容
for name in os.listdir(self.source_dir):
file_path = os.path.join(self.source_dir, name)
# 跳过文件夹,只处理文件
if os.path.isdir(file_path):
continue
# 获取文件后缀
_, suffix = os.path.splitext(name)
target_folder = self.get_file_category(suffix)
target_path = os.path.join(self.source_dir, target_folder, name)
# 移动文件
shutil.move(file_path, target_path)
print(f"移动 {name} --> {target_folder}")
if __name__ == "__main__":
# 修改这里为你要分类的文件夹绝对路径
target_folder = r"D:\LenovoSoftstore"
sorter = FileClassifier(target_folder)
sorter.sort_all_files()
2025010090殷慧湘
import os
import shutil
class FileClassifier:
def __init__(self, source_dir):
self.source_path = source_dir
# 新增图片、文档分类
self.file_type = {
"视频": [".mp4", ".avi", ".mov"],
"音频": [".mp3", ".wav"],
"程序": [".py", ".exe"],
"压缩包": [".zip", ".rar", ".7z"],
"图片": [".png", ".jpg", ".jpeg", ".bmp"],
"文档": [".docx", ".doc", ".xlsx", ".pdf", ".txt"]
}
def create_folder(self, folder_name):
full_path = os.path.join(self.source_path, folder_name)
if not os.path.exists(full_path):
os.mkdir(full_path)
print(f"已创建文件夹: {folder_name}")
def get_file_category(self, file_suffix):
for category, suffix_list in self.file_type.items():
if file_suffix.lower() in suffix_list:
return category
return "其他文件"
def sort_all_files(self):
all_cate = list(self.file_type.keys()) + ["其他文件"]
for cate in all_cate:
self.create_folder(cate)
for file_name in os.listdir(self.source_path):
file_full_path = os.path.join(self.source_path, file_name)
if os.path.isdir(file_full_path):
continue
_, suffix = os.path.splitext(file_name)
target_cate = self.get_file_category(suffix)
target_folder = os.path.join(self.source_path, target_cate)
target_path = os.path.join(target_folder, file_name)
shutil.move(file_full_path, target_path)
print(f"移动: {file_name} → {target_cate}")
# 新增完成提示
print("✅ 全部文件分类移动完成!")
if __name__ == "__main__":
# 改装:路径改为桌面
target_folder = r"C:\Users\30256\Desktop"
sorter = FileClassifier(target_folder)
sorter.sort_all_files()

2025010091张译心
import matplotlib.pyplot as plt # 解决中文显示 plt.rcParams["font.family"] = "SimHei" # 解决负号'-'显示方块问题 plt.rcParams["axes.unicode_minus"] = False import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(10, 7)) ax = fig.add_subplot(111, projection='3d') # 自定义参数 a、b a, b = 2, 2 x = np.linspace(-5, 5, 200) y = np.linspace(-5, 5, 200) X, Y = np.meshgrid(x, y) # 通用马鞍面公式 Z = (X**2)/(a**2) - (Y**2)/(b**2) # 绘制曲面,关闭网格线更美观 ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none', alpha=0.9) ax.set_xlabel('X Axis') ax.set_ylabel('Y Axis') ax.set_zlabel('Z Axis') ax.set_title(f'马鞍面 $z = \\frac{{x^2}}{{{a}^2}} - \\frac{{y^2}}{{{b}^2}}$') plt.tight_layout() plt.show()

2025010092朱翔鸽
import os import pandas as pd def generate_score_excel(folder_path, output_excel="scores.xlsx", max_score=100): """ 扫描文件夹,生成包含文件名、文件大小、排序和打分的Excel文件。 参数: folder_path: 文件夹路径 output_excel: 输出的Excel文件名 max_score: 满分值(文件最大时得满分,0得0分) """ # 获取文件夹下所有文件(不包括子目录) files = [] for entry in os.listdir(folder_path): full_path = os.path.join(folder_path, entry) if os.path.isfile(full_path): size = os.path.getsize(full_path) # 文件名作为学生姓名(不含扩展名,可根据需要调整) name = os.path.splitext(entry)[0] # 去掉扩展名 files.append({"姓名": name, "文件大小(字节)": size}) if not files: print("文件夹中没有文件,无法生成表格。") return # 创建DataFrame df = pd.DataFrame(files) # 按文件大小降序排序 df = df.sort_values(by="文件大小(字节)", ascending=False).reset_index(drop=True) # 计算分数:线性映射,最大值得满分,0得0分 max_size = df["文件大小(字节)"].max() if max_size > 0: df["分数"] = (df["文件大小(字节)"] / max_size) * max_score else: df["分数"] = 0 # 所有文件大小都为0 # 保留整数或保留两位小数 df["分数"] = df["分数"].round(2) # 输出Excel df.to_excel(output_excel, index=False, sheet_name="成绩") print(f"已生成Excel文件: {output_excel}") print(df) if __name__ == "__main__": # 使用示例:请将 'your_folder_path' 替换为实际文件夹路径 folder = input("请输入文件夹路径(默认当前目录): ").strip() if not folder: folder = "." # 当前目录 generate_score_excel(folder)

2025010093惠盾
爬取股票生成柱状图
import os import struct import matplotlib.pyplot as plt # ===================== 配置区域(按需修改)===================== # 通达信 vipdoc 根目录 TDX_VIPDOC = r"D:\tdx\vipdoc" # 股票列表:(股票名称, 市场sh/sz, 股票代码) stock_list = [ ("贵州茅台", "sh", "600519"), ("招商银行", "sh", "600036"), ("宁德时代", "sz", "300750"), ("五粮液", "sz", "000858") ] # 取最近N个交易日的收盘价做对比 last_days = 1 # ============================================================= def read_tdx_day_data(vip_path, market, code): """ 读取通达信日线.day文件,返回收盘价列表 :param vip_path: vipdoc路径 :param market: 市场 sh/sz :param code: 股票代码 :return: 收盘价列表 / None(文件不存在) """ file_path = os.path.join(vip_path, market, "lday", f"{market}{code}.day") if not os.path.exists(file_path): print(f"警告:未找到 {code} 本地数据文件,请在通达信中打开该股票下载数据!") return None close_price = [] with open(file_path, "rb") as f: while True: buf = f.read(32) if len(buf) < 32: break # 解析二进制数据,收盘价/100还原真实价格 _, _, _, _, close, _, _, _ = struct.unpack("<IIIIIIII", buf) close_price.append(close / 100.0) return close_price # 批量读取数据 stock_names = [] final_prices = [] for name, mkt, code in stock_list: price_list = read_tdx_day_data(TDX_VIPDOC, mkt, code) if price_list and len(price_list) >= last_days: stock_names.append(name) # 取最后N日最后一天价格 final_prices.append(price_list[-last_days]) print(f"{name} 最新收盘价:{price_list[-last_days]:.2f} 元") # 绘制柱状图 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False plt.figure(figsize=(10, 6)) bars = plt.bar(stock_names, final_prices, color="#1f77b4", alpha=0.8, edgecolor="#000000") # 在柱顶标注价格 for bar, price in zip(bars, final_prices): plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 10, f"{price:.2f}", ha="center", fontsize=11) plt.title("多股票收盘价对比图(数据源:通达信本地文件)", fontsize=16, pad=20) plt.ylabel("收盘价(元)", fontsize=12) plt.grid(axis="y", alpha=0.3) plt.tight_layout() plt.show()

2025010094谢润泽
import cv2 import tkinter as tk from tkinter import filedialog, ttk from PIL import Image, ImageTk import threading import time class VideoPlayer: def __init__(self, root): self.root = root self.root.title("简易视频播放器") self.root.geometry("800x600") # 视频相关变量 self.cap = None self.is_playing = False self.is_pause = False self.frame_rate = 30 self.video_path = "" # 界面布局 self.create_widgets() # 定时刷新画面 self.update_frame() def create_widgets(self): # 视频显示区域 self.video_label = ttk.Label(self.root) self.video_label.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # 按钮区域 btn_frame = ttk.Frame(self.root) btn_frame.pack(pady=5) self.btn_open = ttk.Button(btn_frame, text="打开视频", command=self.open_video) self.btn_open.grid(row=0, column=0, padx=5) self.btn_play = ttk.Button(btn_frame, text="播放", command=self.play_video) self.btn_play.grid(row=0, column=1, padx=5) self.btn_pause = ttk.Button(btn_frame, text="暂停", command=self.pause_video) self.btn_pause.grid(row=0, column=2, padx=5) self.btn_stop = ttk.Button(btn_frame, text="停止", command=self.stop_video) self.btn_stop.grid(row=0, column=3, padx=5) def open_video(self): """打开本地视频文件""" self.stop_video() file_path = filedialog.askopenfilename( title="选择视频文件", filetypes=[("视频文件", "*.mp4 *.avi *.mov *.mkv"), ("所有文件", "*.*")] ) if not file_path: return self.video_path = file_path self.cap = cv2.VideoCapture(file_path) self.frame_rate = int(self.cap.get(cv2.CAP_PROP_FPS)) def play_video(self): """播放视频""" if self.cap is None: self.open_video() if not self.is_playing: self.is_playing = True self.is_pause = False # 子线程播放,避免界面卡顿 threading.Thread(target=self.play_loop, daemon=True).start() elif self.is_pause: self.is_pause = False def pause_video(self): """暂停视频""" if self.is_playing: self.is_pause = True def stop_video(self): """停止视频,重置状态""" self.is_playing = False self.is_pause = False if self.cap is not None: self.cap.release() self.cap = None # 清空画面 self.video_label.config(image="") def play_loop(self): """视频播放循环(子线程)""" while self.is_playing and self.cap.isOpened(): if self.is_pause: time.sleep(0.1) continue ret, frame = self.cap.read() if not ret: # 视频播放完毕,自动停止 self.stop_video() break # OpenCV图像转RGB + 缩放适配窗口 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) img = Image.fromarray(frame) # 自适应缩放 win_w, win_h = self.video_label.winfo_width(), self.video_label.winfo_height() if win_w > 10 and win_h > 10: img = img.resize((win_w, win_h), Image.Resampling.LANCZOS) # 更新界面 self.tk_img = ImageTk.PhotoImage(image=img) self.video_label.config(image=self.tk_img) # 控制帧率 time.sleep(1 / self.frame_rate) def update_frame(self): self.root.after(10, self.update_frame) if __name__ == "__main__": root = tk.Tk() app = VideoPlayer(root) root.mainloop()

2025010095徐雨轩
知识图谱
import networkx as nx import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.backend_bases import MouseButton import numpy as np # 中文设置 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False # ==========1.构建知识点结构========== G = nx.Graph() main_nodes = ["小学语文", "小学数学", "小学英语"] chinese_nodes = ["拼音", "汉字", "词语", "句子", "阅读理解", "作文", "古诗文"] math_nodes = ["数的认识", "四则运算", "图形几何", "单位换算", "应用题", "统计初步"] english_nodes = ["26字母", "单词", "句型", "语法", "情景对话", "阅读理解"] G.add_nodes_from(main_nodes) G.add_nodes_from(chinese_nodes) G.add_nodes_from(math_nodes) G.add_nodes_from(english_nodes) # 上下级连线 for n in chinese_nodes: G.add_edge("小学语文", n) for n in math_nodes: G.add_edge("小学数学", n) for n in english_nodes: G.add_edge("小学英语", n) # 跨学科 G.add_edge("词语", "单词") G.add_edge("句子", "句型") all_nodes = list(G.nodes()) # 配色 color_map = {} for n in main_nodes: color_map[n] = "#FF9999" for n in chinese_nodes: color_map[n] = "#87CEEB" for n in math_nodes: color_map[n] = "#90EE90" for n in english_nodes: color_map[n] = "#FFD700" # ==========2.初始化3D坐标========== np.random.seed(42) pos_3d = {} pos2d = nx.spring_layout(G, seed=42, k=2.8) for node, (x, y) in pos2d.items(): if node in main_nodes: z = np.random.uniform(0.8, 1.2) else: z = np.random.uniform(-0.6, 0.3) pos_3d[node] = np.array([x, y, z], dtype=np.float64) # ==========3.画布与拖拽全局变量========== fig = plt.figure(figsize=(14, 10), dpi=100) ax = fig.add_subplot(111, projection='3d') drag_node = None # 当前拖拽节点 # 绘制全图函数 def draw_all(): ax.clear() ax.set_title("3D可拖拽知识点图谱|左键选中拖动节点,右键拖动旋转视角", fontsize=15) ax.set_axis_off() # 画边 for u, v in G.edges(): p1 = pos_3d[u] p2 = pos_3d[v] ax.plot3D([p1[0], p2[0]], [p1[1], p2[1]], [p1[2], p2[2]], c="#777777", lw=1.1, alpha=0.5) # 画节点 xs, ys, zs, cs, ss = [], [], [], [], [] for nd in all_nodes: x,y,z = pos_3d[nd] xs.append(x) ys.append(y) zs.append(z) cs.append(color_map[nd]) if nd in main_nodes: ss.append(220) else: ss.append(110) ax.scatter(xs, ys, zs, s=ss, c=cs, alpha=0.82) # 文字标签 for nd in all_nodes: x,y,z = pos_3d[nd] ax.text(x,y,z, nd, fontsize=9, weight="bold") fig.canvas.draw() # 初始绘图 draw_all() # ==========4.鼠标事件:拖拽逻辑========== def on_press(event): global drag_node if event.button != MouseButton.LEFT or event.inaxes != ax: return # 查找点击最近节点 click_x, click_y = event.xdata, event.ydata min_dist = 9999 select_nd = None for nd, (x,y,z) in pos_3d.items(): # 投影到画布简易判定 dist = ((click_x - x)**2 + (click_y - y)**2)**0.5 if dist < min_dist and dist < 0.12: min_dist = dist select_nd = nd drag_node = select_nd def on_move(event): global drag_node if drag_node is None or event.inaxes != ax or event.button != MouseButton.LEFT: return # 更新节点xy坐标,z不动 pos_3d[drag_node][0] = event.xdata pos_3d[drag_node][1] = event.ydata draw_all() def on_release(event): global drag_node if event.button == MouseButton.LEFT: drag_node = None # 绑定事件 fig.canvas.mpl_connect("button_press_event", on_press) fig.canvas.mpl_connect("motion_notify_event", on_move) fig.canvas.mpl_connect("button_release_event", on_release) plt.tight_layout() plt.show()

2025010096 刘加鑫
import matplotlib.pyplot as plt from scipy.optimize import curve_fit # 1. 模拟实验数据(带随机误差) np.random.seed(10) # 固定随机数,每次运行数据一致 x = np.linspace(0, 9, 10) y = 2.5 * x + 1.2 + np.random.normal(0, 0.4, size=len(x)) # 真实 y=2.5x+1.2 # 2. 定义拟合函数 def linear_func(x, k, b): return k * x + b # 3. 曲线拟合 popt, _ = curve_fit(linear_func, x, y) k_fit, b_fit = popt print(f"线性拟合方程:y = {k_fit:.3f}x + {b_fit:.3f}") # 4. 绘图 plt.rcParams["font.family"] = "SimHei" plt.rcParams["axes.unicode_minus"] = False plt.scatter(x, y, color="red", label="实验测量点") x_fit = np.linspace(x.min(), x.max(), 100) y_fit = linear_func(x_fit, k_fit, b_fit) plt.plot(x_fit, y_fit, color="blue", label="拟合直线") plt.xlabel("自变量 x") plt.ylabel("因变量 y") plt.legend() plt.grid(True) plt.show()

2025010097马浩
鼠标拖尾
import turtle # 1. 设置画布 screen = turtle.Screen() screen.title("鼠标拖尾特效 (最终修复版)") screen.bgcolor("black") screen.setup(600, 600) # 2. 设置画笔 pen = turtle.Turtle() pen.shape("circle") pen.shapesize(0.5) pen.color("cyan") pen.width(3) # 线条宽度 pen.speed(0) # 3. 定义拖拽时的动作 def drag_handler(x, y): # 当鼠标按住画笔拖动时,让它跟随坐标 x, y 移动 pen.ondrag(None) # 暂时移除监听,防止递归冲突 pen.goto(x, y) # 移动到鼠标位置 pen.dot(8) # 画一个点,制造拖尾感 pen.ondrag(drag_handler) # 重新绑定监听 # 4. 绑定事件到画笔 (注意:这里是 pen.ondrag 而不是 screen.ondrag) pen.ondrag(drag_handler) # 5. 让程序保持运行 turtle.done()

2025010098韩晓媛
双缝干涉条纹
#数值计算,生成坐标;以及绘图,画出曲线和干涉条纹 import numpy as np import matplotlib.pyplot as plt # 可自由修改的物理参数 wavelength = 520e-9 # 光波长,单位m(520e-9) double_gap = 0.3e-3 # 双缝间距,单位m(0.3e-3) screen_distance = 1.2 # 双缝到观测屏距离,单位m(1.2) view_range = 0.1 # 屏幕横向显示范围,单位m(0.06) # 生成屏幕坐标(在-0.06~0.06m之间,均匀生成3000个坐标点) y = np.linspace(-view_range, view_range, 3000) # 光程差计算(双缝干涉公式:Delta x = d*y/L) path_diff = double_gap * y / screen_distance # 双缝干涉光强公式(i=i0cos²((Π*Delta x)/λ)) light_intensity = np.cos(np.pi * path_diff / wavelength) ** 2 # 绘制光强曲线 plt.figure(figsize=(11, 5)) plt.subplot(211) plt.plot(y, light_intensity) plt.xlabel("y / m") plt.ylabel("Relative Intensity") plt.grid(alpha=0.25) # 绘制干涉条纹效果图 plt.subplot(212) plt.imshow(light_intensity.reshape(1, -1), cmap="gray", extent=[-view_range, view_range, 0, 1], aspect="auto") plt.yticks([]) plt.xlabel("y / m") #自动调整布局,展示图象 plt.tight_layout() plt.show()

2025010099张嘉诚
用多态实现英雄攻击
import random # 父类:英雄 class Hero: def __init__(self, hp): self.hp = hp # 血量属性 def attack(self): pass # 受伤方法:受到伤害扣血 def hurt(self, damage): self.hp -= damage if self.hp < 0: self.hp = 0 print(f"自身剩余血量:{self.hp}") # 战士 class Warrior(Hero): def __init__(self): super().__init__(hp=180) # 战士血量180 def attack(self): damage = 50 print(f"【战士】挥舞大剑,造成{damage}物理伤害") return damage # 法师 class Mage(Hero): def __init__(self): super().__init__(hp=100) # 法师血量100 def attack(self): damage = 60 print(f"【法师】释放火球术,造成{damage}魔法伤害") return damage # 弓箭手 class Archer(Hero): def __init__(self): super().__init__(hp=130) # 弓箭手血量130 def attack(self): damage = 35 print(f"【弓箭手】拉弓射箭,造成{damage}穿刺伤害") return damage # 多态调用函数 def hero_fight(attacker, target): dmg = attacker.attack() target.hurt(dmg) # 主程序测试 if __name__ == '__main__': zs = Warrior() fs = Mage() gj = Archer() 岳飞=Warrior() print("=====战士攻击法师=====") hero_fight(zs, fs) print("\n=====法师攻击弓箭手=====") hero_fight(fs, gj) print("\n=====弓箭手攻击战士=====") hero_fight(gj, zs) print(岳飞.attack())

2025010100霍延萌
表格
from docx import Document
from openpyxl import Workbook
import os
def create_test_word():
"""自动生成带表格的demo.docx,解决文件找不到报错"""
doc = Document()
doc.add_heading("班级信息表", level=1)
# 创建4列5行带边框表格
table = doc.add_table(rows=5, cols=4)
table.style = "Table Grid"
# 表头
headers = ["学号", "姓名", "专业", "成绩"]
for i, val in enumerate(headers):
table.cell(0, i).text = val
# 填充测试数据
data = [
["202601", "小明", "数学", "91"],
["202602", "小红", "统计", "86"],
["202603", "小李", "计算机", "94"],
["202604", "小张", "英语", "82"]
]
for row_idx, row_data in enumerate(data, start=1):
for col_idx, text in enumerate(row_data):
table.cell(row_idx, col_idx).text = text
doc.save("demo.docx")
print("✅ 已自动生成 demo.docx(内含测试表格)")
def docx_table_to_excel(docx_path, excel_save_path):
"""docx表格提取并导出Excel"""
# 打开word文档
doc = Document(docx_path)
# 创建excel工作簿
wb = Workbook()
sheet = wb.active
# 判断是否存在表格
if len(doc.tables) == 0:
print("❌ Word文档中没有表格!")
return
# 取文档第一个表格
word_table = doc.tables[0]
# 遍历表格写入Excel
for row_num, row in enumerate(word_table.rows, start=1):
for col_num, cell in enumerate(row.cells, start=1):
cell_content = cell.text.strip()
sheet.cell(row=row_num, column=col_num, value=cell_content)
# 保存Excel文件
wb.save(excel_save_path)
print(f"✅ 转换完成!输出文件:{excel_save_path}")
if __name__ == "__main__":
# 第一步:生成word文件(解决你之前找不到demo.docx的报错)
create_test_word()
# 第二步:执行转换
docx_table_to_excel("demo.docx", "输出表格.xlsx")

2025010101袁泉
成绩表
import pandas as pd # ===================== 配置区域(自行修改路径)===================== # 原始成绩表文件路径 input_excel = "原始实验成绩表.xlsx" # 输出汇总成绩表文件路径 output_excel = "成绩汇总及等级表.xlsx" # ================================================================= def score_statistics(): # 1. 读取原始Excel成绩表 df = pd.read_excel(input_excel, engine="openpyxl") # 2. 计算总分、平均分(假设除姓名列外,其余都是科目分数列) score_cols = df.columns[1:] # 第一列默认为姓名,后面全是分数 df["总分"] = df[score_cols].sum(axis=1) df["平均分"] = df[score_cols].mean(axis=1).round(2) # 保留2位小数 # 3. 按平均分划分等级 A/B/C def get_level(avg): if avg >= 80: return "A" elif avg >= 60: return "B" else: return "C" df["等级"] = df["平均分"].apply(get_level) # 4. 保存为新Excel文件 df.to_excel(output_excel, index=False, engine="openpyxl") print(f"统计完成!汇总表已保存至:{output_excel}") print("\n预览数据:") print(df) if __name__ == "__main__": score_statistics()

2025010102沈玉婷
给文件分到相应文件夹里
import os import shutil # 你的目标文件夹路径(就是你说的“新建文件夹”) # 注意:Windows路径里要用双反斜杠 \\ 或者 原始字符串 r"" source_dir = r"C:\新建文件夹" # 新建两个分类文件夹 py_dir = os.path.join(source_dir, "Python文件") other_dir = os.path.join(source_dir, "其他文件") # 创建文件夹(如果不存在就创建) os.makedirs(py_dir, exist_ok=True) os.makedirs(other_dir, exist_ok=True) # 遍历源文件夹里的所有文件(跳过子文件夹) for item in os.listdir(source_dir): item_path = os.path.join(source_dir, item) if os.path.isfile(item_path): # 只处理文件,不处理子文件夹 if item.endswith(".py"): # 是Python文件,复制/移动到py_dir shutil.move(item_path, os.path.join(py_dir, item)) else: # 其他文件,复制/移动到other_dir shutil.move(item_path, os.path.join(other_dir, item)) print("文件分类完成!") print(f"Python文件存放位置:{py_dir}") print(f"其他文件存放位置:{other_dir}")

2025010103黄俊
录音
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation import sounddevice as sd from scipy.io.wavfile import write # 指定1号麦克风 sd.default.device = 1 CHUNK = 1024 SAMPLE_RATE = 44100 all_audio = [] fig, ax = plt.subplots(figsize=(10, 4)) x_axis = np.arange(CHUNK) line, = ax.plot(x_axis, np.zeros(CHUNK), color="#0099ff", linewidth=1) ax.set_ylim(-1, 1) ax.set_title("实时麦克风波形(关窗口自动保存录音)") def refresh(_): data = sd.rec(frames=CHUNK, samplerate=SAMPLE_RATE, channels=1) all_audio.extend(data) line.set_ydata(data[:, 0]) return line, ani = FuncAnimation(fig, refresh, interval=20, blit=True, cache_frame_data=False) # 关闭窗口自动存录音 def on_close(event): if all_audio: audio_np = np.array(all_audio) write("record.wav", SAMPLE_RATE, audio_np) print("✅ 录音保存成功:项目文件夹 record.wav") fig.canvas.mpl_connect('close_event', on_close) plt.show()

2025010104许乐乐
import numpy as np import matplotlib.pyplot as plt # 解决中文乱码和负号显示问题 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False def draw_surface(select): t = np.linspace(-2, 2, 60) theta = np.linspace(0, 2 * np.pi, 60) T, TH = np.meshgrid(t, theta) if select == 1: # 抛物线绕x轴旋转:旋转抛物面 r = T ** 2 title = "抛物线旋转——旋转抛物面" elif select == 2: # 半圆绕x轴旋转:球面 r = np.sqrt(4 - T ** 2) title = "圆旋转——球面" elif select == 3: # 双曲线绕x轴旋转:单叶双曲面 r = np.sqrt(T ** 2 + 1) title = "双曲线旋转——单叶双曲面" elif select == 4: # 直线绕x轴旋转:圆锥面 r = 0.5 * np.abs(T) title = "直线旋转——圆锥面" else: return False # 绕x轴旋转坐标公式 X = T Y = r * np.cos(TH) Z = r * np.sin(TH) fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, alpha=0.7) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('Z') ax.set_title(title) plt.tight_layout() plt.show() return True if __name__ == "__main__": while True: print("=========二次旋转曲面选择菜单=========") print("1 旋转抛物面(抛物线旋转而成)") print("2 球面(圆旋转而成)") print("3 单叶双曲面(双曲线旋转而成)") print("4 圆锥面(直线旋转而成)") print("0 退出程序") choice = input("请输入要查看的序号:") try: num = int(choice) except ValueError: print("输入有误,请输入数字!\n") continue if num == 0: print("程序已退出") break if not draw_surface(num): print("没有该序号,请重新选择\n")

2025010106钟海洋
def print_hi(name): # 在下面的代码行中使用断点来调试脚本。 print(f'Hi, {name}') # 按 Ctrl+F8 切换断点。 # 按装订区域中的绿色按钮以运行脚本。 if __name__ == '__main__': print_hi('PyCharm') # 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助 import shutil import os source_folder = r"C:\Users\ASUS\PyCharmMiscProject\文件夹1" target_folder = r"C:\Users\ASUS\PyCharmMiscProject\文件夹2\副本文件夹" # 先创建上级目录 target_parent = os.path.dirname(target_folder) os.makedirs(target_parent, exist_ok=True) # 如果目标文件夹存在,先彻底删除 if os.path.exists(target_folder): shutil.rmtree(target_folder) try: shutil.copytree(source_folder, target_folder) print("文件夹复制完成!") except Exception as e: print(f"复制失败,错误信息:{e}")

2025010107孙瑞妍
按文件大小分类到不同文件夹里
import os
import shutil
# 配置区,自行修改
source_dir = r"D:\test_files" # 待分类文件的根目录
target_root = r"D:\file_sort" # 分类文件夹总目录
# 大小划分,单位MB
size_rule = [
("小于10MB", 0, 10),
("10MB~100MB", 10, 100),
("100MB~1GB", 100, 1024),
("大于1GB", 1024, float("inf"))
]
# 创建目标分类文件夹
for folder_name, _, _ in size_rule:
full_path = os.path.join(target_root, folder_name)
os.makedirs(full_path, exist_ok=True)
# 遍历源文件夹所有文件
for filename in os.listdir(source_dir):
file_path = os.path.join(source_dir, filename)
# 跳过文件夹,只处理文件
if not os.path.isfile(file_path):
continue
# 获取文件大小 MB
file_size_byte = os.path.getsize(file_path)
file_size_mb = file_size_byte / 1024 / 1024
# 判断归属文件夹
dest_folder = ""
for name, min_mb, max_mb in size_rule:
if min_mb <= file_size_mb < max_mb:
dest_folder = name
break
# 复制/移动文件,move移动,copy2复制
dest_path = os.path.join(target_root, dest_folder, filename)
try:
shutil.move(file_path, dest_path)
print(f"已移动:{filename} → {dest_folder}")
except Exception as e:
print(f"失败 {filename} : {str(e)}")

2025010109 黄帅豪
图像处理,卷积魔法
import cv2 import numpy as np import matplotlib.pyplot as plt # ========== 图片路径 ========== img_path = "test.png" img = cv2.imread(img_path) if img is None: raise FileNotFoundError("图片不存在,请修改文件路径!") # opencv默认BGR,转为RGB用于matplotlib显示 img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) h, w = img.shape[:2] # ---------------------- 2. 高斯模糊 ---------------------- blur_img = cv2.GaussianBlur(img_rgb, (15, 15), sigmaX=0) # ---------------------- 3. 图像锐化 ---------------------- sharpen_kernel = np.array([ [-0.5, -0.5, -0.5], [-0.5, 5.0, -0.5], [-0.5, -0.5, -0.5] ]) sharpen_img = cv2.filter2D(img_rgb, -1, sharpen_kernel) # ---------------------- 4. Canny边缘检测 ---------------------- gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY) gray_blur = cv2.GaussianBlur(gray, (3, 3), 0) edge_img = cv2.Canny(gray_blur, threshold1=50, threshold2=150) # ---------------------- 5. 浮雕效果 ---------------------- emboss_kernel = np.array([ [-2, -1, 0], [-1, 1, 1], [ 0, 1, 2] ]) emboss_img = cv2.filter2D(img_rgb, -1, emboss_kernel) emboss_img = cv2.normalize(emboss_img, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U) # ---------------------- 绘图展示 ---------------------- plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 解决负号显示乱码 plt.figure(figsize=(14, 10)) plt.subplot(2, 3, 1) plt.imshow(img_rgb) plt.title("原图") plt.axis("off") plt.subplot(2, 3, 2) plt.imshow(blur_img) plt.title("高斯模糊") plt.axis("off") plt.subplot(2, 3, 3) plt.imshow(sharpen_img) plt.title("图像锐化") plt.axis("off") plt.subplot(2, 3, 4) plt.imshow(edge_img, cmap="gray") plt.title("Canny边缘检测") plt.axis("off") plt.subplot(2, 3, 5) plt.imshow(emboss_img) plt.title("浮雕效果") plt.axis("off") plt.tight_layout() plt.show() # ---------------------- 保存图片 ---------------------- cv2.imwrite("blur.jpg", cv2.cvtColor(blur_img, cv2.COLOR_RGB2BGR)) cv2.imwrite("sharpen.jpg", cv2.cvtColor(sharpen_img, cv2.COLOR_RGB2BGR)) cv2.imwrite("edge.jpg", edge_img) cv2.imwrite("emboss.jpg", cv2.cvtColor(emboss_img, cv2.COLOR_RGB2BGR)) print("所有效果图已保存至当前文件夹!")

2025010112 王怡萱
求面积
import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei'] plt.rcParams['axes.unicode_minus'] = False triangle_base = 10 triangle_height = 6 rectangle_length = 10 rectangle_width = 8 triangle_x = np.array([0, triangle_base/2, triangle_base]) triangle_y = np.array([rectangle_width, rectangle_width + triangle_height, rectangle_width]) rectangle_x = np.array([0, 0, triangle_base, triangle_base]) rectangle_y = np.array([0, rectangle_width, rectangle_width, 0]) plt.figure(figsize=(6, 8)) plt.fill(triangle_x, triangle_y, color='lightcoral', alpha=0.6, edgecolor='red', linewidth=2) plt.fill(rectangle_x, rectangle_y, color='lightblue', alpha=0.6, edgecolor='red', linewidth=2) circle_center_x = triangle_base / 2 circle_center_y = rectangle_width + triangle_height / 2 circle_radius = 0.8 circle = plt.Circle((circle_center_x, circle_center_y), circle_radius, color='white', ec='red', lw=2) plt.gca().add_patch(circle) plt.axis('equal') plt.axis('off') plt.title('房子图形(三角形+长方形)', fontsize=14, pad=20) plt.show() triangle_area = 0.5 * triangle_base * triangle_height rectangle_area = rectangle_length * rectangle_width total_area = triangle_area + rectangle_area print(f"三角形(屋顶)的面积为: {triangle_area}") print(f"长方形(房子主体)的面积为: {rectangle_area}") print(f"这个图形的总面积为: {total_area}")

2025010113 石蕊鑫
合并两个csv文件,将csv文件转换为txt文件
import csv csv_file1 = "文件1.csv" csv_file2 = "文件二.csv" output_file = "合并结果.csv" with open(csv_file1, "r", encoding="utf-8", newline="") as f1, \ open(csv_file2, "r", encoding="utf-8", newline="") as f2, \ open(output_file, "w", encoding="utf-8", newline="") as f_out: reader1 = csv.reader(f1) reader2 = csv.reader(f2) writer = csv.writer(f_out) # 写入第一个文件全部内容 for row in reader1: writer.writerow(row) # 跳过第二个文件表头,再写入内容 next(reader2) for row in reader2: writer.writerow(row) print("合并完成!") import csv def csv_to_txt(csv_path, txt_path, sep="\t"): """ 将CSV文件转换为TXT文件 :param csv_path: 输入的CSV文件路径 :param txt_path: 输出的TXT文件路径 :param sep: 列分隔符,默认用制表符(\t),也可以用逗号、空格等 """ with open(csv_path, "r", encoding="utf-8") as csv_file, \ open(txt_path, "w", encoding="utf-8") as txt_file: reader = csv.reader(csv_file) for row in reader: line = sep.join(row) + "\n" txt_file.write(line) print(f"转换完成!已保存为:{txt_path}") if __name__ == "__main__": input_csv = "文件1.csv" output_txt = "文件1.txt" csv_to_txt(input_csv, output_txt)

2025010114殷佳锐
形状大类
# 形状父类 class Shape: def get_area(self): pass # 圆形子类 class Circle(Shape): def __init__(self, r): self.r = r def get_area(self): return 3.14 * self.r * self.r # 正方形子类 class Square(Shape): def __init__(self, side): self.side = side def get_area(self): return self.side * self.side # 三角形子类 class Triangle(Shape): def __init__(self, bottom, height): self.bottom = bottom self.height = height def get_area(self): return self.bottom * self.height / 2 # 主程序 手动输入 if __name__ == "__main__": print("===== 形状面积计算器 =====") # 输入圆形半径 r = float(input("请输入圆形半径:")) c = Circle(r) # 输入正方形边长 side = float(input("请输入正方形边长:")) s = Square(side) # 输入三角形底和高 bottom = float(input("请输入三角形底边:")) height = float(input("请输入三角形高:")) t = Triangle(bottom, height) # 多态统一调用方法 print("\n----- 计算结果 -----") print(f"圆形面积:{c.get_area():.2f}") print(f"正方形面积:{s.get_area():.2f}") print(f"三角形面积:{t.get_area():.2f}")

2025010115 康静茹
新建文件夹{将文件按不同类型分到不同文件夹
import os
import shutil
def classify_files(src:str, dst:str)->None:
# 定义文件类型映射
types = {
"图片": [".jpg", ".png", ".gif", ".bmp"],
"文档": [".txt", ".doc", ".docx", ".pdf", ".xls", ".xlsx"],
"视频": [".mp4", ".avi", ".mkv"],
"音频": [".mp3", ".wav"],
"压缩包": [".zip", ".rar", ".7z"]
}
# 遍历文件
for name in os.listdir(src):
path = os.path.join(src, name)
if os.path.isfile(path):
ext = os.path.splitext(name)[1].lower()
# 判断文件类型
folder = "其他"
for t, exts in types.items():
if ext in exts:
folder = t
break
# 目标路径
target_dir = os.path.join(dst, folder)
os.makedirs(target_dir, exist_ok=True)
target_path = os.path.join(target_dir, name)
# 防重名
count = 1
while os.path.exists(target_path):
base, e = os.path.splitext(name)
target_path = os.path.join(target_dir, f"{base}_{count}{e}")
count += 1
# 复制文件
shutil.copy2(path, target_path)
print(f"已复制: {name} -> {folder}")
if __name__ == "__main__":
# 直接在这里写你的路径,用r字符串
source = r"C:\Users\康静茹\Downloads" # 你的源文件夹
dest = r"C:\Users\康静茹\Desktop\分类结果" # 你的目标文件夹
classify_files(source, dest)



2025010117 李欣栎
人脸框选
import cv2 # 导入opencv库 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalFace_default.xml') #加载人脸检测器 cap = cv2.VideoCapture(0) #打开摄像头 # 循环读取画面 while True: ret, img = cap.read() #读取一帧画面 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #转变度图(检测人脸更快) faces = face_cascade.detectMultiScale(gray, 1.1, 4) #检测人脸 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2) #給每个人脸画方框 cv2.imshow("人脸检测", img) #显示画面 k = cv2.waitKey(30) & 0xff if k == 27: break #按ESC退出 # 释放资源 cap.release() cv2.destroyAllWindows()


2025010118 陈影
文件收集到excel表里
import os import pandas as pd # 自动获取当前文件夹 path = os.getcwd() data = [] # 遍历所有内容 for root, dirs, files in os.walk(path): # 过滤PyCharm系统配置文件夹 dirs[:] = [d for d in dirs if not d in ('.idea','inspectionProfiles')] # 记录文件夹 for d in dirs: data.append([root, d, "文件夹", "包含"]) # 记录正常作业文件 for f in files: if not f.endswith(('.xml','.iml','.gitignore')): data.append([root, f, "文件", "包含"]) # 构建DataFrame+强制生成标准表格 df = pd.DataFrame(data, columns=["父目录", "名称", "类型", "包含关系"]) df.to_excel("文件目录表格.xlsx", index=False, engine="openpyxl") print(f"成功生成!") print(f"表格保存在:{path}")


2025010119 淡郑雪
酒店管理
# 酒店管理系统 # 房间数据:{房间号: [状态, 价格, 入住人姓名]} # 状态:0空闲 1已入住 rooms = { 101: [0, 180, ""], 102: [0, 180, ""], 201: [0, 260, ""], 202: [0, 260, ""], 301: [0, 380, ""] } total_income = 0 # 总营业额 def show_menu(): print("===== 酒店客房管理系统 =====") print("1. 查看所有房间状态") print("2. 办理入住") print("3. 办理退房") print("4. 新增客房") print("5. 查询营业额") print("0. 退出系统") print("============================") def show_rooms(): print("\n【房间信息】") print("房间号\t房价\t状态\t入住客人") for num, info in rooms.items(): status = "空闲" if info[0] == 0 else "已入住" name = info[2] if info[2] else "无" print(f"{num}\t{info[1]}元\t{status}\t{name}") def check_in(): global rooms try: room_num = int(input("请输入入住房间号:")) if room_num not in rooms: print("该房间不存在!") return if rooms[room_num][0] == 1: print("房间已有人入住,无法办理!") return name = input("请输入入住客人姓名:") days = int(input("入住天数:")) rooms[room_num][0] = 1 rooms[room_num][2] = name price = rooms[room_num][1] * days print(f"办理成功!总费用:{price}元") except ValueError: print("输入数字错误!") def check_out(): global rooms, total_income try: room_num = int(input("请输入退房房间号:")) if room_num not in rooms: print("该房间不存在!") return if rooms[room_num][0] == 0: print("该房间无人入住!") return days = int(input("实际入住天数:")) cost = rooms[room_num][1] * days total_income += cost # 房间重置 rooms[room_num][0] = 0 rooms[room_num][2] = "" print(f"退房完成,本次消费{cost}元,已计入营收") except ValueError: print("输入数字错误!") def add_room(): try: new_num = int(input("输入新房间号:")) if new_num in rooms: print("房间已存在!") return price = int(input("输入房间单价:")) rooms[new_num] = [0, price, ""] print("新增客房成功!") except ValueError: print("数字输入有误!") # 主程序循环 while True: show_menu() opt = input("请选择功能:") if opt == "1": show_rooms() elif opt == "2": check_in() elif opt == "3": check_out() elif opt == "4": add_room() elif opt == "5": print(f"\n酒店总营业额:{total_income} 元") elif opt == "0": print("系统退出,再见!") break else: print("输入错误,请选择0-5!") input("\n按回车返回菜单...")

2025010121郑舒萍
建立一个窗口,加载音乐文件,可以播放音乐
import tkinter as tk
from tkinter import filedialog
import os
import os.path
win = tk.Tk()
win.title("MP3播放器")
song_paths = []
def load_dir():
global song_paths
folder = filedialog.askdirectory()
listbox.delete(0, tk.END)
song_paths.clear()
# 只读取mp3文件
for file_name in os.listdir(folder):
if file_name.lower().endswith(".mp3"):
full_path = os.path.join(folder, file_name)
song_paths.append(full_path)
listbox.insert(tk.END, file_name)
def play_song():
select = listbox.curselection()
if not select:
return
path = song_paths[select[0]]
# Windows系统自带打开音频,不会失效
os.startfile(path)
tk.Button(win, text="打开歌曲文件夹", command=load_dir).pack(pady=5)
listbox = tk.Listbox(win, width=40, height=10)
listbox.pack(pady=5)
tk.Button(win, text="播放选中歌曲", command=play_song).pack(pady=5)
win.mainloop()

2025010122 田昌盛
人物类游戏有血量普攻
import time
import os
import random
# 跨平台清屏,实现动画刷新
def clear_screen():
os.system("cls" if os.name == "nt" else "clear")
# 角色单位类:封装血量、攻击、小人图标、血条、攻击逻辑
class Unit:
def __init__(self, name, job, hp, max_hp, atk, symbol):
self.name = name
self.job = job
self.hp = hp
self.max_hp = max_hp
self.atk = atk
self.symbol = symbol # 小人emoji图标
self.alive = True
# 可视化方块血条
def get_hp_bar(self):
bar_length = 15
fill_block = int(bar_length * self.hp / self.max_hp)
bar = "■" * fill_block + "□" * (bar_length - fill_block)
return f"[{bar}] {self.hp}/{self.max_hp}"
# 承受伤害,血量最低为0
def take_damage(self, damage):
self.hp = max(0, self.hp - damage)
if self.hp <= 0:
self.alive = False
# 普攻攻击目标
def attack(self, target):
if not self.alive or not target.alive:
return
hurt = self.atk
target.take_damage(hurt)
print(f"{self.symbol}{self.job}{self.name} → {target.symbol}{target.job}{target.name} 造成 {hurt} 点伤害!")
# 绘制战场画面(固定站位:前排战士、中排弓手、后排法师)
def draw_battle_scene(warrior, archer, mage, boss):
print("===== 卡通小人对战动画 =====")
print("【我方阵容站位】前排坦克|中排输出|后排法师")
print(f" {warrior.symbol} {warrior.job} {warrior.name} {warrior.get_hp_bar()}")
print(f" {archer.symbol} {archer.job} {archer.name} {archer.get_hp_bar()}")
print(f" {mage.symbol} {mage.job} {mage.name} {mage.get_hp_bar()}")
print("-" * 45)
print("【敌方BOSS】")
print(f" {boss.symbol} {boss.job} {boss.name} {boss.get_hp_bar()}")
print("=" * 45)
# 创建三个职业角色 + BOSS
def create_character():
warrior = Unit("铁山", "战士", 160, 160, 24, "🧔")
archer = Unit("风羽", "弓箭手", 115, 115, 28, "🏹")
mage = Unit("星灵", "法师", 75, 75, 40, "🧙")
boss = Unit("暗影巨兽", "魔物", 320, 320, 32, "👹")
return warrior, archer, mage, boss
# 战斗动画主流程
def start_battle():
war, arch, mag, boss = create_character()
round_count = 1
while True:
# 刷新画面动画
clear_screen()
draw_battle_scene(war, arch, mag, boss)
print(f"当前:第 {round_count} 回合")
time.sleep(0.8)
# 我方存活角色依次攻击BOSS
if war.alive:
war.attack(boss)
time.sleep(0.6)
if arch.alive:
arch.attack(boss)
time.sleep(0.6)
if mag.alive:
mag.attack(boss)
time.sleep(0.6)
# BOSS战败,胜利
if not boss.alive:
clear_screen()
draw_battle_scene(war, arch, mag, boss)
print("\n🎉 怪物BOSS被击倒!我方全员胜利!")
break
# BOSS随机挑选一名存活队友反击
alive_team = []
if war.alive: alive_team.append(war)
if arch.alive: alive_team.append(arch)
if mag.alive: alive_team.append(mag)
hit_target = random.choice(alive_team)
boss.attack(hit_target)
time.sleep(0.8)
# 我方全部阵亡,失败
if not war.alive and not arch.alive and not mag.alive:
clear_screen()
draw_battle_scene(war, arch, mag, boss)
print("\n💀 我方所有角色全部倒下,战斗失败!")
break
round_count += 1
time.sleep(1)
# 启动游戏
if __name__ == "__main__":
start_battle()

2025010124 胡鑫
连连看
# 导入所需库 import cv2 import numpy as np import os # ===================== 1. 图片加载与合法性校验 ===================== # 图片路径(确保图片和代码放在同一文件夹) img_path = "lianliankan.jpg" # 判断文件是否存在 if not os.path.exists(img_path): print(f"❌ 图片不存在!绝对路径:{os.path.abspath(img_path)}") exit() # 使用OpenCV读取图片 img = cv2.imread(img_path) if img is None: print("❌ 图片加载失败,请检查文件是否损坏或格式异常!") exit() print("✅ 图片加载成功!") # 展示原始图片 cv2.imshow("原图", img) print("按任意键开始连连看配对模拟...") cv2.waitKey(0) cv2.destroyAllWindows() # ===================== 2. 初始化绘图画布 ===================== # 复制原图,避免修改原始图像 work_img = img.copy() # 获取图像高度、宽度 h, w = work_img.shape[:2] # ===================== 3. 随机生成两个点位(模拟点击格子) ===================== # 生成随机坐标 (x, y) p1 = (np.random.randint(0, w), np.random.randint(0, h)) p2 = (np.random.randint(0, w), np.random.randint(0, h)) # 提取两个点位的像素颜色(OpenCV 为 BGR 格式) color1 = work_img[p1[1], p1[0]] color2 = work_img[p2[1], p2[0]] # 在选中位置绘制红色实心圆点做标记 cv2.circle(work_img, p1, 5, (0, 0, 255), -1) cv2.circle(work_img, p2, 5, (0, 0, 255), -1) # ===================== 4. 颜色比对,判断配对结果 ===================== if np.array_equal(color1, color2): print("✅ 配对成功!两点颜色相同") # 配对成功,绘制绿色连线 cv2.line(work_img, p1, p2, (0, 255, 0), 2) else: print("❌ 配对失败!两点颜色不同") # ===================== 5. 展示最终结果 ===================== cv2.imshow("连连看配对结果", work_img) cv2.waitKey(0) cv2.destroyAllWindows()

2025010125 刘芮孜
学生管理系统
class StudentManager: def __init__(self): # 属性:存储全部学生数据,实例初始化自带空列表 self.student_list = [] # 1.添加学生(方法) def add_student(self): sid = input("输入学生学号:") # 查重 for stu in self.student_list: if stu["sid"] == sid: print("该学号已存在,添加失败!") return name = input("输入姓名:") age = input("输入年龄:") clazz = input("输入班级:") self.student_list.append({"sid": sid, "name": name, "age": age, "clazz": clazz}) print("✅ 添加成功") # 2.删除学生 def del_student(self): sid = input("输入要删除学生的学号:") for idx, stu in enumerate(self.student_list): if stu["sid"] == sid: del self.student_list[idx] print("✅ 删除完成") return print("❌ 未找到该学生") #3.修改信息 def modify_student(self): sid = input("输入要修改的学号:") for stu in self.student_list: if stu["sid"] == sid: new_name = input("新姓名(回车不修改):") or stu["name"] new_age = input("新年龄(回车不修改):") or stu["age"] new_clazz = input("新班级(回车不修改):") or stu["clazz"] stu["name"] = new_name stu["age"] = new_age stu["clazz"] = new_clazz print("✅ 修改成功") return print("❌ 查无此人") #4.查找学生 def search_student(self): key = input("输入学号/姓名查询:") res = [s for s in self.student_list if key in s["sid"] or key in s["name"]] if not res: print("无匹配信息") return print(f"{'学号':<8}{'姓名':<6}{'年龄':<6}{'班级':<8}") for s in res: print(f"{s['sid']:<8}{s['name']:<6}{s['age']:<6}{s['clazz']:<8}") #5.展示全部 def show_all(self): if not self.student_list: print("暂无学生数据") return print(f"{'学号':<8}{'姓名':<6}{'年龄':<6}{'班级':<8}") for s in self.student_list: print(f"{s['sid']:<8}{s['name']:<6}{s['age']:<6}{s['clazz']:<8}") #菜单 def menu(self): while True: print("\n====学生管理系统====") print("1新增 | 2删除 |3修改 |4查询 |5全部 |0退出") opt = input("请输入序号:") if opt == "1": self.add_student() elif opt == "2": self.del_student() elif opt == "3": self.modify_student() elif opt == "4": self.search_student() elif opt == "5": self.show_all() elif opt == "0": print("程序退出") break else: print("输入有误!") # 实例化:用类创建一个管理系统对象 if __name__ == "__main__": manage = StudentManager() manage.menu()

2025010127 刘杨龙
import tkinter as tk class LineDrawApp: def __init__(self, root): self.root = root self.canvas = tk.Canvas(root, bg="white", width=800, height=600) self.canvas.pack(fill=tk.BOTH, expand=True) self.start_x = None self.start_y = None self.temp_line = None # 拖动时预览虚线 # 绑定鼠标事件 self.canvas.bind("<ButtonPress-1>", self.mouse_down) self.canvas.bind("<B1-Motion>", self.mouse_move) self.canvas.bind("<ButtonRelease-1>", self.mouse_up) self.canvas.bind("<Button-3>", self.clear_all) def mouse_down(self, event): # 起点 self.start_x, self.start_y = event.x, event.y self.temp_line = None def mouse_move(self, event): # 拖动实时预览虚线 if self.temp_line: self.canvas.delete(self.temp_line) self.temp_line = self.canvas.create_line( self.start_x, self.start_y, event.x, event.y, fill="gray", dash=(4, 2) ) def mouse_up(self, event): # 松手删除预览线,绘制实线直线 if self.temp_line: self.canvas.delete(self.temp_line) self.canvas.create_line( self.start_x, self.start_y, event.x, event.y, fill="black", width=2 ) self.start_x = self.start_y = None def clear_all(self, event): # 右键清空画布 self.canvas.delete(tk.ALL) if __name__ == "__main__": win = tk.Tk() win.title("拖拽绘制直线") app = LineDrawApp(win) win.mainloop()

2025010128 贾姝慧
礼花绽放
import turtle # 导入海龟绘图库 import random # 导入随机数库 turtle.bgcolor("black") # 设置画布背景为黑色 t = turtle.Turtle() # 创建画笔对象t t.speed(0) # 画笔最快速度(0最快,1~10变快) t.hideturtle() # 隐藏画笔箭头 colors = ["red", "orange", "yellow", "green", "blue", "purple", "white"] # 定义颜色列表 def firework(x, y): # 定义烟花函数,x,y是鼠标点击坐标 t.penup() # 抬笔,移动不留线 t.goto(x, y) # 画笔移动到鼠标点击位置 t.pendown() # 落笔,开始绘图 t.color(random.choice(colors)) # 随机选一种颜色 for _ in range(50): # 循环50次画出烟花射线 t.forward(120) # 向前走120像素 t.backward(120) # 退回原点 t.right(15) # 右转15度 turtle.onscreenclick(firework) # 鼠标点击画布触发烟花函数 turtle.done() # 保持画布不关闭

2025010130任鸿杰
坦克
import pygame
from pygame.locals import *
import sys
def play_tank():
pygame.init()
width, height = 600, 400
speed = [1, 1]
color_bg = (255, 255, 255)
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('自由移动的坦克')
# 自建小坦克Surface,不用文件
tank_size = (32, 32)
tank_image = pygame.Surface(tank_size)
tank_image.fill((50, 70, 30))
# 画炮管
pygame.draw.rect(tank_image, (20, 20, 20), (12, 0, 8, 18))
tank_rect = tank_image.get_rect()
fpsClock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
tank_rect = tank_rect.move(speed)
if tank_rect.left < 0 or tank_rect.right > width:
speed[0] = -speed[0]
if tank_rect.top < 0 or tank_rect.bottom > height:
speed[1] = -speed[1]
screen.fill(color_bg)
screen.blit(tank_image, tank_rect)
pygame.display.update()
fpsClock.tick(50)
if __name__ == '__main__':
play_tank()

2025010131 董玥卓
搞一个销量表
from openpyxl import load_workbook # 文件名和表格名完全对应:sales.xlsx wb = load_workbook("sales.xlsx") ws = wb.active # 张三 print("===== 张三 销售数据 =====") print(f"3月:{ws[2][1].value} 件,4月:{ws[2][2].value} 件,5月:{ws[2][3].value} 件") # 李四 print("\n===== 李四 销售数据 =====") print(f"3月:{ws[3][1].value} 件,4月:{ws[3][2].value} 件,5月:{ws[3][3].value} 件") # 王二 print("\n===== 王二 销售数据 =====") print(f"3月:{ws[4][1].value} 件,4月:{ws[4][2].value} 件,5月:{ws[4][3].value} 件")

2025010132 李佳雨
图像描边
import cv2 import numpy as np # 你的图片文件名 img_name = "1.jpg" # 读取图片 img = cv2.imread(img_name) if img is None: print("未找到图片,请核对名称!") else: # 1. 先缩小图片(这里是关键,你可以改 scale 调整大小) scale = 0.5 # 0.5 就是缩小到原来的 50%,0.3就是30%,越大越清晰、越大 width = int(img.shape[1] * scale) height = int(img.shape[0] * scale) img_resized = cv2.resize(img, (width, height), interpolation=cv2.INTER_AREA) # 2. 描边处理 gray = cv2.cvtColor(img_resized, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (3, 3), 0) edge = cv2.Canny(blur, 50, 150) # 3. 显示和保存 cv2.imshow("原图", img_resized) cv2.imshow("描边效果", edge) cv2.imwrite("描边成品.png", edge) print("描边图片已保存为 描边成品.png") cv2.waitKey(0) cv2.destroyAllWindows()


浙公网安备 33010602011771号