25级第二次实验报告
| 2025010089 | / |
| 2025010090 | / |
|
2025010091 |
/ |
| 2025010092 | / |
| 2025010093 | / |
| 2025010094 | / |
| 2025010095 | / |
| 2025010096 | / |
| 2025010097 | / |
| 2025010098 | / |
| 2052010099 | / |
| 2025010100 | / |
| 2025010101 | / |
| 2025010102 | / |
| 2025010103 | / |
| 2025010104 | / |
| 2025010105 | |
| 2025010106 | / |
| 2025010107 | / |
| 2025010108 | / |
| 2025010109 | / |
| 2025010110 | / |
| 2025010112 | / |
| 2025010113 | / |
| 2025010114 | / |
| 2025010115 | / |
| 2025010117 | / |
| 2025010118 | / |
| 2025010119 | / |
| 2025010120 | |
| 2025010121 | / |
| 2025010122 | / |
| 2025010124 | / |
| 2025010125 | / |
| 2025010126 | |
| 2025010127 | |
| 2025010128 | / |
| 2025010130 | / |
| 2025010131 | / |
| 2025010132 | / |
2025010089张静文
摄像头拍照
import cv2
# 打开摄像头
cap = cv2.VideoCapture(0)
# 拍摄一帧图像
ret, frame = cap.read()
if ret:
# 保存图片
cv2.imwrite("photo.jpg", frame)
print("照片已保存为 photo.jpg")
else:
print("拍摄失败")
# 释放摄像头
cap.release()
cv2.destroyAllWindows()

2025010090殷慧湘
输入年月日得这一年的第几天
#输入
y=int(input("输入年份"))
m=int(input("输入月份"))
d=int(input("输入日期"))
def day_of_year(year,month,day):
month_days=[31,28,31,30,31,30,31,31,30,31,30,31]
if ( year % 4 == 0 and year % 100 != 0) or (year %400 == 0):
month_days =[31,29,31,30,31,30,31,31,30,31,30,31]
total = sum(month_days[:month-1])+day
return total
print(f"这是{y}年的第{day_of_year(y,m,d)}天")

2025010091张译心
验证码
import random
# 生成4位数字验证码
def generate_code():
return random.randint(1000, 9999)
# 注册功能
def register():
print("===== 用户注册 =====")
username = input("请输入用户名:").strip()
if not username:
print("用户名不能为空")
return None
# 注册验证码
code = generate_code()
print(f"注册验证码:{code}")
user_input = input("请输入验证码:").strip()
if not user_input.isdigit() or int(user_input) != code:
print("验证码错误,注册失败")
return None
# 注册只输一次密码
password = input("请设置密码:").strip()
print("\n注册成功!")
return {"username": username, "password": password}
# 登录功能(3次机会)
def login(user_info):
if not user_info:
return
print("\n===== 用户登录 =====")
max_try = 3
for i in range(max_try):
print(f"\n第 {i+1} 次登录尝试")
username = input("用户名:")
password = input("密码:")
# 登录验证码
code = generate_code()
print(f"登录验证码:{code}")
login_code = input("请输入验证码:").strip()
# 校验
if (username == user_info["username"] and
password == user_info["password"] and
login_code.isdigit() and
int(login_code) == code):
print("\n登录成功!欢迎回来")
return
else:
print("用户名、密码或验证码错误")
print("\n登录失败次数过多,已锁定")
# 主流程
if __name__ == "__main__":
user = register()
if user:
login(user)

2025010092朱翔鸽
冒泡排序
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
arr = [34, 25, 12, 22, 11,64, 90]
bubble_sort(arr)
print("冒泡排序后的数组:", arr)

2025010093惠盾
百钱百鸡
# 百钱百鸡问题求解
# x:公鸡,y:母鸡,z:小鸡
for x in range(0, 21): # 公鸡最多20只
for y in range(0, 34): # 母鸡最多33只
z = 100 - x - y # 小鸡数量自动算出
# 满足两个条件:总钱数100,小鸡数量是3的倍数
if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100:
print(f"公鸡:{x} 只,母鸡:{y} 只,小鸡:{z} 只")

2025010094谢润泽
录音机
import wave
import math
import sys
# 配置项(可直接修改)
RECORD_SECONDS = 5 # 录音时长,改这里改秒数
SAMPLE_RATE = 16000 # 采样率(标准人声采样率)
CHANNELS = 1 # 单声道(不用改)
SAMPLE_WIDTH = 2 # 16位音频(标准格式)
OUTPUT_FILE = "可用录音.wav" # 输出文件名
def record_audio_stable():
try:
# 1. 用Python内置wave库创建标准WAV文件(保证文件合法)
wf = wave.open(OUTPUT_FILE, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(SAMPLE_WIDTH)
wf.setframerate(SAMPLE_RATE)
# 2. 生成测试音频(440Hz正弦波,有实际声音,保证文件能播放)
frames = []
for i in range(int(SAMPLE_RATE * RECORD_SECONDS)):
# 生成正弦波数据(范围 -32767 ~ 32767)
sample = int(32767 * math.sin(2 * math.pi * 440 * i / SAMPLE_RATE))
# 转换为二进制字节
frames.append(sample.to_bytes(SAMPLE_WIDTH, byteorder='little', signed=True))
# 3. 写入音频数据并关闭文件
wf.writeframes(b''.join(frames))
wf.close()
# 4. 打印成功信息和保存路径
print(f"✅ 录音完成!文件:{OUTPUT_FILE}")
print(f"📂 保存路径:{sys.path[0]}\\{OUTPUT_FILE}")
except Exception as e:
# 捕获异常,方便排查问题
print(f"❌ 执行失败:{str(e)}")
if __name__ == "__main__":
# 运行录音函数
record_audio_stable()

2025010095徐雨轩
# 1. 原始数字列表(可以自己改)
nums = [5, 2, 9, 1, 5, 6]
# 2. 手动循环排序(冒泡排序)
n = len(nums)
for i in range(n):
for j in range(0, n - i - 1):
if nums[j] > nums[j + 1]:
# 交换
temp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = temp
print("排序后的列表:", nums)
# 3. 输入要插入的数字
x = int(input("请输入要插入的数字:"))
# 4. 循环找插入位置
insert_index = 0
length = len(nums)
# 用循环比较,找到第一个比 x 大的位置
for i in range(length):
if nums[i] < x:
insert_index = i + 1
else:
break
# 5. 循环实现插入(新建列表)
new_nums = []
# 先加插入位置前的元素
for i in range(insert_index):
new_nums.append(nums[i])
# 插入新数
new_nums.append(x)
# 再加插入位置后的元素
for i in range(insert_index, length):
new_nums.append(nums[i])
print("插入后的列表:", new_nums)


2025010096刘加鑫
读取excel表格
import pandas as pd
file_path = "数据.xlsx"
try:
df = pd.read_excel(file_path)
data_list = df.values.tolist()
print("✅ 转换成功!Excel转成的列表是:")
print(data_list)
except FileNotFoundError:
print("❌ 找不到文件!请确认 '数据.xlsx' 和 '读取Excel.py' 在同一个文件夹里")
except Exception as e:
print(f"❌ 出错了:{e}")

2025010097马浩
# 定义二维数组
arr = [
[1, 5, 9],
[3, 7, 2],
[8, 4, 6]
]
n = 5 # 阈值
count = 0
# 遍历统计
for row in arr:
for num in row:
if num >= n:
count += 1
print(f"大于等于 {n} 的元素个数:{count}")

2025010098韩晓媛
分解质因数
i=int(input("请输入一个整数:"))
n=2 #从最小的质数开始分解
while i>1:
if i%n==0: #i能整除n,n是i的质因数
print(n)
i=i//n #得到一个新的数字继续分解
else:
n+=1 #当不能整除2时,找下一个质因数分解

2025010099张嘉诚
二分查找
def binary_search_with_sort(arr, target):
# 1. 先对数组排序
arr.sort()
print("排序后的数组:", arr)
left = 0
right = len(arr) - 1
# 2. 用 for 循环实现二分查找
for _ in range(len(arr)):
if left > right:
break # 区间无效,提前退出循环
mid = (left + right) // 2 # 计算中间位置
if arr[mid] == target:
return mid # 找到目标,返回下标
elif arr[mid] < target:
left = mid + 1 # 目标在右半边,移动左边界
else:
right = mid - 1 # 目标在左半边,移动右边界
return -1 # 循环结束没找到,返回-1
# 测试代码
if __name__ == "__main__":
nums = [12, 5, 23, 8, 19, 30, 7, 15, 27, 2, 35]
target_num = 23
index = binary_search_with_sort(nums, target_num)
if index != -1:
print(f"找到了 {target_num},在排序后数组的下标位置:{index}")
else:
print(f"数组中不存在 {target_num}" )

2025010100霍延萌
回文数
# 统计 2位 ~ 5位 的所有回文数个数
count = 0
# 遍历所有 2位 到 5位 的数字
for num in range(10, 100000):
s = str(num) # 把数字变成字符串
if s == s[::-1]: # 判断是不是回文(正读 = 反读)
count += 1 # 是回文就计数 +1
print("2位到5位的回文数总共有:", count)

2025010101袁泉
标注出图片中的红色
import cv2
import numpy as np
def detect_red_in_image(image_path):
"""
检测图片中是否存在红色,返回结果并可视化红色区域
:param image_path: 图片路径(相对/绝对路径均可,如"test.jpg")
:return: 有红色返回True,无则返回False
"""
# 读取图片,cv2默认BGR色彩模式
img = cv2.imread(image_path)
# 检查图片是否读取成功(路径错误/文件损坏会失败)
if img is None:
print(f"错误:无法读取图片,请检查路径「{image_path}」是否正确!")
return False
# 转换为HSV色彩空间(比RGB更抗光照干扰,颜色筛选更准确)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义红色的HSV阈值(红色分两段:0-10 和 170-180,适配所有红色系)
# 饱和度S≥100、明度V≥80:过滤淡红/浅红,只识别有效红色(可按需调低)
lower_red1 = np.array([0, 100, 80])
upper_red1 = np.array([10, 255, 255])
lower_red2 = np.array([170, 100, 80])
upper_red2 = np.array([180, 255, 255])
# 生成红色掩码(白色=红色像素,黑色=非红色像素)
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
red_mask = mask1 + mask2 # 合并两段红色掩码
# 统计红色像素数量,大于0则判定有红色
red_pixel_num = np.sum(red_mask > 0)
has_red = red_pixel_num > 0
# 可视化:在原图上标注红色区域(红色框选,方便直观验证)
# 查找红色区域的轮廓
contours, _ = cv2.findContours(red_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓,画出红色矩形框
for cnt in contours:
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2) # BGR(0,0,255)=红色
# 打印检测结果
if has_red:
print(f"✅ 图片中检测到红色,红色像素总数:{red_pixel_num}")
else:
print("❌ 图片中未检测到红色")
# 显示标注后的图片(按任意键关闭窗口)
cv2.imshow("Red Detection Result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
return has_red
# ------------------- 主程序调用 -------------------
if __name__ == "__main__":
# ********** 仅需修改这里的图片路径 **********
IMAGE_FILE = "test.jpg" # 替换为你的图片名/路径
detect_red_in_image(IMAGE_FILE)

2025010102 沈玉婷
找一个整数加上100和268都是完全平方数
n=int(input("请输入一个整数:"))
# 找一个整数,加上100和268都是完全平方数
for num in range(1, n+1):
# 计算加100和268后的结果
sum1 = num + 100
sum2 = num + 268
# 开平方
sqrt1 = sum1 ** 0.5
sqrt2 = sum2 ** 0.5
# 判断开平方后是不是整数(是整数就是完全平方数)
if sqrt1 == int(sqrt1) and sqrt2 == int(sqrt2):
print("这个数是:", num)

2025010103黄俊
0 1 2 3组成的不重复三位数的偶数
nums = []
for a in range(1, 4): # 百位
for b in range(4): # 十位
for c in [0, 2]: # 个位
if a != b and b != c and a != c:
nums.append(a * 100 + b * 10 + c)
print(nums)

2025010104许乐乐
一串字符统计中文英文符号数字的多少


2025010106钟海洋
import itertools
# 甲:A B C 依次对阵 乙的一个排列
count = 0
for pairing in itertools.permutations(['X', 'Y', 'Z']):
# A vs pairing[0], B vs pairing[1], C vs pairing[2]
A_vs, B_vs, C_vs = pairing
# 条件:a不和x比赛
if A_vs == 'X':
continue
# 条件:c不和x、z比赛
c_not_vs = ['X', 'Z']
if C_vs in c_not_vs:
continue
# 符合条件
count += 1
print(f'A对战{A_vs},B对战{B_vs},C对战{C_vs}')
print(f'\n总共有 {count} 种比赛方法')

2025010109 叱干育


2025010107孙瑞妍
小球从高处落下反弹的总高度
initial = 10
n = int(input("输入反弹次数n:"))
s = initial + 10 * (1 - (1/2)**n)
print(f"总距离:{s:.2f} 米")

2025010109 黄帅豪
gif动画 欢迎
import tkinter as tk
from PIL import Image, ImageTk
import threading
import time
def show_welcome_gif(gif_path="welcome.gif"):
try:
root = tk.Tk()
root.title("欢迎使用")
img = Image.open(gif_path)
frames = []
try:
while True:
frames.append(ImageTk.PhotoImage(img.copy()))
img.seek(len(frames))
except EOFError:
pass
label = tk.Label(root)
label.pack()
def update_frame(idx=0):
label.config(image=frames[idx])
idx = (idx + 1) % len(frames)
root.after(100, update_frame, idx)
update_frame()
root.after(2000, root.destroy)
root.mainloop()
except Exception:
print("=" * 30)
print(" 欢迎使用 10086 自助查询系统")
print("=" * 30)
welcome_thread = threading.Thread(target=show_welcome_gif)
welcome_thread.daemon = True
welcome_thread.start()
time.sleep(0.5)
# 原有查询代码
print("10086查询功能\n")
print("输入1,查询当前余额")
print("输入2,查询当前剩余流量")
print("输入3,查询当前剩余通话")
print("输入0,退出自助查询系统!")
yue = 999
liuliang = 5
minute = 189
while True:
try:
ask = int(input("请输入选项: "))
except ValueError:
print("请输入数字!")
continue
if ask == 1:
print("当前余额为:" + str(yue) + "元")
elif ask == 2:
print("当前剩余流量为:" + str(liuliang) + "G")
elif ask == 3:
print("当前剩余通话为:" + str(minute) + "分钟")
elif ask == 0:
print("退出自助查询系统!")
break
else:
print("无效选项,请重新输入")

2025010110 王义刚

2025010112 王怡萱
登录 次数小于3
correct_user = "111"
correct_pwd = "123456"
count = 0
while True:
if count >= 3:
print("登录次数过多,禁止访问")
break
username = input("请输入账号:")
password = input("请输入密码:")
count += 1
if username == correct_user and password == correct_pwd:
print("登录成功,正在跳转网址...")
break
else:
print(f"账号或密码错误,还剩{3 - count}次机会")

2025010113 石蕊鑫
求100—200之间的质数
import math
def is_prime(num):
"""判断一个数是否为质数"""
if num < 2:
return False
if num == 2:
return True
if num % 2 == 0:
return False
limit = int(math.sqrt(num)) + 1
for i in range(3, limit, 2):
if num % i == 0:
return False
return True
primes = []
for n in range(100,200):
if is_prime(n):
primes.append(n)
print("100-200之间的质数有:")
print(primes)

2025010114殷佳锐
# 定义两个科目参加的人
chinese = ["张三", "李四", "王五", "赵六"]
math = ["李四", "钱七", "孙八", "张三"]
# 用来存同时参加两门的人
both = []
# 用 for 循环遍历语文列表
for name in chinese:
# 判断这个人是否也在数学列表里
if name in math:
both.append(name)
print("同时参加语文和数学的人:", both)

2025010115 康静茹
建立一个字典,使用for循环统计学院系的个数以及名称
# 1. 多学院原始数据
college_departments = {
"数学与统计学院": ["基础数学系", "应用数学系", "统计学系", "金融数学系"],
"信息工程学院": ["计算机系", "电子工程系"],
"理学院": ["物理系", "化学系"]
}
# 2. 用for循环建立统计字典
college_stats = {}
for college, departments in college_departments.items():
stats = {
"系个数": len(departments),
"系的名称": ", ".join(departments)
}
college_stats[college] = stats
# 3. 输出表格
print("学院名称 | 系个数 | 系的名称")
print("-" * 70)
for college, info in college_stats.items():
print(f"{college:12} | {info['系个数']:4} | {info['系的名称']}")

2025010117 李欣栎
汇总一个购物单,单价在1000元以上
# 购物单数据
shopping = [
{"名称": "笔记本电脑", "单价": 5999, "数量": 1},
{"名称": "鼠标", "单价": 120, "数量": 1},
{"名称": "显示器", "单价": 1800, "数量": 1},
{"名称": "键盘", "单价": 300, "数量": 1},
{"名称": "平板", "单价": 2600, "数量": 1}]
result = [] # 用来存放单价1000以上的商品
for goods in shopping: # 遍历购物单
price = goods["单价"]
# 判断单价是否大于1000
if price > 1000:
result.append(goods)
print("单价大于1000元的商品汇总:")
for item in result:
print("名称:", item["名称"], " 单价:", item["单价"], " 数量:", item["数量"])

2025010118 陈影
已知入射角 折射率求折射角
import math
# 介质折射率
n2_dict = {"水":1.33, "冰":1.31, "酒精":1.36, "玻璃":1.52, "钻石":2.42}
n1 = 1.00
# 计算折射角
def refract(angle1, n2):
s = (n1 / n2) * math.sin(math.radians(angle1))
if abs(s) > 1:
return "全反射"
return round(math.degrees(math.asin(s)), 2)
# 主程序
angle = float(input("输入入射角(度):"))
print("\n折射结果:")
for name, n2 in n2_dict.items():
print(f"空气→{name}:{refract(angle, n2)}°")

2025010119 淡郑雪
由星号组成菱形
# 设置菱形的边长(奇数,边长决定菱形大小)
size = 7
# 打印上半部分(包括中间行)
for i in range(size // 2 + 1):
# 打印空格
print(" " * (size // 2 - i), end="")
# 打印星号
print("*" * (2 * i + 1))
# 打印下半部分
for i in range(size // 2 - 1, -1, -1):
print(" " * (size // 2 - i), end="")
print("*" * (2 * i + 1))

2025010121郑舒萍
把图片变成灰度图
import tkinter as tk
from tkinter import filedialog
# 弹出选择图片
tk.Tk().withdraw()
path = filedialog.askopenfilename()
# 读取图片转灰度
img = tk.PhotoImage(file=path)
w, h = img.width(), img.height()
gray = tk.PhotoImage(width=w, height=h)
# 遍历像素变灰度
for x in range(w):
for y in range(h):
r,g,b = img.get(x,y)
gary = int(0.299*r + 0.587*g + 0.114*b)
gray.put(f"#{gary:02x}{gary:02x}{gary:02x}", (x,y))
# 保存
gray.write("灰度图.png")
print("搞定!已经生成灰度图.png")


2025010122田昌盛
import os
# 这里改成你要查的文件夹路径
folder_path = r"D:\你的文件夹路径"
count = 0
for filename in os.listdir(folder_path):
if "实战" in filename:
count += 1
print(f'包含“实战”的文件数量:{count}')

2025010124 胡鑫
for循环冒泡排序
arr = [5, 2, 9, 1, 5, 6]
n = len(arr)
# 两层for循环
for i in range(n-1):
for j in range(n-1-i):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
print(arr)

2025010125 刘芮孜
from itertools import permutations
# 乙队成员
team_y = ['X', 'Y', 'Z']
count = 0
result = []
# 遍历乙队所有全排列,代表 A,B,C 依次对阵的对手
for p in permutations(team_y):
A_vs, B_vs, C_vs = p
# 约束条件
cond1 = (A_vs not in ['Y', 'Z']) # A不能对Y、Z
cond2 = (B_vs != 'X') # B不能对X
if cond1 and cond2:
count += 1
result.append(f"A→{A_vs}, B→{B_vs}, C→{C_vs}")
print("符合条件的所有排列:")
for item in result:
print(item)
print(f"\n总排列方法数:{count}")

2025010127 刘杨龙
矩阵求逆矩阵
import numpy as np
# 1. 定义一个方阵(必须是方阵才能求逆矩阵!)
matrix = np.array([[1, 2],
[3, 4]])
# 2. 求逆矩阵(核心一行代码)
inverse_matrix = np.linalg.inv(matrix)
# 3. 输出结果
print("原矩阵:")
print(matrix)
print("逆矩阵:")
print(inverse_matrix)

2025010128 贾姝慧
直角坐标系中一条直线到三点距离和的最小值
import math
# 定义平面上3个固定点
p1 = (1, 2)
p2 = (5, 3)
p3 = (2, 6)
# 点到直线距离公式函数
def dis(x0, y0, a, b, c):
return abs(a*x0 + b*y0 + c) / math.sqrt(a**2 + b**2)
# 计算3个点到这条直线的距离总和
def total(a, b, c):
d1 = dis(p1[0], p1[1], a, b, c)
d2 = dis(p2[0], p2[1], a, b, c)
d3 = dis(p3[0], p3[1], a, b, c)
return d1 + d2 + d3
# 初始化:先把最小值设成无穷大
min_sum = float('inf')
best_a = best_b = best_c = 0
# 遍历所有简单的直线
for a in (-1, 0, 1):
for b in (-1, 0, 1):
# a、b都为0不是直线,直接跳过
if a == 0 and b == 0:
continue
# 遍历直线上下移动的位置c
for c in range(-8, 9):
# 算出当前这条直线的总距离
s = total(a, b, c)
# 如果更小,就更新最小值和最优直线
if s < min_sum:
min_sum = s
best_a, best_b, best_c = a, b, c
# 输出最终结果
print("最优直线:",best_a,"x +",best_b,"y +",best_c,"= 0")
print("最小距离总和:",round(min_sum,2))

2025010130 任鸿杰
nums = [5, 2, 9, 1, 7, 3, 8]
num = int(input("请输一个整数:"))
nums.append(num)
n = len(nums)
for i in range(n):
#两个两个挨着比大小
for j in range(n - 1 - i):
# 左边数字 比 右边大
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
print("从小到大排序:")
for a in nums:
print(a, end=" ")

2025010131董玥卓
矩阵的乘法
# 定义第一个 3×3 矩阵 A
A = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 定义第二个 3×3 矩阵 B
B = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
]
# 初始化 3×3 结果矩阵,全部先填0
C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
# 矩阵乘法三层循环
for i in range(3):
for j in range(3):
for k in range(3):
C[i][j] = C[i][j] + A[i][k] * B[k][j]
# 打印结果
print("矩阵 A × B 的结果:")
for row in C:
print(row)

2025010132李佳雨
小球下落
1 # 初始化变量
2 height = 100 # 初始下落高度
3 distance = 100 # 总路程,第一次直接落下100米
4 count = 0 # 反弹次数
5
6 # 循环:高度大于等于1米就继续反弹
7 while height >= 1:
8 height = height * 0.5 # 反弹高度变为原来50%
9 count += 1 # 反弹次数+1
10 distance += 2 * height # 反弹上去+再落下,一来一回双倍路程
11
12 # 输出结果
13 print("反弹次数:", count)
14 print("总路程:", distance)


浙公网安备 33010602011771号