25级第四次实验报告

2025010089
2025010090  
2025010091
2025010092  1
2025010093  1
2025010094  1
2025010095  1
2025010096  1
2025010097  1
2025010098  1
2025010099  1
2025010100  
2025010101 1
2025010102  1
2025010103  
2025010104  1
2025010105  
2025010106  
2025010107  1
2025010108  
2025010109  1
2025010110  
2025010112  1
2025010113  1
2025010114  1
2025010115  1
2025010117
2025010118
2025010119
2025010120  
2025010121  1
2025010122  1
2025010124
2025010125  1
2025010126  
2025010127  
2025010128  1
2025010130  1
2025010131  1
2025010132  1
   

 

 

2025010089张静文

转换账单罗马数字为中文

# 账单数字转中文大写
def num2chinese(n):
    digit = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
    unit = ['','拾','佰','仟','万','拾','佰','仟','亿']
    s = str(n)
    res, zero = '', False
    for i, c in enumerate(s):
        num = int(c)
        pos = len(s)-i-1
        if num != 0:
            if zero:
                res += digit[0]
            res += digit[num] + unit[pos]
            zero = False
        else:
            if pos == 4:
                res += '万'
                zero = False
            else:
                zero = True
    return res

# ———— 在这里改你的账单数字 ————
if __name__ == '__main__':
    money = 9999 # 把这里改成你的数字
    print(num2chinese(money))

屏幕截图 2026-05-16 133213

 

2025030091张译心

物理题单位中文转英文

def unit_convert(text):
    # 先去掉多余空格,方便匹配
    text = text.replace(" ", "").replace(" ", "")
    # 长单位词优先,避免被短词提前替换
    dic = {
        "米每秒": "m/s",
        "千米每小时": "km/h",
        "米": "m",
        "千米": "km",
        "厘米": "cm",
        "毫米": "mm",
        "秒": "s",
        "分钟": "min",
        "小时": "h",
        "千克": "kg",
        "克": "g",
        "摄氏度": "℃",
        "牛顿": "N",
        "帕斯卡": "Pa",
        "焦耳": "J",
        "瓦特": "W",
        "立方米": "m³",
        "升": "L"
    }
    for cn, en in dic.items():
        text = text.replace(cn, en)
    return text

# 输入并转换
ques = input("粘贴物理题:")
result = unit_convert(ques)
print("转换后:", result)

image

 2025010092朱翔鸽

绘制月牙图

import turtle as t

t.screensize(400,400,'black')
t.shape('turtle')
t.turtlesize(3,3,3)
t.color('green')
t.pu()
t.dot(100,'silver')
t.fd(20)
t.dot(90,'black')
t.hideturtle()   # 隐藏小乌龟
t.done()

屏幕截图 2026-05-22 175917

 

 

2025010093 惠盾

import tkinter as tk
import random

# 创建主窗口
root = tk.Tk()
root.title("简易弹球游戏")
root.geometry("600x500")
root.resizable(False, False)

# 画布
canvas = tk.Canvas(root, width=600, height=500, bg="#000000")
canvas.pack()

# 挡板参数
paddle_width = 100
paddle_height = 15
paddle_x = 250
paddle_y = 460
paddle = canvas.create_rectangle(
    paddle_x, paddle_y,
    paddle_x + paddle_width, paddle_y + paddle_height,
    fill="#00BFFF"
)

# 小球参数
ball_r = 12
ball_x = 300
ball_y = 200
speed_x = random.choice([-3, 3])
speed_y = 2
ball = canvas.create_oval(
    ball_x - ball_r, ball_y - ball_r,
    ball_x + ball_r, ball_y + ball_r,
    fill="#FF4444"
)

# 分数
score = 0
score_text = canvas.create_text(60, 30, text=f"分数:{score}", fill="white", font=("微软雅黑", 16))

# 左移挡板
def move_left(event):
    global paddle_x
    if paddle_x > 0:
        paddle_x -= 7
        canvas.coords(paddle, paddle_x, paddle_y, paddle_x + paddle_width, paddle_y + paddle_height)

# 右移挡板
def move_right(event):
    global paddle_x
    if paddle_x < 600 - paddle_width:
        paddle_x += 7
        canvas.coords(paddle, paddle_x, paddle_y, paddle_x + paddle_width, paddle_y + paddle_height)

# 绑定方向键
root.bind("<Left>", move_left)
root.bind("<Right>", move_right)

# 游戏主逻辑
def game_loop():
    global ball_x, ball_y, speed_x, speed_y, score
    ball_x += speed_x
    ball_y += speed_y

    # 左右边界反弹
    if ball_x - ball_r <= 0 or ball_x + ball_r >= 600:
        speed_x = -speed_x
    # 顶部反弹
    if ball_y - ball_r <= 0:
        speed_y = -speed_y

    # 挡板碰撞
    if ball_y + ball_r >= paddle_y and paddle_x < ball_x < paddle_x + paddle_width:
        speed_y = -speed_y
        score += 5
        canvas.itemconfig(score_text, text=f"分数:{score}")

    # 游戏结束
    if ball_y + ball_r >= 500:
        canvas.create_text(300, 250, text="游戏结束!", fill="red", font=("微软雅黑", 30))
        return

    # 更新小球位置
    canvas.coords(ball, ball_x - ball_r, ball_y - ball_r, ball_x + ball_r, ball_y + ball_r)
    root.after(15, game_loop)

# 启动游戏
game_loop()
root.mainloop()

屏幕截图 2026-05-20 115522

 

2025010094谢润泽

# 导入Python自带的画图工具(不用额外安装)
import turtle
import random

# 1. 创建画布和画笔
screen = turtle.Screen()
screen.title("漂亮的烟花")
screen.bgcolor("black")  # 黑色背景,烟花更好看
pen = turtle.Turtle()
pen.speed(0)  # 最快速度画画
pen.hideturtle()  # 隐藏画笔,只看烟花


# 2. 定义画烟花的函数(新手也能看懂)
def draw_firework(x, y):
    # 随机选烟花颜色
    r = random.random()
    g = random.random()
    b = random.random()
    pen.color(r, g, b)

    # 把画笔移到点击的位置
    pen.penup()
    pen.goto(x, y)
    pen.pendown()

    # 画烟花(一圈射线)
    for _ in range(36):
        pen.forward(100)
        pen.backward(100)
        pen.right(10)


# 3. 绑定鼠标点击:点哪里,哪里放烟花
turtle.onscreenclick(draw_firework)

# 4. 保持窗口不关闭
turtle.done()

屏幕截图 2026-05-19 215657

2025010095徐雨轩

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(projection='3d')


t = np.linspace(0, 8*np.pi, 1000)
z = np.linspace(0, 12, 1000)
x = 2 * np.cos(t)
y = 2 * np.sin(t)


ax.plot(x, y, z, color='blue', linewidth=2)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('三维螺旋上升线')

plt.show()

屏幕截图 2026-05-19 213415

 

2025010096刘加鑫

import tkinter as tk
import random

# 主窗口
root = tk.Tk()
root.title("子弹打木块")
root.geometry("600x400")
cv = tk.Canvas(root, bg="white")
cv.pack(fill=tk.BOTH, expand=True)

# 全局变量
block = None
bullet_list = []
block_x = 280
block_y = 50
block_speed = 3

# 创建移动木块
def create_block():
    global block
    block = cv.create_rectangle(block_x, block_y, block_x+40, block_y+30, fill="red")

# 木块自动左右移动
def move_block():
    global block_x, block_speed
    block_x += block_speed
    if block_x <= 10 or block_x >= 550:
        block_speed *= -1
    cv.coords(block, block_x, block_y, block_x+40, block_y+30)
    root.after(20, move_block)

# 鼠标点击发射子弹
def fire_bullet(event):
    x = event.x
    y = event.y
    # 创建子弹小圆点
    bullet = cv.create_oval(x-3, y-3, x+3, y+3, fill="blue")
    bullet_list.append([bullet, x, y])

# 子弹向上飞行 + 碰撞检测
def bullet_run():
    del_list = []
    block_pos = cv.coords(block)
    bx1, by1, bx2, by2 = block_pos
    for idx, (bul, x, y) in enumerate(bullet_list):
        new_y = y - 8
        cv.coords(bul, x-3, new_y-3, x+3, new_y+3)
        bullet_list[idx][2] = new_y
        # 碰撞判断
        if bx1 < x < bx2 and by1 < new_y < by2:
            cv.delete(bul)
            cv.delete(block)
            root.title("打中啦!")
            del_list.append(idx)
        # 飞出屏幕删除
        if new_y < 0:
            del_list.append(idx)
    # 倒序删除避免下标错乱
    for i in sorted(del_list, reverse=True):
        if i < len(bullet_list):
            bullet_list.pop(i)
    root.after(30, bullet_run)

# 绑定鼠标左键发射
cv.bind("<Button-1>", fire_bullet)

# 启动游戏
create_block()
move_block()
bullet_run()
root.mainloop()

屏幕截图 2026-06-02 223139

2025010097马浩

机器人指令

import re

# 丰富的机器人指令列表
cmd_list = [
    "向左走100米",
    "向右走60米",
    "向前走200米",
    "向后走80米",
    "原地左转90度",
    "原地右转45度",
    "停止运行",
    "加速前进",
    "向上走50米",
    "向下走30米"
]

# 1. 筛选所有带行走距离的指令
walk_command = [cmd for cmd in cmd_list if "走" in cmd and "米" in cmd]
print("筛选出行走类指令:")
for c in walk_command:
    print(c)

# 2. 正则提取每条指令的方向 + 距离
print("\n拆分方向和距离信息:")
pattern = re.compile(r"(向左|向右|向前|向后|向上|向下)\s*走\s*(\d+)\s*米")
for cmd in walk_command:
    res = pattern.search(cmd)
    if res:
        direct = res.group(1)
        distance = res.group(2)
        print(f"指令:{cmd} → 方向:{direct},距离:{distance}米")

屏幕截图 2026-06-02 215914

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2025010098韩晓媛

列表内容到文件

import csv#创建.csv格式文件
data_list=[
    ["姓名", "年龄", "城市"],
    ["张三", 20, "北京"],
    ["李四", 22, "上海"],
    ["王五", 19, "广州"],
    ["赵六", 25, "浙江"]
]
#创建文件,“W”是写入模式,“newline”是解决空行问题,“utf-8-sig”解决乱码问题
with open("Excel文件.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer=csv.writer(f)#创建一个写入器对象
    writer.writerows(data_list)#批量写入
print("导出成功!")

屏幕截图 2026-05-19 211541

 

2025010099张嘉诚

停车场计费系统

from datetime import datetime
import math


def get_car_type(plate):
    if len(plate) < 2:
        return "未知车型"
    end_part = plate[2:]
    if len(end_part) == 5:
        return "油车"
    elif len(end_part) == 6:
        return "电车"
    return "未知车型"


def count_hours(in_time_str, out_time_str):
    time_format = "%Y-%m-%d %H:%M"
    in_time = datetime.strptime(in_time_str.strip(), time_format)
    out_time = datetime.strptime(out_time_str.strip(), time_format)
    second_diff = (out_time - in_time).total_seconds()
    hour_num = second_diff / 3600
    return math.ceil(hour_num)


def count_fee(car_type, hour):
    if car_type == "油车":
        return hour * 2
    elif car_type == "电车":
        return hour * 1
    return 0


def main():
    print("=======停车场计费系统=======")
    print("车型规则:车牌后5位=油车  后6位=电车")
    print("收费标准:油车2元/小时  电车1元/小时")
    print("计费规则:不足一小时按一小时计算")
    print("时间格式示例:2026-05-19 08:30\n")

    while True:
        car_plate = input("请输入车牌号(输入q退出):")
        if car_plate.upper() == "Q":
            print("系统已退出!")
            break

        car_type = get_car_type(car_plate)
        if car_type == "未知车型":
            print("❌ 车牌格式错误,无法识别车型!(去掉前两位后长度不是5或6位)\n")
            continue

        try:
            enter = input("请输入入场时间:")
            leave = input("请输入出场时间:")
            park_hour = count_hours(enter, leave)
            if park_hour <= 0:
                print("❌ 出场时间不能早于入场时间!\n")
                continue
        except ValueError as e:
            print(f"❌ 时间格式错误!必须填写:年-月-日 空格 时:分(冒号用英文半角)\n错误详情:{e}\n")
            continue

        money = count_fee(car_type, park_hour)
        print(f"车辆类型:{car_type}")
        print(f"计费时长:{park_hour} 小时")
        print(f"停车费用:{money} 元\n")


if __name__ == "__main__":
    main()

屏幕截图 2026-05-19 235324

 2025010100霍延萌

判断数学式子是否正确

def check_brackets(expression):
    # 用栈来保存左括号
    stack = []
    # 右括号 -> 对应左括号 的映射
    bracket_map = {')': '(', ']': '[', '}': '{'}

    for char in expression:
        # 如果是左括号,入栈
        if char in bracket_map.values():
            stack.append(char)

        # 如果是右括号
        elif char in bracket_map:
            # 栈为空,说明没有对应的左括号
            if not stack:
                return False
            # 栈顶不是匹配的左括号,不匹配
            if stack.pop() != bracket_map[char]:
                return False

    # 最后栈必须为空,才算全部匹配
    return len(stack) == 0


# 主程序:输入式子并判断
if __name__ == "__main__":
    print("=== 括号成对判断工具 ===")
    math_expr = input("请输入数学式子:")

    if check_brackets(math_expr):
        print("✅ 括号完全成对,格式正确!")
    else:
        print("❌ 括号不成对或嵌套错误!")

  屏幕截图 2026-05-31 231407

 

2025010101袁泉

登陆网站界面

import tkinter as tk
from tkinter import messagebox

# 记录错误次数
error_count = 0
# 设定最大尝试次数
max_times = 3

def check_login():
    global error_count
    # 获取输入的账号密码
    username = entry_user.get().strip()
    pwd = entry_pwd.get().strip()
    
    # 正确账号密码(可自行修改)
    right_user = "admin"
    right_pwd = "123456"
    
    if username == right_user and pwd == right_pwd:
        messagebox.showinfo("成功", "登录成功!")
        root.destroy()  # 登录成功关闭窗口
    else:
        error_count += 1
        remain = max_times - error_count
        if error_count >= max_times:
            messagebox.showerror("错误", "输错3次,程序自动退出!")
            root.destroy()
        else:
            messagebox.showerror("失败", f"账号或密码错误!还剩{remain}次机会")

# 创建主窗口
root = tk.Tk()
root.title("登录窗口")
root.geometry("300x200")  # 窗口大小

# 账号标签和输入框
label_user = tk.Label(root, text="账号:")
label_user.pack(pady=5)
entry_user = tk.Entry(root)
entry_user.pack()

# 密码标签和输入框
label_pwd = tk.Label(root, text="密码:")
label_pwd.pack(pady=5)
entry_pwd = tk.Entry(root, show="*")  # 密码隐藏
entry_pwd.pack()

# 登录按钮
btn_login = tk.Button(root, text="登录", command=check_login)
btn_login.pack(pady=15)

# 主循环
root.mainloop()

屏幕截图 2026-05-16 123200

  

 2025010102沈玉婷

把物理题中的中文单位换成英文单位

# 1. 输入一道物理题目
ti_mu = input("请输入物理题目:")

# 2. 把中文单位替换成英文单位
ti_mu = ti_mu.replace("米", "m")
ti_mu = ti_mu.replace("秒", "s")
ti_mu = ti_mu.replace("千克", "kg")
ti_mu = ti_mu.replace("千米", "km")
ti_mu = ti_mu.replace("小时", "h")

# 3. 输出转换后的题目
print("转换后题目:")
print(ti_mu)

屏幕截图 2026-05-17 220748

2025010104许乐乐

设计导弹命中率,统计出和的命中率

 

# 手动输入设置每枚导弹命中率,计算整体命中概率
print("===== 导弹命中率计算系统 =====")
n = int(input("请输入导弹数量:"))
hit_list = []

# 逐个自定义输入命中率
for i in range(1, n + 1):
    p = float(input(f"请输入第{i}枚导弹命中率(输入0-1小数):"))
    hit_list.append(p)

# 计算全部未命中概率
all_miss = 1.0
for rate in hit_list:
    all_miss *= (1 - rate)

# 总命中率
total_hit = 1 - all_miss

# 输出结果
print("\n----- 录入完成 -----")
for idx, r in enumerate(hit_list, 1):
    print(f"第{idx}枚导弹命中率:{r*100:.1f}%")
print(f"\n全部导弹齐射总命中率:{total_hit*100:.2f}%")

 

image

 2025010107孙瑞妍

# 读取 text.txt 文件
with open("text.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()

while True:
    try:
        r = int(input("行:")) - 1
        c = int(input("列:")) - 1
        print(lines[r][c])
    except:
        print("超出范围")

屏幕截图 2026-05-20 215320

 

2025010097马浩

机器人指令

import re

# 丰富的机器人指令列表
cmd_list = [
    "向左走100米",
    "向右走60米",
    "向前走200米",
    "向后走80米",
    "原地左转90度",
    "原地右转45度",
    "停止运行",
    "加速前进",
    "向上走50米",
    "向下走30米"
]

# 1. 筛选所有带行走距离的指令
walk_command = [cmd for cmd in cmd_list if "走" in cmd and "米" in cmd]
print(walk_command)
print("筛选出行走类指令:")
for c in walk_command:
    print(c)

# 2. 正则提取每条指令的方向 + 距离
print("\n拆分方向和距离信息:")
pattern = re.compile(r"(向左|向右|向前|向后|向上|向下)\s*走\s*(\d+)\s*米")
for cmd in walk_command:
    res = pattern.search(cmd)
    if res:
        direct = res.group(1)
        distance = res.group(2)
        print(f"指令:{cmd} → 方向:{direct},距离:{distance}米")

屏幕截图 2026-05-19 192556

 2025010109 黄帅豪

联网发送

客户端:
import socket
import tkinter as tk
import tkinter.messagebox
from threading import Thread


# 创建tcp客户端
class TcpClientSocket:
    def __init__(self):
        self.tcp_client_socket = None
        self.root = tk.Tk()
        self.root.title('tcp客户端')
        self.root.geometry('500x350')

        # 连接
        self.con_btn = tk.Button(self.root, text="连接服务端", width=10, command=self.connect)
        self.con_btn.place(x=100, y=20)

        # 断开连接
        self.discon_btn = tk.Button(self.root, text="断开连接", width=10, command=self.disconnect)
        self.discon_btn.place(x=300, y=20)

        # 文本输入框
        self.send_entry = tk.Entry(self.root, width=50)
        self.send_entry.place(x=50, y=80)
        # 发送消息按钮
        self.send_btn = tk.Button(self.root, text="发送消息", command=self.send)
        self.send_btn.place(x=420, y=75)

        # 消息框
        self.msg_test = tk.Text(self.root, width=70, height=16)
        self.msg_test.place(x=2, y=125)

        self.root.mainloop()

    # 连接服务端
    def connect(self):
        try:
            if self.tcp_client_socket:
                tk.messagebox.showinfo('提示', '已是连接状态')
            # 每次连接服务端就将上一次的记录清除
            self.msg_test.delete(1.0, tk.END)
            self.send_entry.delete(0, tk.END)
            # 创建客户端socket
            self.tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            # 连接,端口可以改变
            self.tcp_client_socket.connect(('127.0.0.1', 8888))
            self.msg_test.insert(tk.END, "连接到服务端, 请输入信息...\n")
        except Exception as e:
            self.msg_test.insert(tk.END, f"连接失败的原因是: {e}")

    # 发送消息
    def send(self):
        # 从输入框获取数据
        input_data = self.send_entry.get()
        self.tcp_client_socket.send(input_data.encode(encoding='utf-8'))
        self.msg_test.insert(tk.END, f"客户端:{str(input_data)}\n")
        # 使用线程,防止未响应
        receive_thread = Thread(target=self.receive, daemon=True)
        receive_thread.start()

    def receive(self):
        if self.tcp_client_socket:
            rec_msg = self.tcp_client_socket.recv(1024).decode(encoding='utf-8')
            self.msg_test.insert(tk.END, f"服务端:{str(rec_msg)}\n")

    # 断开连接
    def disconnect(self):
        if self.tcp_client_socket:
            self.send_entry.delete(0, tk.END)
            self.msg_test.insert(tk.END, "断开连接")
            self.tcp_client_socket.send('#'.encode(encoding='utf-8'))  # 发送'#‘断开连接
            self.tcp_client_socket.close()  # 关闭客户端
        else:
            tk.messagebox.showinfo('提示', '未连接到服务端')


if __name__ == '__main__':
    TcpClientSocket()
服务端:
import socket

import tkinter as tk
from threading import Thread
import tkinter.messagebox


class TcpServerSocket:
    def __init__(self):
        self.conn_socket = None
        self.tcp_server_socket = None
        self.root = tk.Tk()
        self.root.title('tcp服务端')
        self.root.geometry('500x350')

        # 连接
        self.con_btn = tk.Button(self.root, text="启动服务端", width=10, command=self.start_server)
        self.con_btn.place(x=100, y=20)

        # 接收消息
        self.status_btn = tk.Button(self.root, text="接收连接", width=10, command=self.status)
        self.status_btn.place(x=200, y=20)
        # 接收消息
        self.rev_btn = tk.Button(self.root, text="接收消息", command=self.receive)
        self.rev_btn.place(x=300, y=20)
        # 文本输入框
        self.send_entry = tk.Entry(self.root, width=50)
        self.send_entry.place(x=50, y=80)
        # 发送消息按钮
        self.send_btn = tk.Button(self.root, text="发送消息", command=self.send)
        self.send_btn.place(x=420, y=75)
        # 消息框
        self.msg_test = tk.Text(self.root, width=70, height=16)
        self.msg_test.place(x=2, y=125)
        self.root.mainloop()

    # 启动tcp服务端
    def start_server(self):
        try:
            # 每次连接服务端就将上一次的记录清除
            self.send_entry.delete(0, tk.END)
            self.msg_test.delete(1.0, tk.END)

            # 创建服务端socket
            self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.tcp_server_socket.bind(('', 8888))  # 绑定
            self.tcp_server_socket.listen(5)  # 监听的最大连接数
            self.msg_test.insert(tk.END, f"服务端启动成功!\n")
        except Exception as e:
            self.msg_test.insert(tk.END, f"启动失败的原因是: {e}")

    def status(self):
        if self.conn_socket is None:
            self.conn_socket, ip_port = self.tcp_server_socket.accept()
        elif self.conn_socket:
            self.msg_test.insert(tk.END, "客户端已连接\n")
        else:
            tk.messagebox.showinfo('提示', "客户端未连接")

    def send(self):
        try:
            input_data = self.send_entry.get()
            self.conn_socket.send(input_data.encode(encoding='utf-8'))
            self.msg_test.insert(tk.END, f"服务端:{str(input_data)}\n")
        except Exception as e:
            self.msg_test.insert(tk.END, f"发送失败的原因: {e}")

    def receive(self):
        rec_msg = self.conn_socket.recv(1024).decode(encoding='utf-8')
        print(rec_msg)
        # 获取到#断开连接
        if rec_msg == '#':
            self.conn_socket.close()
            self.tcp_server_socket.close()
            self.msg_test.insert(tk.END, f"客户端断开连接\n")
            return
        self.msg_test.insert(tk.END, f"客户端:{str(rec_msg)}\n")


if __name__ == '__main__':
    TcpServerSocket()

image

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 2025010112 王怡萱

def is_leap(year):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    return False

def get_month_days(year, month):
    month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if month == 2 and is_leap(year):
        return 29
    return month_days[month - 1]


def date_minus_day(y, m, d, minus_days):
    now_y = y
    now_m = m
    now_d = d

    for _ in range(minus_days):
        now_d -= 1
        if now_d < 1:
            now_m -= 1
            if now_m < 1:
                now_y -= 1
                now_m = 12
            now_d = get_month_days(now_y, now_m)
    return now_y, now_m, now_d


y, m, d = date_minus_day(2026, 5, 6, 10)
print(f"2026-05-06 减去10天 = {y}-{m:02d}-{d:02d}")

d926c263808130b6109e9d0ef7a1cf5f

 

 2025010113 石蕊鑫

截取对话并统计几人对话、分别说了几句话

if __name__ == "__main__":
    chat_data = """
A:大家晚上好
B:晚上好呀
A:明天有没有空
A:我有空
B:我也可以
A:那明天上午集合
C:没问题
"""
    def stat_chat(text):
        lines = text.strip().splitlines()
        res = {}
        for line in lines:
            line = line.strip()
            if not line or ":" not in line:
                continue
            name = line.split(":")[0]
            res[name] = res.get(name, 0) + 1
        return res
    result = stat_chat(chat_data)
    total_people = len(result)
    total_msg = sum(result.values())

    print("===== 群聊天统计结果 =====")
    print(f"发言总人数:{total_people} 人")
    print(f"总发言条数:{total_msg} 条")
    print("-" * 20)
    for name, count in result.items():
        print(f"{name} 说了 {count} 句话")

屏幕截图 2026-05-17 123405

 2025010114 殷佳锐

英语文章句子第一个字母大写

# 获取用户输入整篇英文
text = input("请输入英文文章:")
# 按句号分割句子
lst = text.split(".")
res = ""
# 循环给每个句子首字母大写
for s in lst:
    if s.strip() != "":
        res += s.strip().capitalize() + ". "
# 输出最终结果
print("\n转换后(每句首字母大写):")
print(res)

联想截图_20260519214944

 2025010115  康静茹

建立一个评阅表excel,输出评阅教师人数

# 自动安装并导入pandas
import subprocess
import sys

def install_pandas():
    subprocess.check_call([
        sys.executable, "-m", "pip", "install", "pandas", "openpyxl",
        "--user", "-i", "https://pypi.tuna.tsinghua.edu.cn/simple"
    ])

try:
    import pandas as pd
except ImportError:
    print("正在自动安装库...")
    install_pandas()
    import pandas as pd

# 读取Excel文件(改成你自己的文件路径)
df = pd.read_excel(r"D:\评阅表.xlsx", engine="openpyxl")

# ---------------------- 关键修改部分 ----------------------
# 假设你的表格里,评阅教师的列名是“评阅教师”,如果不是,改成你实际的列名
teacher_col = "评阅教师"  # 这里要和Excel里的列名完全一致

# 去重,获取所有不重复的教师名称
unique_teachers = df[teacher_col].dropna().unique()
# 统计人数
teacher_count = len(unique_teachers)

# 输出结果
print("===== 评阅教师统计 =====")
print(f"评阅教师总人数:{teacher_count} 人")
print("评阅教师名单:")
for idx, name in enumerate(unique_teachers, 1):
    print(f"{idx}. {name}")

局部截取_20260524_125640

2025010117  李欣栎

视频截图,截图保存到文件里

import cv2
import os

def save_video_screenshots(video_path, save_dir="video_screenshots", interval=10):
    # 创建保存截图的文件夹
    if not os.path.exists(save_dir):
        os.makedirs(save_dir)
    # 打开视频文件
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        print("无法打开视频文件,请检查路径!")
        return
    count = 0  # 截图计数器
    while True:
        ret, frame = cap.read()
        if not ret:
            break  # 视频读取结束
        # 每隔 interval 帧保存一张截图
        if count % interval == 0:
            screenshot_path = os.path.join(save_dir, f"screenshot_{count}.jpg")
            cv2.imwrite(screenshot_path, frame)
            print(f"已保存:{screenshot_path}")

        count += 1

    cap.release()
    print("视频截图完成!")

# ---------------------- 使用方法 ----------------------
# 替换成你的视频文件路径
video_file = "414d955f22100c9a287b66d49e20f7d5.MP4"
save_video_screenshots(video_file, interval=30)

2b9b3c9ebbf5f803d5af8f46112f24ae

317fd62196f4f8daf4b9c97eca23dce9

2025010118 陈影

判断各朝代诗人

#定义列表(作者,朝代)
poets= [("李白", "唐"),("杜甫", "唐"),("王维", "唐"),("白居易", "唐"),
        ("苏轼", "宋"),("辛弃疾", "宋"),("李清照", "宋"),("陆游", "宋"),
        ("陶渊明", "晋"),("曹操", "三国"), ("曹植", "三国"),("王之涣", "唐"),("王安石", "宋")]
#创建空字典
count = {}
#遍历列表
for name, dynasty in poets:
    if dynasty in count:
        count[dynasty] += 1
    else:
        count[dynasty] = 1
# 输出结果
print("各朝代诗人人数:")
for dynasty, num in count.items():
    print(f"{dynasty}代:{num}人")

image 

2025010119 淡郑雪

判断括号

def is_valid_brackets(s):
    stack = []
    # 建立右括号到左括号的映射
    mapping = {')': '(', ']': '[', '}': '{'}

    for char in s:
        # 如果是左括号,直接入栈
        if char in mapping.values():
            stack.append(char)
        # 如果是右括号
        elif char in mapping:
            # 栈为空 或 栈顶元素不匹配
            if not stack or stack.pop() != mapping[char]:
                return False
        # 其他字符(比如字母、数字)直接忽略
        else:
            continue

    # 遍历完后栈必须为空,才算全部匹配
    return len(stack) == 0


# 测试
if __name__ == "__main__":
    test_cases = [
        "()",
        "()[]{}",
        "(]",
        "([)]",
        "{[]}",
        "a(b)c[d]e{f}g",
        "((()))",
        "(()"
    ]

    for case in test_cases:
        print(f"式子 '{case}' 是否正确:{is_valid_brackets(case)}")

屏幕截图 2026-05-20 103144

 2025010121郑舒萍

把文件名中含A的复制到另一个新的文件中

import os
import shutil

# 新建目标文件夹
if not os.path.exists("a_files"):
    os.mkdir("a_files")

# 遍历当前目录的所有内容
for filename in os.listdir("."):
    # 只处理文件,跳过文件夹(比如.idea、venv这些)
    if os.path.isfile(filename):
        # 文件名包含a的文件(不区分大小写)
        if "a" in filename.lower():
            shutil.copy(filename, os.path.join("a_files", filename))

print("✅ 复制完成!所有含a的文件已放到 a_files 文件夹")

屏幕截图 2026-05-25 231508

 2025010122田昌盛

打字游戏气球爆炸

import pygame
import random

# 初始化
pygame.init()
W, H = 800, 600
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("气球打字游戏")
clock = pygame.time.Clock()

# 颜色
WHITE = (255, 255, 255)
BG_COLOR = (135, 206, 235)
BALL_COLORS = [(255, 68, 68), (68, 170, 255), (68, 221, 68), (255, 170, 0), (170, 68, 255)]
letters = "abcdefghijklmnopqrstuvwxyz"

# 字体
font = pygame.font.SysFont(None, 40)

# 气球类
class Balloon:
    def __init__(self):
        self.char = random.choice(letters)
        self.color = random.choice(BALL_COLORS)
        self.x = random.randint(30, W - 30)
        self.y = -50
        self.speed = random.uniform(2, 4)
        self.radius = 25
        self.boom = False
        self.boom_frame = 0

    def update(self):
        if not self.boom:
            self.y += self.speed
        else:
            self.boom_frame += 1

    def draw(self, surf):
        if not self.boom:
            pygame.draw.circle(surf, self.color, (int(self.x), int(self.y)), self.radius)
            text = font.render(self.char.upper(), True, WHITE)
            surf.blit(text, (self.x - 12, self.y - 15))
        else:
            # 爆炸效果
            scale = 1 + self.boom_frame * 0.2
            r = int(self.radius * scale)
            pygame.draw.circle(surf, self.color, (int(self.x), int(self.y)), r, 3)

    def is_out(self):
        return self.y > H + 20 or (self.boom and self.boom_frame > 10)

# 游戏主循环
balloons = []
spawn_timer = 0
FPS = 60

running = True
while running:
    dt = clock.tick(FPS)
    screen.fill(BG_COLOR)

    # 事件监听
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            key = pygame.key.name(event.key)
            # 匹配气球
            for b in balloons:
                if b.char == key and not b.boom:
                    b.boom = True
                    break

    # 生成气球
    spawn_timer += dt
    if spawn_timer > 1200:
        balloons.append(Balloon())
        spawn_timer = 0

    # 更新&绘制气球
    for b in balloons:
        b.update()
        b.draw(screen)

    # 移除消失/爆炸的气球
    balloons = [b for b in balloons if not b.is_out()]

    pygame.display.flip()

pygame.quit()

微信图片_20260527154644_34_35

 

2025010124 胡鑫

import turtle

# 新建绘图窗口
screen = turtle.Screen()
screen.title("路灯渐变延伸效果")
screen.bgcolor("lightblue")
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)

# 循环绘制5盏逐渐缩小、向后延伸的路灯
for n in range(5):
    size = 1 - n * 0.18   # 依次缩小
    pos_x = -200 + n * 90 # 依次右移延伸
    pos_y = -80 + n * 25  # 近低远高透视

    pen.penup()
    pen.goto(pos_x, pos_y)
    pen.pendown()

    # 画灯杆
    pen.pensize(5 * size)
    pen.pencolor("#333333")
    pen.setheading(90)
    pen.forward(70 * size)

    # 画灯臂
    pen.setheading(0)
    pen.forward(22 * size)

    # 画路灯灯头
    pen.pencolor("#ffcc00")
    pen.dot(16 * size)

# 窗口保持常驻
turtle.done()

截屏2026-05-20 10.18.26

  

2025010125  刘芮孜

筛选天气情况

print("安康近15天天气预报")
print("--------------------------")

# 安康近15天天气数据:(日期, 天气, 温度, 风向)
weather_data = [
    ("05月13日", "晴", 28, "微风"),
    ("05月14日", "多云", 26, "南风2级"),
    ("05月15日", "小雨", 22, "东风3级"),
    ("05月16日", "阴", 24, "微风"),
    ("05月17日", "晴", 29, "西风2级"),
    ("05月18日", "多云", 27, "微风"),
    ("05月19日", "雷阵雨", 23, "北风3级"),
    ("05月20日", "小雨", 21, "东风2级"),
    ("05月21日", "阴", 23, "微风"),
    ("05月22日", "晴", 28, "南风2级"),
    ("05月23日", "多云", 26, "微风"),
    ("05月24日", "晴", 30, "西风2级"),
    ("05月25日", "小雨", 22, "东风3级"),
    ("05月26日", "阴", 24, "微风"),
    ("05月27日", "晴", 29, "南风2级")
]

# 只提取日期和天气,去掉“天气预报”字样
for t, w, _, _ in weather_data:
    print(f"{t}: {w}")

 天气

 2025010127 刘杨龙

import turtle
import random

# 设置画布
t = turtle.Turtle()
t.speed(0)
turtle.bgcolor("black")
colors = ["red", "yellow", "blue", "pink", "orange", "white"]

# 绘制单朵烟花
def firework(x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()
    t.color(random.choice(colors))
    # 放射线条模拟烟花
    for _ in range(36):
        t.forward(80)
        t.backward(80)
        t.right(10)

# 连续生成随机位置烟花
for _ in range(8):
    x = random.randint(-300, 300)
    y = random.randint(-200, 200)
    firework(x, y)

t.hideturtle()
turtle.done()

屏幕截图 2026-06-07 213943

 

 

 

2025010128  贾姝慧

加载图

import tkinter

# 创建窗口
root = tkinter.Tk()
root.title("加载图")
root.geometry("300x180")

# 显示文字
label = tkinter.Label(root, text="正在加载", font=("黑体", 40))
label.pack(expand=True)

# 转圈符号
chars = ["|", "/", "-", "\\"]
index = 0

def load():
    global index
    # 更新文字
    label.config(text=f"正在加载 {chars[index]}")
    index += 1
    # 循环
    if index >= 4:
        index = 0
    # 定时调用
    root.after(150, load)

# 启动
load()
root.mainloop()

屏幕截图 2026-05-19 223450

2025010130  任鸿杰

车票筛选窗口

import tkinter as tk
from tkinter import ttk

# 模拟车次数据
train_data = [
    {"train_no": "G101", "start": "北京", "end": "上海", "start_time": "08:00", "arrive_time": "13:20"},
    {"train_no": "D202", "start": "南京", "end": "杭州", "start_time": "09:10", "arrive_time": "11:05"},
    {"train_no": "G103", "start": "北京", "end": "广州", "start_time": "10:30", "arrive_time": "18:40"},
    {"train_no": "K501", "start": "西安", "end": "成都", "start_time": "14:00", "arrive_time": "次日06:20"},
    {"train_no": "G105", "start": "上海", "end": "北京", "start_time": "15:20", "arrive_time": "20:10"},
    {"train_no": "D305", "start": "南京", "end": "苏州", "start_time": "07:30", "arrive_time": "08:45"}
]


def filter_train():
    """筛选车次核心逻辑"""
    start_city = entry_start.get().strip()
    end_city = entry_end.get().strip()
    s_time = entry_stime.get().strip()
    e_time = entry_etime.get().strip()

    # 清空表格
    tree.delete(*tree.get_children())

    # 遍历筛选
    for train in train_data:
        # 出发地筛选
        if start_city and train["start"] != start_city:
            continue
        # 目的地筛选
        if end_city and train["end"] != end_city:
            continue
        # 出发时间段筛选
        train_st = train["start_time"]
        if s_time and e_time:
            if not (s_time <= train_st <= e_time):
                continue

        # 插入结果
        tree.insert("", "end", values=(
            train["train_no"], train["start"], train["end"],
            train["start_time"], train["arrive_time"]
        ))


# 创建主窗口
root = tk.Tk()
root.title("车次筛选系统")
root.geometry("750x450")

# 布局组件
tk.Label(root, text="出发地:", font=("微软雅黑", 10)).place(x=30, y=20)
entry_start = tk.Entry(root, width=15, font=("微软雅黑", 10))
entry_start.place(x=90, y=20)

tk.Label(root, text="目的地:", font=("微软雅黑", 10)).place(x=230, y=20)
entry_end = tk.Entry(root, width=15, font=("微软雅黑", 10))
entry_end.place(x=290, y=20)

tk.Label(root, text="起始时段:", font=("微软雅黑", 10)).place(x=30, y=60)
entry_stime = tk.Entry(root, width=12, font=("微软雅黑", 10))
entry_stime.place(x=90, y=60)

tk.Label(root, text="结束时段:", font=("微软雅黑", 10)).place(x=200, y=60)
entry_etime = tk.Entry(root, width=12, font=("微软雅黑", 10))
entry_etime.place(x=260, y=60)

# 筛选按钮
btn_search = tk.Button(root, text="开始筛选", command=filter_train,
                       bg="#1E90FF", fg="white", font=("微软雅黑", 10))
btn_search.place(x=400, y=40)

# 结果表格
cols = ("车次", "出发站", "到达站", "发车时间", "到达时间")
tree = ttk.Treeview(root, columns=cols, show="headings", height=15)
for col in cols:
    tree.heading(col, text=col)
    tree.column(col, width=130, anchor="center")
tree.place(x=20, y=100)

root.mainloop()

屏幕截图 2026-06-02 232302

2025010131   董玥卓

红楼梦切词

# 红楼梦简易分词(纯内置库,无第三方依赖)
def simple_cut(text):
    # 定义红楼高频断词符号、标点
    punct = ",。、;:?!‘’“”()《》【】……——\n\r\t "
    words = []
    temp = ""
    # 逐字符遍历分词
    for char in text:
        if char in punct:
            if temp:
                words.append(temp)
                temp = ""
        else:
            temp += char
    if temp:
        words.append(temp)
    return words

# 1. 模拟红楼梦文本(可替换为完整小说文本)
honglou_text = """
满纸荒唐言,一把辛酸泪。
都云作者痴,谁解其中味。
开辟鸿蒙,谁为情种?都只为风月情浓。
"""

# 2. 执行分词
result = simple_cut(honglou_text)

# 3. 输出结果
print("分词结果:")
print(result)

屏幕截图 2026-05-26 222734

 2025010132  李佳雨

论文指导表

# 论文指导表分配生成代码
student_total = 40    # 学生总数
reviewer_total = 10   # 评阅老师总数
stu_per_reviewer = 4  # 每位评阅老师负责学生数

print("学生编号\t指导老师\t评阅老师")
print("-" * 30)

for stu_id in range(1, student_total + 1):
    # 计算对应评阅老师编号
    reviewer_no = (stu_id - 1) // stu_per_reviewer + 1
    # 编号补零格式化
    stu_code = f"S{stu_id:02d}"
    tutor_code = f"T{stu_id:02d}"
    reviewer_code = f"R{reviewer_no:02d}"
    
    print(f"{stu_code}\t\t{tutor_code}\t\t{reviewer_code}")

屏幕截图 2026-05-26 223532

 

posted @ 2026-06-17 21:33  szmtjs10  阅读(4)  评论(0)    收藏  举报