diff --git a/.idea/PythonV3_V4.iml b/.idea/PythonV3_V4.iml index 8b8c395..9e2a31e 100644 --- a/.idea/PythonV3_V4.iml +++ b/.idea/PythonV3_V4.iml @@ -1,8 +1,10 @@ - - + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml index 23231ce..9dc024c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,7 @@ - + + + \ No newline at end of file diff --git a/第10讲 识图精灵/50识图精灵讲义.pdf b/第10讲 识图精灵/50识图精灵讲义.pdf deleted file mode 100644 index a5bf4c6..0000000 Binary files a/第10讲 识图精灵/50识图精灵讲义.pdf and /dev/null differ diff --git a/第10讲 识图精灵/识图精灵.png b/第10讲 识图精灵/识图精灵.png deleted file mode 100644 index 9cde2b4..0000000 Binary files a/第10讲 识图精灵/识图精灵.png and /dev/null differ diff --git a/第10讲 识图精灵/课堂成果/安装第三方库.py b/第10讲 识图精灵/课堂成果/安装第三方库.py deleted file mode 100644 index 88730ac..0000000 --- a/第10讲 识图精灵/课堂成果/安装第三方库.py +++ /dev/null @@ -1,5 +0,0 @@ -# 点击运行【安装第三方库.py】,即可安装本课用到的第三方库 - -import pip -pip.main(['install','baidu-aip']) -pip.main(['install','chardet']) \ No newline at end of file diff --git a/第10讲 识图精灵/课堂成果/花.png b/第10讲 识图精灵/课堂成果/花.png deleted file mode 100644 index 18d4788..0000000 Binary files a/第10讲 识图精灵/课堂成果/花.png and /dev/null differ diff --git a/第10讲 识图精灵/课堂成果/识图精灵.py b/第10讲 识图精灵/课堂成果/识图精灵.py deleted file mode 100644 index 0638780..0000000 --- a/第10讲 识图精灵/课堂成果/识图精灵.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -》》》运行前必做《《《 -1. 运行【安装第三方库.py】文件 -2. 注册百度云账号,获取API,配置后查看完整效果 -账号注册指南: -https://huewq7h021.feishu.cn/wiki/Ry3UwaoceiMRXgklbWtc9mEUn9f?from=from_copylink -""" - -from aip import AipImageClassify # 调用百度智能模块中图像识别类方法 - -# 填写个人的授权使用信息 -APP_ID = '你的 AppID' -API_KEY = '你的 API Key' -SECRET_KEY = '你的 Secret Key' - -# 准备【图像识别器】 -client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) - -# 读取图片文件并返回二进制数据 -def read_img(file): - with open(file, "rb") as f: - return f.read() - -# 调用【图像识别器】并返回结果 -def find_img(img): - # 返回的信息是字典类型,结果保存在键‘result’的值中 - return client.advancedGeneral(img) - -# 打印识别结果 -def print_result(res): - if 'result' in res: - for i in res['result']: - if i['score'] >= 0.6: - print(f"结果为 {i['keyword']} , 相似度为 {i['score']*100:.2f}% ") - else: - # 失败响应提示信息 - print(f"识别失败, 错误码: {res.get('error_code')}, 错误信息: {res.get('error_msg')}") - -# 主函数 -data = read_img("花.png") -result = find_img(data) -print(f"API返回结果:{result}\n") -print_result(result) -print('识别完毕') - diff --git a/第11讲 语音识别与合成/51语音识别与合成讲义.pdf b/第11讲 语音识别与合成/51语音识别与合成讲义.pdf deleted file mode 100644 index 17cabe8..0000000 Binary files a/第11讲 语音识别与合成/51语音识别与合成讲义.pdf and /dev/null differ diff --git a/第11讲 语音识别与合成/语音识别与合成.png b/第11讲 语音识别与合成/语音识别与合成.png deleted file mode 100644 index 7998c3c..0000000 Binary files a/第11讲 语音识别与合成/语音识别与合成.png and /dev/null differ diff --git a/第11讲 语音识别与合成/课堂成果/安装第三方库.py b/第11讲 语音识别与合成/课堂成果/安装第三方库.py deleted file mode 100644 index 7b45a13..0000000 --- a/第11讲 语音识别与合成/课堂成果/安装第三方库.py +++ /dev/null @@ -1,7 +0,0 @@ -# 点击运行【安装第三方库.py】,即可安装本课用到的第三方库 - -import pip -pip.main(['install','pyaudio']) -pip.main(['install','keyboard']) -pip.main(['install','baidu-aip']) -pip.main(['install','chardet']) \ No newline at end of file diff --git a/第11讲 语音识别与合成/课堂成果/录音工具.py b/第11讲 语音识别与合成/课堂成果/录音工具.py deleted file mode 100644 index 5939e03..0000000 --- a/第11讲 语音识别与合成/课堂成果/录音工具.py +++ /dev/null @@ -1,48 +0,0 @@ -# 按下's'开始录制,按下'q'停止录制,文件存为'pyaudio.wav' - -import pyaudio -import wave -import keyboard - -# 从麦克风录制音频并保存到指定文件 - -# 创建 PyAudio 对象 -p = pyaudio.PyAudio() -# 打开音频流,设置格式、声道数、采样率等参数 -stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=1024) -# 创建一个空列表用于存储录制的音频数据 -frames = [] -# 打印提示信息,表示开始录制 -print("Press 's' to start recording...") -# 等待用户按下 's' 键开始录制 -keyboard.wait('s') -# 打印提示信息,表示开始录制 -print("Recording...") -# 开始录制 -while True: - # 从音频流中读取 1024 个数据样本 - data = stream.read(1024) - # 将数据添加到 frames 列表中 - frames.append(data) - # 检查是否按下 'q' 键结束录制 - if keyboard.is_pressed('q'): - break -# 打印提示信息,表示录制已停止 -print("Recording stopped.") -# 停止音频流 -stream.stop_stream() -# 关闭音频流 -stream.close() -# 终止 PyAudio 对象 -p.terminate() -# 打开文件,以写入模式打开 -wf = wave.open("pyaudio.wav", 'wb') -# 设置音频的声道数、采样宽度和采样率 -wf.setnchannels(1) -wf.setsampwidth(p.get_sample_size(pyaudio.paInt16)) -wf.setframerate(16000) -# 将 frames 列表中的所有数据连接成一个字节串,并写入文件 -wf.writeframes(b''.join(frames)) -# 关闭文件 -wf.close() -print("Done") \ No newline at end of file diff --git a/第11讲 语音识别与合成/课堂成果/语音合成.py b/第11讲 语音识别与合成/课堂成果/语音合成.py deleted file mode 100644 index aba431e..0000000 --- a/第11讲 语音识别与合成/课堂成果/语音合成.py +++ /dev/null @@ -1,37 +0,0 @@ -""" -》》》运行前必做《《《 -1. 运行【安装第三方库.py】文件 -2. 注册百度云账号,获取API,配置后查看完整效果 -账号注册指南: -https://huewq7h021.feishu.cn/wiki/Ry3UwaoceiMRXgklbWtc9mEUn9f?from=from_copylink -""" - -from aip import AipSpeech - -# 定义常量 -APP_ID = '你的 AppID' -API_KEY = '你的 API Key' -SECRET_KEY = '你的 Secret Key' - -# 准备【语音合成器】 -client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) - -# 要合成的文本 -text = "你好,我是P仔,很高兴认识你" - -# 调用【语音合成器】 -res = client.synthesis(text, 'zh', 1, { - 'vol': 5, # 音量 - 'per': 0, # 发音人 - 'spd': 5 # 语速 -}) -print(res) - -# 判断调用是否成功 -if not isinstance(res, dict): - # 获取合成音频结果 - with open('save.mp3', 'wb') as f: - f.write(res) - print('音频文件保存成功') -else: - print('调用失败, 错误码: %s, 错误信息: %s' % (res['err_no'], res['err_msg'])) diff --git a/第11讲 语音识别与合成/课堂成果/语音识别.py b/第11讲 语音识别与合成/课堂成果/语音识别.py deleted file mode 100644 index 6e6285c..0000000 --- a/第11讲 语音识别与合成/课堂成果/语音识别.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -》》》运行前必做《《《 -1. 运行【安装第三方库.py】文件 -2. 注册百度云账号,获取API,配置后查看完整效果 -账号注册指南: -https://huewq7h021.feishu.cn/wiki/Ry3UwaoceiMRXgklbWtc9mEUn9f?from=from_copylink -""" - -from aip import AipSpeech - -# 定义常量 -APP_ID = '你的 AppID' -API_KEY = '你的 API Key' -SECRET_KEY = '你的 Secret Key' - -# 准备【语音识别器】 -client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) - -# 定义要识别的语音文件 -file = 'pyaudio.wav' - -# 读取音频文件 -def read_audio(file): - with open(file, 'rb') as f: - return f.read() - -# 调用【语音识别器】 -res = client.asr(read_audio(file), 'wav', 16000, { - 'dev_pid': 1537 # 普通话识别 -}) - -# 打印返回结果 -if 'result' in res: - print("识别结果:", res['result'][0]) -else: - print("识别失败:", res) diff --git a/第11讲 语音识别与合成/课堂成果/课后作业-柯南变声领带.py b/第11讲 语音识别与合成/课堂成果/课后作业-柯南变声领带.py deleted file mode 100644 index 8647ef3..0000000 --- a/第11讲 语音识别与合成/课堂成果/课后作业-柯南变声领带.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -》》》运行前必做《《《 -1. 运行【安装第三方库.py】文件 -2. 注册百度云账号,获取API,配置后查看完整效果 -账号注册指南: -https://huewq7h021.feishu.cn/wiki/Ry3UwaoceiMRXgklbWtc9mEUn9f?from=from_copylink -""" -'''柯南变声领结 - -任务描述: - -变身名侦探柯南,制作一个神奇的变声领结!你将录制一段音频,通过语音识别转换成文字,再通过语音合成器将文字变成机器人音调!快来挑战吧,看谁的变声音效最酷! - -作业要求: - -1. 将课堂代码【语音识别】和【语音合成】整合到一个文件中 - -2. 文字合成语音,选择喜欢的“语音人”''' -import pyaudio -import wave -import keyboard -from aip import AipSpeech - -# 从麦克风录制音频并保存到指定文件 - -# 创建 PyAudio 对象 -p = pyaudio.PyAudio() -# 打开音频流,设置格式、声道数、采样率等参数 -stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=1024) -# 创建一个空列表用于存储录制的音频数据 -frames = [] -# 打印提示信息,表示开始录制 -print("Press 's' to start recording...") -# 等待用户按下 's' 键开始录制 -keyboard.wait('s') -# 打印提示信息,表示开始录制 -print("Recording...") -# 开始录制 -while True: - # 从音频流中读取 1024 个数据样本 - data = stream.read(1024) - # 将数据添加到 frames 列表中 - frames.append(data) - # 检查是否按下 'q' 键结束录制 - if keyboard.is_pressed('q'): - break -# 打印提示信息,表示录制已停止 -print("Recording stopped.") -# 停止音频流 -stream.stop_stream() -# 关闭音频流 -stream.close() -# 终止 PyAudio 对象 -p.terminate() -# 打开文件,以写入模式打开 -wf = wave.open("pyaudio.wav", 'wb') -# 设置音频的声道数、采样宽度和采样率 -wf.setnchannels(1) -wf.setsampwidth(p.get_sample_size(pyaudio.paInt16)) -wf.setframerate(16000) -# 将 frames 列表中的所有数据连接成一个字节串,并写入文件 -wf.writeframes(b''.join(frames)) -# 关闭文件 -wf.close() -print("Done") - -# 定义常量 -APP_ID = '你的 AppID' -API_KEY = '你的 API Key' -SECRET_KEY = '你的 Secret Key' - -# 准备【语音工具】 -client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) - -# 定义要识别的语音文件 -file = 'pyaudio.wav' - - -# 读取音频文件 -def read_audio(file): - with open(file, 'rb') as f: - return f.read() - - -# 调用语音识别接口 -res = client.asr(read_audio(file), 'wav', 16000, { - 'dev_pid': 1537 # 普通话识别 -}) - -# 打印返回结果 -if 'result' in res: - print("识别结果:", res['result'][0]) -else: - print("识别失败:", res) - -# 要合成的文本 -text = res['result'][0] - -# 调用语音合成接口 -res = client.synthesis(text, 'zh', 1, { - 'vol': 5, # 音量 - 'per': 0, # 发音人 - 'spd': 5 # 语速 -}) -print(res) - -# 判断调用是否成功 -if not isinstance(res, dict): - # 获取合成音频结果 - with open('save.mp3', 'wb') as f: - f.write(res) - print('音频文件保存成功') -else: - print('调用失败, 错误码: %s, 错误信息: %s' % (res['err_no'], res['err_msg'])) \ No newline at end of file diff --git a/第12讲 你的颜值有几分一/52你的颜值有几分一讲义.pdf b/第12讲 你的颜值有几分一/52你的颜值有几分一讲义.pdf deleted file mode 100644 index 80007f4..0000000 Binary files a/第12讲 你的颜值有几分一/52你的颜值有几分一讲义.pdf and /dev/null differ diff --git a/第12讲 你的颜值有几分一/你的颜值有几分一.png b/第12讲 你的颜值有几分一/你的颜值有几分一.png deleted file mode 100644 index 5106251..0000000 Binary files a/第12讲 你的颜值有几分一/你的颜值有几分一.png and /dev/null differ diff --git a/第12讲 你的颜值有几分一/课堂成果/你的颜值有几分1.py b/第12讲 你的颜值有几分一/课堂成果/你的颜值有几分1.py deleted file mode 100644 index 4271e6f..0000000 --- a/第12讲 你的颜值有几分一/课堂成果/你的颜值有几分1.py +++ /dev/null @@ -1,114 +0,0 @@ -''' -【一、导入库】 -''' -# 预置内容,请勿改动 -import io -import base64 -import cv2 -# 请在下方编写代码 -import tkinter as tk -from PIL import Image, ImageTk -from tkinter import filedialog - -''' -【二、初始化】(变量初始化、窗口初始化、API配置信息) -''' -# 预置内容,请勿改动 -cap = None -imgtk = None -update_id = None -# 请在下方编写代码 -# 初始化Tkinter -root = tk.Tk() -root.geometry('700x700') -root.title('颜值测评') -root.resizable(0, 0) - -''' -【三、函数】 -''' -# 预置内容,请勿改动 图像 --> 字节数据 --> Base64 编码格式 -def img_to_bytes(photoimg): - # 将 PhotoImage 转换为 PIL 图像 - pil_img = ImageTk.getimage(photoimg) - # 如果图像具有 Alpha 信道(透明度),则转换为 RGB - if pil_img.mode == 'RGBA': - pil_img = pil_img.convert('RGB') - # 保存到字节缓冲区 - buffer = io.BytesIO() - pil_img.save(buffer, format='JPEG') - img_data = buffer.getvalue() - return base64.b64encode(img_data).decode('utf-8') -# 预置内容,请勿改动 打开摄像头 -def open_camera(): - global cap, update_id - cap = cv2.VideoCapture(0) - if not cap.isOpened(): - print("无法打开摄像头") - return - def update_frame(): - global cap, update_id - ret, frame = cap.read() - if frame is None: - return - frame = cv2.resize(frame, (250, 250)) - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - img = Image.fromarray(frame) - imgtk = ImageTk.PhotoImage(img) - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) - update_id = lab_photo.after(10, update_frame) - update_frame() -# 预置内容,请勿改动 关闭摄像头 -def close_camera(): - global cap, update_id - if cap is not None: - cap.release() - cap = None - if update_id is not None: - lab_photo.after_cancel(update_id) - update_id = None - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) -# 请在下方编写代码 -# 加载本地图片 -def load(): - file_path = filedialog.askopenfilename() # 打开一个文件选择对话框 - if file_path: - close_camera() - img = Image.open(file_path) - img = img.resize((250, 250)) - imgtk = ImageTk.PhotoImage(img) - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) -# 颜值检测开始 -def ok(): - pass - -''' -【四、组件配置】 -''' -# 设置背景图 -bg_image = tk.PhotoImage(file = '测颜值.png') -bg_label = tk.Label(root, image = bg_image) -bg_label.place(x=0, y=0, relwidth=1, relheight=1) -# 设置缩略图 -pic0 = Image.open('缩略图.png') -pic0 = pic0.resize((250, 250)) -pic0_image = ImageTk.PhotoImage(pic0) -lab_photo = tk.Label(root, image=pic0_image) -lab_photo.place(x=223, y=223) -# 本地上传按钮 -btn_load = tk.Button(root, text="本地上传", command=load, width=15, height=2, font=("楷体", 12)) -btn_load.place(x=115, y=625) -# 拍照上传按钮 -btn_cam = tk.Button(root, text="拍照上传", command=open_camera, width=15, height=2, font=("楷体", 12)) -btn_cam.place(x=300, y=625) -# 开始测评按钮 -btn_enter = tk.Button(root, text="点击开测!", command=ok, width=15, height=2, font=("楷体", 12)) -btn_enter.place(x=485, y=625) - -''' -【五、启动事件循环】 -''' -root.mainloop() \ No newline at end of file diff --git a/第12讲 你的颜值有几分一/课堂成果/测颜值.png b/第12讲 你的颜值有几分一/课堂成果/测颜值.png deleted file mode 100644 index 93b7217..0000000 Binary files a/第12讲 你的颜值有几分一/课堂成果/测颜值.png and /dev/null differ diff --git a/第12讲 你的颜值有几分一/课堂成果/缩略图.png b/第12讲 你的颜值有几分一/课堂成果/缩略图.png deleted file mode 100644 index e786152..0000000 Binary files a/第12讲 你的颜值有几分一/课堂成果/缩略图.png and /dev/null differ diff --git a/第12讲 你的颜值有几分一/课堂成果/课后作业-本地图片浏览器.py b/第12讲 你的颜值有几分一/课堂成果/课后作业-本地图片浏览器.py deleted file mode 100644 index 3bfdb77..0000000 --- a/第12讲 你的颜值有几分一/课堂成果/课后作业-本地图片浏览器.py +++ /dev/null @@ -1,43 +0,0 @@ -'''本地图片浏览器 - -任务描述: - -创建一个简单的图片浏览器。用户可以从计算机中选择一张图片,并在窗口中指定位置显示。 - - - -作业要求: - -1. 界面:包括【选择】按钮和一个图片显示区域(300*300) - -2. 加载本地图片:使用文件对话框让用户选择一张本地图片 - -3. 图片缩放:选中的图片进行缩放来匹配显示区域 - -4. 更新显示:选择新图片后,界面应更新所选图片''' -import tkinter as tk -from PIL import Image, ImageTk -from tkinter import filedialog - -def load(): - file_path = filedialog.askopenfilename() - if file_path: - img = Image.open(file_path) - img = img.resize((300, 300)) # 缩放图片 - imgtk = ImageTk.PhotoImage(img) - label.config(image=imgtk) - label.image = imgtk - -root = tk.Tk() -root.title("本地图片浏览器") -root.geometry("350x350") - -# 显示图片区域 -label = tk.Label(root) -label.pack() - -# 按钮用于选择图片 -button = tk.Button(root, text="选择图片", command=load) -button.pack() - -root.mainloop() \ No newline at end of file diff --git a/第13讲 你的颜值有几分二/53你的颜值有几分二讲义.pdf b/第13讲 你的颜值有几分二/53你的颜值有几分二讲义.pdf deleted file mode 100644 index 3e35913..0000000 Binary files a/第13讲 你的颜值有几分二/53你的颜值有几分二讲义.pdf and /dev/null differ diff --git a/第13讲 你的颜值有几分二/你的颜值有几分二.png b/第13讲 你的颜值有几分二/你的颜值有几分二.png deleted file mode 100644 index e514651..0000000 Binary files a/第13讲 你的颜值有几分二/你的颜值有几分二.png and /dev/null differ diff --git a/第13讲 你的颜值有几分二/课堂成果/你的颜值有几分2.py b/第13讲 你的颜值有几分二/课堂成果/你的颜值有几分2.py deleted file mode 100644 index e00fbd2..0000000 --- a/第13讲 你的颜值有几分二/课堂成果/你的颜值有几分2.py +++ /dev/null @@ -1,154 +0,0 @@ -""" -》》》运行前必做《《《 -1. 运行【安装第三方库.py】文件 -2. 注册百度云账号,获取API,配置后查看完整效果 -账号注册指南: -https://huewq7h021.feishu.cn/wiki/Ry3UwaoceiMRXgklbWtc9mEUn9f?from=from_copylink -""" - - -''' -【一、导入库】 -''' -# 预置内容,请勿改动 -import io -import base64 -import cv2 -# 请在下方编写代码 -import tkinter as tk -from PIL import Image, ImageTk -from tkinter import filedialog, messagebox -from aip import AipFace - - -''' -【二、初始化】(变量初始化、窗口初始化、API配置信息) -''' -# 预置内容,请勿改动 -cap = None -imgtk = None -update_id = None -# 请在下方编写代码 -# 初始化Tkinter -root = tk.Tk() -root.geometry('700x700') -root.title('颜值测评') -root.resizable(0, 0) -# 百度AI的API配置信息 -APP_ID = '你的 AppID' -API_KEY = '你的 API Key' -SECRET_KEY = '你的 Secret Key' -client = AipFace(APP_ID, API_KEY, SECRET_KEY) - - -''' -【三、函数】 -''' -# 预置内容,请勿改动 图像 --> 字节数据 --> Base64 编码格式 -def img_to_bytes(photoimg): - # 将 PhotoImage 转换为 PIL 图像 - pil_img = ImageTk.getimage(photoimg) - # 如果图像具有 Alpha 信道(透明度),则转换为 RGB - if pil_img.mode == 'RGBA': - pil_img = pil_img.convert('RGB') - # 保存到字节缓冲区 - buffer = io.BytesIO() - pil_img.save(buffer, format='JPEG') - img_data = buffer.getvalue() - return base64.b64encode(img_data).decode('utf-8') -# 预置内容,请勿改动 打开摄像头 -def open_camera(): - global cap, update_id - cap = cv2.VideoCapture(0) - if not cap.isOpened(): - print("无法打开摄像头") - return - def update_frame(): - global cap, update_id - ret, frame = cap.read() - if frame is None: - return - frame = cv2.resize(frame, (250, 250)) - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - img = Image.fromarray(frame) - imgtk = ImageTk.PhotoImage(img) - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) - update_id = lab_photo.after(10, update_frame) - update_frame() -# 预置内容,请勿改动 关闭摄像头 -def close_camera(): - global cap, update_id - if cap is not None: - cap.release() - cap = None - if update_id is not None: - lab_photo.after_cancel(update_id) - update_id = None - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) -# 请在下方编写代码 -# 加载本地图片 -def load(): - file_path = filedialog.askopenfilename() # 打开一个文件选择对话框 - if file_path: - close_camera() - img = Image.open(file_path) - img = img.resize((250, 250)) - imgtk = ImageTk.PhotoImage(img) - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) -# 颜值检测开始 -def ok(): - # 判断 lab_photo 对象是否具有属性 imgtk - if not hasattr(lab_photo, 'imgtk'): - messagebox.showerror("错误", "没有显示图片,无法进行颜值测试") - return - img_base64 = img_to_bytes(lab_photo.imgtk) # 将图片转为Base64 - imageType = "BASE64" # 设置图片类型 - options = {"face_field":"age,gender,face_shape,emotion,beauty"} - result = client.detect(img_base64, imageType, options) - if 'error_msg' in result and result['error_msg'] == 'pic not has face': - messagebox.showerror("错误", "图像中未检测到人脸") - return - if 'result' in result and 'face_list' in result['result']: - # 解析结果 - age = result['result']['face_list'][0]['age'] - gender = result['result']['face_list'][0]['gender']['type'] - face_shape = result['result']['face_list'][0]['face_shape']['type'] - emotion = result['result']['face_list'][0]['emotion']['type'] - beauty = result['result']['face_list'][0]['beauty'] - # 构造结果字符串 - output_str=f"年龄:{age}\n性别:{gender}\n脸型:{face_shape}\n情绪:{emotion}\n颜值:{beauty}" - # 使用对话框显示结果 - messagebox.showinfo("颜值测评结果", output_str) - else: - messagebox.showerror("错误", "检测失败,请重试") - -''' -【四、组件配置】 -''' -# 设置背景图 -bg_image = tk.PhotoImage(file = '测颜值.png') -bg_label = tk.Label(root, image = bg_image) -bg_label.place(x=0, y=0, relwidth=1, relheight=1) -# 设置缩略图 -pic0 = Image.open('缩略图.png') -pic0 = pic0.resize((250, 250)) -pic0_image = ImageTk.PhotoImage(pic0) -lab_photo = tk.Label(root, image=pic0_image) -lab_photo.place(x=223, y=223) -# 本地上传按钮 -btn_load = tk.Button(root, text="本地上传", command=load, width=15, height=2, font=("楷体", 12)) -btn_load.place(x=115, y=625) -# 拍照上传按钮 -btn_cam = tk.Button(root, text="拍照上传", command=open_camera, width=15, height=2, font=("楷体", 12)) -btn_cam.place(x=300, y=625) -# 开始测评按钮 -btn_enter = tk.Button(root, text="点击开测!", command=ok, width=15, height=2, font=("楷体", 12)) -btn_enter.place(x=485, y=625) - -''' -【五、启动事件循环】 -''' -root.mainloop() diff --git a/第13讲 你的颜值有几分二/课堂成果/安装第三方库.py b/第13讲 你的颜值有几分二/课堂成果/安装第三方库.py deleted file mode 100644 index b528f70..0000000 --- a/第13讲 你的颜值有几分二/课堂成果/安装第三方库.py +++ /dev/null @@ -1,5 +0,0 @@ -# 点击运行【安装第三方库.py】,即可安装本课用到的第三方库 - -import pip -pip.main(['install','baidu-aip']) -pip.main(['install','chardet']) diff --git a/第13讲 你的颜值有几分二/课堂成果/测颜值.png b/第13讲 你的颜值有几分二/课堂成果/测颜值.png deleted file mode 100644 index 93b7217..0000000 Binary files a/第13讲 你的颜值有几分二/课堂成果/测颜值.png and /dev/null differ diff --git a/第13讲 你的颜值有几分二/课堂成果/缩略图.png b/第13讲 你的颜值有几分二/课堂成果/缩略图.png deleted file mode 100644 index e786152..0000000 Binary files a/第13讲 你的颜值有几分二/课堂成果/缩略图.png and /dev/null differ diff --git a/第13讲 你的颜值有几分二/课堂成果/课堂作业-增加检测项目.py b/第13讲 你的颜值有几分二/课堂成果/课堂作业-增加检测项目.py deleted file mode 100644 index c631de2..0000000 --- a/第13讲 你的颜值有几分二/课堂成果/课堂作业-增加检测项目.py +++ /dev/null @@ -1,157 +0,0 @@ -""" -》》》运行前必做《《《 -1. 运行【安装第三方库.py】文件 -2. 注册百度云账号,获取API,配置后查看完整效果 -账号注册指南: -https://huewq7h021.feishu.cn/wiki/Ry3UwaoceiMRXgklbWtc9mEUn9f?from=from_copylink -""" - -''' -【导入库】 -''' -# 【预置内容,请勿改动】 -import io -import base64 -import cv2 -# 请在下方编写代码 -import tkinter as tk -from PIL import Image, ImageTk -from tkinter import filedialog, messagebox -from aip import AipFace - - -''' -【初始化】(变量初始化、窗口初始化、API配置信息) -''' -# 【预置内容,请勿改动】 -cap = None -imgtk = None -update_id = None -# 请在下方编写代码 -# 初始化Tkinter -root = tk.Tk() -root.geometry('700x700') -root.title('颜值测评') -root.resizable(0, 0) -# 百度AI的API配置信息 -APP_ID = '你的 AppID' -API_KEY = '你的 API Key' -SECRET_KEY = '你的 Secret Key' -client = AipFace(APP_ID, API_KEY, SECRET_KEY) - - -''' -【函数】 -''' -# 【预置内容,请勿改动】 图像 --> 字节数据 --> Base64 编码格式 -def img_to_bytes(photoimg): - # 将 PhotoImage 转换为 PIL 图像 - pil_img = ImageTk.getimage(photoimg) - # 如果图像具有 Alpha 信道(透明度),则转换为 RGB - if pil_img.mode == 'RGBA': - pil_img = pil_img.convert('RGB') - # 保存到字节缓冲区 - buffer = io.BytesIO() - pil_img.save(buffer, format='JPEG') - img_data = buffer.getvalue() - return base64.b64encode(img_data).decode('utf-8') -# 【预置内容,请勿改动】打开摄像头 -def open_camera(): - global cap, update_id - cap = cv2.VideoCapture(0) - if not cap.isOpened(): - print("无法打开摄像头") - return - def update_frame(): - global cap, update_id - ret, frame = cap.read() - if frame is None: - return - frame = cv2.resize(frame, (250, 250)) - frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) - img = Image.fromarray(frame) - imgtk = ImageTk.PhotoImage(img) - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) - update_id = lab_photo.after(10, update_frame) - update_frame() -# 【预置内容,请勿改动】关闭摄像头 -def close_camera(): - global cap, update_id - if cap is not None: - cap.release() - cap = None - if update_id is not None: - lab_photo.after_cancel(update_id) - update_id = None - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) -# 请在下方编写代码 -# 加载本地图片 -def load(): - file_path = filedialog.askopenfilename() # 打开一个文件选择对话框 - if file_path: - close_camera() - img = Image.open(file_path) - img = img.resize((250, 250)) - imgtk = ImageTk.PhotoImage(img) - lab_photo.imgtk = imgtk - lab_photo.config(image=imgtk) -# 颜值检测开始 -def ok(): - # 判断 lab_photo 对象是否具有属性 imgtk - if not hasattr(lab_photo, 'imgtk'): - messagebox.showerror("错误", "没有显示图片,无法进行颜值测试") - return - img_base64 = img_to_bytes(lab_photo.imgtk) # 将图片转为Base64 - imageType = "BASE64" # 设置图片类型 - options = {"face_field":"age,gender,face_shape,emotion,beauty,glasses,mask,face_type"} - result = client.detect(img_base64, imageType, options) - if 'error_msg' in result and result['error_msg'] == 'pic not has face': - messagebox.showerror("错误", "图像中未检测到人脸") - return - if 'result' in result and 'face_list' in result['result']: - # 解析结果 - age = result['result']['face_list'][0]['age'] - gender = result['result']['face_list'][0]['gender']['type'] - face_shape = result['result']['face_list'][0]['face_shape']['type'] - emotion = result['result']['face_list'][0]['emotion']['type'] - beauty = result['result']['face_list'][0]['beauty'] - glasses = result['result']['face_list'][0]['glasses']['type'] - mask = result['result']['face_list'][0]['mask']['type'] - face_type = result['result']['face_list'][0]['face_type']['type'] - # 构造结果字符串 - result_str1=f"年龄:{age}\n性别:{gender}\n脸型:{face_shape}\n情绪:{emotion}\n颜值:{beauty}\n" - result_str2=f"是否戴眼镜:{glasses}\n是否戴口罩:{mask}\n人脸类型:{face_type}" - # 使用对话框显示结果 - messagebox.showinfo("颜值测评结果", result_str1+result_str2) - else: - messagebox.showerror("错误", "检测失败,请重试") - -''' -【组件配置】 -''' -# 设置背景图 -bg_image = tk.PhotoImage(file = '测颜值.png') -bg_label = tk.Label(root, image = bg_image) -bg_label.place(x=0, y=0, relwidth=1, relheight=1) -# 设置缩略图 -pic0 = Image.open('缩略图.png') -pic0 = pic0.resize((250, 250)) -pic0_image = ImageTk.PhotoImage(pic0) -lab_photo = tk.Label(root, image=pic0_image) -lab_photo.place(x=223, y=223) -# 本地上传按钮 -btn_load = tk.Button(root, text="本地上传", command=load, width=15, height=2, font=("楷体", 12)) -btn_load.place(x=115, y=625) -# 拍照上传按钮 -btn_cam = tk.Button(root, text="拍照上传", command=open_camera, width=15, height=2, font=("楷体", 12)) -btn_cam.place(x=300, y=625) -# 开始测评按钮 -btn_enter = tk.Button(root, text="点击开测!", command=ok, width=15, height=2, font=("楷体", 12)) -btn_enter.place(x=485, y=625) - -''' -【启动事件循环】 -''' -root.mainloop() diff --git a/第14讲 十秒挑战/54十秒挑战讲义.pdf b/第14讲 十秒挑战/54十秒挑战讲义.pdf deleted file mode 100644 index 61b781a..0000000 Binary files a/第14讲 十秒挑战/54十秒挑战讲义.pdf and /dev/null differ diff --git a/第14讲 十秒挑战/十秒挑战.png b/第14讲 十秒挑战/十秒挑战.png deleted file mode 100644 index 4bfa5de..0000000 Binary files a/第14讲 十秒挑战/十秒挑战.png and /dev/null differ diff --git a/第14讲 十秒挑战/课堂成果/十秒挑战.png b/第14讲 十秒挑战/课堂成果/十秒挑战.png deleted file mode 100644 index d2f1762..0000000 Binary files a/第14讲 十秒挑战/课堂成果/十秒挑战.png and /dev/null differ diff --git a/第14讲 十秒挑战/课堂成果/十秒挑战.py b/第14讲 十秒挑战/课堂成果/十秒挑战.py deleted file mode 100644 index 7ec0cd2..0000000 --- a/第14讲 十秒挑战/课堂成果/十秒挑战.py +++ /dev/null @@ -1,65 +0,0 @@ -import tkinter as tk -import time -from tkinter import messagebox - -# 创建主窗口 -root = tk.Tk() -root.geometry("300x400") # 设置窗口大小 -root.title("10秒挑战") - -bg_image = tk.PhotoImage(file = '十秒挑战.png') -bg_label = tk.Label(root, image = bg_image) -bg_label.place(x=0, y=0, relwidth=1, relheight=1) - -# 初始化运行状态 -flag = False - -# 定期更新显示时间 -def update_time(): - if flag: - now = time.time() - timex = now - start_time - timex_label.config(text=f"时间:{timex:.3f} 秒\n") - root.after(10, update_time) # 10ms 后更新一次 - -# 根据当前状态开始或停止计时 -def change(): - global flag, start_time - - if not flag: # 如果计时尚未开始 - flag = True - start_time = time.time() # 获取当前时间戳 - update_time() # 开始更新时间显示 - else: # 如果计时已经开始 - flag = False # 停止更新时间显示 - end_time = time.time() # 获取当前时间戳 - timex = end_time - start_time # 计算实际耗时 - goal = 10 # 目标耗时 - - # 计算时间差 - time_difference = timex - goal - - # 更新显示 - timex_label.config(text=f"实际时间:{timex:.3f}秒\n误差:{time_difference:.3f}秒") - - # 显示结果 - if f'{time_difference:.3f}' == '0.000': - messagebox.showinfo("结果","难以置信!你就是掌控时间的神!") - else: - messagebox.showinfo("结果","还差一点点,再接再厉吧!") - -# 创建标签 -title_label = tk.Label(root, text="10 秒挑战", font=("楷体", 16)) -title_label.pack(pady=(72,10)) - -# 创建时间显示标签 -timex_label = tk.Label(root, text="点击按钮开始挑战\n", font=("楷体", 12)) -timex_label.pack(pady=(22,17)) - -# 创建按钮并设置图片 -btn_photo = tk.PhotoImage(file = '按钮.png') -btn = tk.Button(root, image=btn_photo, command=change) -btn.pack(pady=20) - -# 运行Tkinter主循环 -root.mainloop() \ No newline at end of file diff --git a/第14讲 十秒挑战/课堂成果/按钮.png b/第14讲 十秒挑战/课堂成果/按钮.png deleted file mode 100644 index bd51cbe..0000000 Binary files a/第14讲 十秒挑战/课堂成果/按钮.png and /dev/null differ diff --git a/第14讲 十秒挑战/课堂成果/课后作业-点击按钮切换背景颜色.py b/第14讲 十秒挑战/课堂成果/课后作业-点击按钮切换背景颜色.py deleted file mode 100644 index bee13c6..0000000 --- a/第14讲 十秒挑战/课堂成果/课后作业-点击按钮切换背景颜色.py +++ /dev/null @@ -1,51 +0,0 @@ -'''【课后作业】 - -点击切换背景颜色 - -要求: - -1.窗口内有标签、按钮如图所示 - -2.窗口初始背景为蓝色 - -3.蓝色背景时点击按钮,背景变红,弹出对话框“变红了”;红色背景时点击按钮,背景变蓝,弹出对话框“变蓝了” - -注意:窗口名.config(bg='颜色') - -可以设置、更改窗口背景颜色''' -import tkinter as tk -from tkinter import messagebox - -# 初始化主窗口 -root = tk.Tk() -root.geometry("300x200+600+300") -root.title("背景颜色切换") - -# 初始化背景颜色标记 -is_blue = True - -def change(): - global is_blue - - if is_blue: - root.config(bg="red") - is_blue = False - messagebox.showinfo("提示", "变红了") - else: - root.config(bg="blue") - is_blue = True - messagebox.showinfo("提示", "变蓝了") - -# 创建标签提示操作 -label = tk.Label(root, text="点击按钮切换背景颜色", font=("楷体", 14)) -label.pack(pady=20) - -# 创建按钮来切换背景颜色 -change_button = tk.Button(root, text="切换背景颜色", command=change) -change_button.pack(pady=10) - -# 初始化背景颜色为蓝色 -root.config(bg="blue") - -# 运行Tkinter主循环 -root.mainloop() \ No newline at end of file diff --git a/第15讲 星座之谜/55星座之谜讲义.pdf b/第15讲 星座之谜/55星座之谜讲义.pdf deleted file mode 100644 index 384d541..0000000 Binary files a/第15讲 星座之谜/55星座之谜讲义.pdf and /dev/null differ diff --git a/第15讲 星座之谜/星座之谜.png b/第15讲 星座之谜/星座之谜.png deleted file mode 100644 index 8d33a6b..0000000 Binary files a/第15讲 星座之谜/星座之谜.png and /dev/null differ diff --git a/第15讲 星座之谜/课堂成果/星图.gif b/第15讲 星座之谜/课堂成果/星图.gif deleted file mode 100644 index a888f0f..0000000 Binary files a/第15讲 星座之谜/课堂成果/星图.gif and /dev/null differ diff --git a/第15讲 星座之谜/课堂成果/星座之谜.py b/第15讲 星座之谜/课堂成果/星座之谜.py deleted file mode 100644 index a3bdc22..0000000 --- a/第15讲 星座之谜/课堂成果/星座之谜.py +++ /dev/null @@ -1,105 +0,0 @@ -import tkinter as tk -from PIL import Image, ImageTk -from tkinter import messagebox - -# 预置内容,请勿改动 -def check(month, day): # 判断星座的函数 - if (month == 1 and day >= 20) or (month == 2 and day <= 18): - return "水瓶座♒" - elif (month == 2 and day >= 19) or (month == 3 and day <= 20): - return "双鱼座♓" - elif (month == 3 and day >= 21) or (month == 4 and day <= 19): - return "白羊座♈" - elif (month == 4 and day >= 20) or (month == 5 and day <= 20): - return "金牛座♉" - elif (month == 5 and day >= 21) or (month == 6 and day <= 21): - return "双子座♊" - elif (month == 6 and day >= 22) or (month == 7 and day <= 22): - return "巨蟹座♋" - elif (month == 7 and day >= 23) or (month == 8 and day <= 22): - return "狮子座♌" - elif (month == 8 and day >= 23) or (month == 9 and day <= 22): - return "处女座♍" - elif (month == 9 and day >= 23) or (month == 10 and day <= 23): - return "天秤座♎" - elif (month == 10 and day >= 24) or (month == 11 and day <= 22): - return "天蝎座♏" - elif (month == 11 and day >= 23) or (month == 12 and day <= 21): - return "射手座♐" - elif (month == 12 and day >= 22) or (month == 1 and day <= 19): - return "摩羯座♑" - -# 创建Tkinter窗口 -root = tk.Tk() -root.geometry('320x360') -root.title("测测你的星座吧") - -# 创建一个标签用于显示gif动画 -label_bg = tk.Label(root) -label_bg.place(x=0, y=0, relwidth=1, relheight=1) #将标签放在窗口顶部并充斥整个窗口 - -# 加载gif图片并将每一帧存储在frames列表中 -image = Image.open('星图.gif') # 打开gif图片文件 -frames = [] # 用于存储gif的所有帧 -try: - while True: - frames.append(ImageTk.PhotoImage(image)) # 将每一帧添加到frames列表中 - image.seek(len(frames)) # 跳转到gif的下一帧 -except EOFError: - pass # 当到达gif结束时,跳出循环 - -# 用于更新gif动画帧的函数 -def upd(idx): - frame = frames[idx] # 获取当前帧 - label_bg.configure(image=frame) # 更新标签中显示的帧 - idx = (idx + 1) % len(frames) # 计算下一帧的索引 - root.after(100, upd, idx) # 100毫秒后调用自己继续更新帧 - -upd(0) # 开始播放gif动画 - -# 创建标签和文本框 -label_year = tk.Label(root, text="出生年:") -label_year.grid(row=0, column=0, padx=(60,10), pady=(140,10)) - -entry_year = tk.Entry(root) -entry_year.grid(row=0, column=1, pady=(140,10)) - -label_month = tk.Label(root, text="出生月:") -label_month.grid(row=1, column=0, padx=(60,10), pady=10) - -entry_month = tk.Entry(root) -entry_month.grid(row=1, column=1, pady=10) - -label_day = tk.Label(root, text="出生日:") -label_day.grid(row=2, column=0, padx=(60,10), pady=10) - -entry_day = tk.Entry(root) -entry_day.grid(row=2, column=1, pady=10) - -# 按钮点击处理函数 -# 点击提交按钮时调用,它获取用户输入的出生年月日,验证输入有效性,并显示对应的星座信息 -def click(): - year = entry_year.get() # 获取用户输入的出生年份 - month = entry_month.get() # 获取用户输入的出生月份 - day = entry_day.get() # 获取用户输入的出生日 - - # 检查用户输入的年、月、日是否为有效的数字 - if not year.isdigit() or not month.isdigit() or not day.isdigit(): - messagebox.showerror("输入错误", "请输入有效的日期") - - month = int(month) # 将月份转换为整数 - day = int(day) # 将日期转换为整数 - - # 检查日期是否在有效范围内 - if month < 1 or month > 12 or day < 1 or day > 31: - messagebox.showerror("输入错误", "请输入有效的日期") - - result = check(month, day) # 调用check函数获取星座信息 - messagebox.showinfo("星座", f"你的星座是:{result}") # 显示用户的星座信息 - -# 创建提交按钮 -btn = tk.Button(root, text="提交", command=click) -btn.grid(row=3, columnspan=2, padx=(80,10), pady=10) - -# 运行Tkinter主循环 -root.mainloop() diff --git a/第15讲 星座之谜/课堂成果/生肖计算助手.py b/第15讲 星座之谜/课堂成果/生肖计算助手.py deleted file mode 100644 index 63e882d..0000000 --- a/第15讲 星座之谜/课堂成果/生肖计算助手.py +++ /dev/null @@ -1,49 +0,0 @@ -'''【课后作业要求】 - -生肖计算助手 - -要求: - -1.窗口内有标签、单行文本输入框、提交按钮 - -2.输入正确的年份(1900-2100)后会弹出对话框显示生肖 - -3.输入的年份不在范围内或者不是数字格式,会弹出错误对话框 - -注意:判断生肖的函数check(year)已经预置好,可以直接调用;组件的位置可以自行调整,合理美观即可。''' -import tkinter as tk -from tkinter import messagebox - -root = tk.Tk() -root.geometry("300x200+600+300") -root.title("生肖计算助手") - - -# 预置内容,请勿改动 -def check(year): - sx = ["鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪"] - idx = (year - 1900) % 12 - return sx[idx] - - -def click(): - year = entry_year.get() - if not year.isdigit(): - messagebox.showerror("输入错误", "请输入有效的年份数值") - year = int(year) - if year < 1900 or year > 2100: - messagebox.showerror("输入错误", "请输入有效的年份数值") - result = check(year) - messagebox.showinfo("属相", f"您的生肖是:{result}") - - -label_year = tk.Label(root, text='出生年份:') -label_year.grid(row=0, column=0, padx=20, pady=50) - -entry_year = tk.Entry(root) -entry_year.grid(row=0, column=1, pady=50) - -btn = tk.Button(root, text='提交', command=click) -btn.grid(row=1, columnspan=2, padx=(60, 0)) - -root.mainloop() diff --git a/第16讲 中国地图我来拼(一)/56中国地图我来拼一讲义.pdf b/第16讲 中国地图我来拼(一)/56中国地图我来拼一讲义.pdf deleted file mode 100644 index 8713976..0000000 Binary files a/第16讲 中国地图我来拼(一)/56中国地图我来拼一讲义.pdf and /dev/null differ diff --git a/第16讲 中国地图我来拼(一)/中国地图我来拼(一).png b/第16讲 中国地图我来拼(一)/中国地图我来拼(一).png deleted file mode 100644 index 90c260b..0000000 Binary files a/第16讲 中国地图我来拼(一)/中国地图我来拼(一).png and /dev/null differ diff --git a/第16讲 中国地图我来拼(一)/课堂成果/中国地图我来拼.7z b/第16讲 中国地图我来拼(一)/课堂成果/中国地图我来拼.7z deleted file mode 100644 index db33f2d..0000000 Binary files a/第16讲 中国地图我来拼(一)/课堂成果/中国地图我来拼.7z and /dev/null differ diff --git a/第16讲 中国地图我来拼(一)/课堂成果/中国地图我来拼1.py b/第16讲 中国地图我来拼(一)/课堂成果/中国地图我来拼1.py deleted file mode 100644 index 1a05747..0000000 --- a/第16讲 中国地图我来拼(一)/课堂成果/中国地图我来拼1.py +++ /dev/null @@ -1,64 +0,0 @@ -# 预置内容,请勿改动 -a = {"01新疆碎片": (225, 231), "02西藏碎片": (244, 457), "03内蒙古碎片": (623, 203), - "04青海碎片": (383, 396), "05四川碎片": (491, 521), "06黑龙江碎片": (861, 122), - "07甘肃碎片": (472, 358), "08云南碎片": (457, 621), "09广西碎片": (580, 656), - "10湖南碎片": (640, 584), "11陕西碎片": (586, 415), "12河北碎片": (718, 330), - "13吉林碎片": (859, 228), "14湖北碎片": (654, 506), "15广东碎片": (678, 677), - "16贵州碎片": (549, 593), "17河南碎片": (672, 446), "18江西碎片": (724, 584), - "19山东碎片": (758, 392), "20山西碎片": (650, 369), "21辽宁碎片": (805, 284), - "22安徽碎片": (740, 487), "23福建碎片": (766, 609), "24江苏碎片": (770, 462), - "25浙江碎片": (793, 538), "26重庆碎片": (573, 525), "27宁夏碎片": (548, 375), - "28台湾碎片": (824, 652), "29海南碎片": (610, 753), "30北京碎片": (715, 310), - "31天津碎片": (730, 326), "32上海碎片": (818, 495)} # 省份文件名称和对应的正确位置 - -# 导入库 -import pgzrun -import os -import random - -# 设置窗口 -WIDTH = 1000 # 窗口的宽度 -HEIGHT = 800 # 窗口的高度 -# 设置窗口标题 -TITLE = '中国地图我来拼' - -# 初始值设置 -selected_piece = None # 当前被选择的碎片 -selected_name = None # 当前被选择的碎片名字 - -# 加载碎片 -pieces = [] -# 遍历指定文件夹中的所有文件 -for filename in os.listdir('images'): - if filename[-6:] == '碎片.png': # 只处理以碎片.png结尾的文件 - img = Actor(filename[:-4], (random.randint(0, WIDTH), random.randint(0, HEIGHT))) - pieces.append([img, filename[:-4], False]) # 添加所有碎片和碎片信息到列表 - -# 刷新屏幕 -def draw(): - screen.blit('中国地图背景',(0,0)) # 绘制背景 - # 绘制每个碎片 - for piece in pieces: - piece[0].draw() - -# 鼠标按下事件 -def on_mouse_down(pos): - global selected_piece, selected_name - for piece, name, placed in pieces: - if piece.collidepoint(pos) and not placed: # 检查是否点击到未正确放置的碎片 - selected_piece = piece # 记录选择的碎片 - selected_name = name # 记录碎片名称 - break - -# 鼠标移动事件 -def on_mouse_move(pos): - if selected_piece != None and 0 - pass - -# 启动游戏 -pgzrun.go() diff --git a/第17讲 中国地图我来拼(二)/57中国地图我来拼二讲义.pdf b/第17讲 中国地图我来拼(二)/57中国地图我来拼二讲义.pdf deleted file mode 100644 index f653f29..0000000 Binary files a/第17讲 中国地图我来拼(二)/57中国地图我来拼二讲义.pdf and /dev/null differ diff --git a/第17讲 中国地图我来拼(二)/中国地图我来拼(二).png b/第17讲 中国地图我来拼(二)/中国地图我来拼(二).png deleted file mode 100644 index 9364e72..0000000 Binary files a/第17讲 中国地图我来拼(二)/中国地图我来拼(二).png and /dev/null differ diff --git a/第17讲 中国地图我来拼(二)/课堂成果/中国地图我来拼.7z b/第17讲 中国地图我来拼(二)/课堂成果/中国地图我来拼.7z deleted file mode 100644 index db33f2d..0000000 Binary files a/第17讲 中国地图我来拼(二)/课堂成果/中国地图我来拼.7z and /dev/null differ diff --git a/第17讲 中国地图我来拼(二)/课堂成果/中国地图我来拼2.py b/第17讲 中国地图我来拼(二)/课堂成果/中国地图我来拼2.py deleted file mode 100644 index 214d8d5..0000000 --- a/第17讲 中国地图我来拼(二)/课堂成果/中国地图我来拼2.py +++ /dev/null @@ -1,69 +0,0 @@ -# 预置内容,请勿改动 -a = {"01新疆碎片": (225, 231), "02西藏碎片": (244, 457), "03内蒙古碎片": (623, 203), - "04青海碎片": (383, 396), "05四川碎片": (491, 521), "06黑龙江碎片": (861, 122), - "07甘肃碎片": (472, 358), "08云南碎片": (457, 621), "09广西碎片": (580, 656), - "10湖南碎片": (640, 584), "11陕西碎片": (586, 415), "12河北碎片": (718, 330), - "13吉林碎片": (859, 228), "14湖北碎片": (654, 506), "15广东碎片": (678, 677), - "16贵州碎片": (549, 593), "17河南碎片": (672, 446), "18江西碎片": (724, 584), - "19山东碎片": (758, 392), "20山西碎片": (650, 369), "21辽宁碎片": (805, 284), - "22安徽碎片": (740, 487), "23福建碎片": (766, 609), "24江苏碎片": (770, 462), - "25浙江碎片": (793, 538), "26重庆碎片": (573, 525), "27宁夏碎片": (548, 375), - "28台湾碎片": (824, 652), "29海南碎片": (610, 753), "30北京碎片": (715, 310), - "31天津碎片": (730, 326), "32上海碎片": (818, 495)} # 省份文件名称和对应的正确位置 - -# 导入库 -import pgzrun -import os -import random - -# 设置窗口 -WIDTH = 1000 # 窗口的宽度 -HEIGHT = 800 # 窗口的高度 -# 设置窗口标题 -TITLE = '中国地图我来拼' - -# 初始值设置 -selected_piece = None # 当前被选择的碎片 -selected_name = None # 当前被选择的碎片名字 - -# 加载碎片 -pieces = [] -# 遍历指定文件夹中的所有文件 -for filename in os.listdir('images'): - if filename[-6:] == '碎片.png': # 只处理以碎片.png结尾的文件 - img = Actor(filename[:-4], (random.randint(0, WIDTH), random.randint(0, HEIGHT))) - pieces.append([img, filename[:-4], False]) # 添加所有碎片和碎片信息到列表 - - -# 刷新屏幕 -def draw(): - screen.blit('中国地图背景', (0, 0)) # 绘制背景 - # 绘制每个碎片 - for piece in pieces: - piece[0].draw() - - -# 鼠标按下事件 -def on_mouse_down(pos): - global selected_piece, selected_name - for piece, name, placed in pieces: - if piece.collidepoint(pos) and not placed: # 检查是否点击到未正确放置的碎片 - selected_piece = piece # 记录选择的碎片 - selected_name = name # 记录碎片名称 - break - - -# 鼠标移动事件 -def on_mouse_move(pos): - if selected_piece != None and 0 < pos[0] < 1000 and 0 < pos[1] < 800: # 如果有选中碎片且鼠标未移出窗口,就随着鼠标移动 - selected_piece.pos = pos # 更新选中碎片的位置 - - -# 鼠标释放事件 -def on_mouse_up(pos): - # <检测碎片是否正确放置> - pass - - -# 启动游戏 -pgzrun.go() diff --git a/第18讲 火眼金睛(一)/58火眼金睛一讲义.pdf b/第18讲 火眼金睛(一)/58火眼金睛一讲义.pdf deleted file mode 100644 index 3e9ba9b..0000000 Binary files a/第18讲 火眼金睛(一)/58火眼金睛一讲义.pdf and /dev/null differ diff --git a/第18讲 火眼金睛(一)/火眼金睛(一).png b/第18讲 火眼金睛(一)/火眼金睛(一).png deleted file mode 100644 index 85cf527..0000000 Binary files a/第18讲 火眼金睛(一)/火眼金睛(一).png and /dev/null differ diff --git a/第18讲 火眼金睛(一)/课堂成果/火眼金睛.7z b/第18讲 火眼金睛(一)/课堂成果/火眼金睛.7z deleted file mode 100644 index f190132..0000000 Binary files a/第18讲 火眼金睛(一)/课堂成果/火眼金睛.7z and /dev/null differ diff --git a/第18讲 火眼金睛(一)/课堂成果/火眼金睛1.py b/第18讲 火眼金睛(一)/课堂成果/火眼金睛1.py deleted file mode 100644 index 752ff78..0000000 --- a/第18讲 火眼金睛(一)/课堂成果/火眼金睛1.py +++ /dev/null @@ -1,48 +0,0 @@ -import pgzrun -import random - -# 设置窗口 -WIDTH = 1000 # 窗口的宽度 -HEIGHT = 725 # 窗口的高度 - -def draw(): - screen.blit('火眼金睛.png', (0, 0)) - for grid in grids: - screen.draw.filled_rect(Rect(grid['pos'], (side, side)), 'white') - -def update(): - pass - -def base_color(): - """生成随机基础颜色""" - return (random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255)) - -def dif_color(base): - """ - 参数: - base:表示基础颜色的元组,格式为(r,g,b) - """ - r = min(base[0] + random.randint(20, 30), 255) - g = min(base[1] + random.randint(20, 30), 255) - b = min(base[2] + random.randint(20, 30), 255) - return (r, g, b) - -# 初始为3×3的矩阵 -n = 3 -# 根据格子数量计算格子边长和间距 -side = 700 // n * 0.9 -space = 700 // n * 0.1 -# 创建列表grids,后面存储每个方格信息 -grids = [] -for row in range(n): # 遍历行 - for col in range(n): # 遍历列 - info = { - 'pos': (space + col * (side + space), space + row * (side + space)), - 'color': 'white' # 测试用,后续及时更新对应颜色  - } - grids.append(info) - -# 启动游戏 -pgzrun.go() \ No newline at end of file diff --git a/第18讲 火眼金睛(一)/课堂成果/课后作业-五阶橙色矩阵.py b/第18讲 火眼金睛(一)/课堂成果/课后作业-五阶橙色矩阵.py deleted file mode 100644 index 76dbbc3..0000000 --- a/第18讲 火眼金睛(一)/课堂成果/课后作业-五阶橙色矩阵.py +++ /dev/null @@ -1,39 +0,0 @@ -''' - -五阶橙色矩阵 - -要求如下: - -1. 方块边长为40,间距为5 - -2. 绘制五阶矩阵方块 - -3. 方块为橙色‘orange’''' - -# 导入pgzero库 -import pgzrun - -# 设置窗口 -WIDTH = 725 # 窗口的宽度 -HEIGHT = 725 # 窗口的高度 - -def draw(): - for grid in grids: - screen.draw.filled_rect(Rect(grid['pos'], (side, side)), 'orange') - -# 五阶矩阵 -n = 5 -# 提供边长和间距 -side = 40 -space = 5 -# 创建列表grids,后面存储每个方格信息 -grids = [] -for row in range(n): # 遍历行 - for col in range(n): # 遍历列 - info = { - 'pos': (space + col * (side + space), space + row * (side + space)), - } - grids.append(info) - -# 启动游戏 -pgzrun.go() \ No newline at end of file diff --git a/第19讲 火眼金睛(二)/59火眼金睛二讲义.pdf b/第19讲 火眼金睛(二)/59火眼金睛二讲义.pdf deleted file mode 100644 index cd4e3db..0000000 Binary files a/第19讲 火眼金睛(二)/59火眼金睛二讲义.pdf and /dev/null differ diff --git a/第19讲 火眼金睛(二)/火眼金睛(二).png b/第19讲 火眼金睛(二)/火眼金睛(二).png deleted file mode 100644 index 17286df..0000000 Binary files a/第19讲 火眼金睛(二)/火眼金睛(二).png and /dev/null differ diff --git a/第19讲 火眼金睛(二)/课堂成果/火眼金睛.7z b/第19讲 火眼金睛(二)/课堂成果/火眼金睛.7z deleted file mode 100644 index f190132..0000000 Binary files a/第19讲 火眼金睛(二)/课堂成果/火眼金睛.7z and /dev/null differ diff --git a/第19讲 火眼金睛(二)/课堂成果/火眼金睛.py b/第19讲 火眼金睛(二)/课堂成果/火眼金睛.py deleted file mode 100644 index 21057c6..0000000 --- a/第19讲 火眼金睛(二)/课堂成果/火眼金睛.py +++ /dev/null @@ -1,82 +0,0 @@ -import pgzrun -import random -import time - -WIDTH = 1000 # 窗口的宽度 -HEIGHT = 725 # 窗口的高度 - -def draw(): - screen.blit('火眼金睛.png', (0, 0)) - if win: - screen.blit('游戏成功.png', (0, 0)) - screen.draw.text(f"{total_t:.1f}", center=(520, 570), fontsize=90, color="yellow") - else: - screen.draw.text(f"{t:.1f} s", center=(900, 662), fontsize=40, color="yellow") - for grid in grids: - screen.draw.filled_rect(Rect(grid['pos'], (side, side)), grid['color']) - -def update(): - """更新函数,用于实时更新游戏状态相关信息,这里主要更新总耗时""" - global t - t = time.time() - start_t - -def base_color(): - """生成随机基础颜色""" - return (random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255)) - -def dif_color(base): - """ - 参数: - base:表示基础颜色的元组,格式为(r,g,b) - """ - r = min(base[0] + random.randint(20, 30), 255) - g = min(base[1] + random.randint(20, 30), 255) - b = min(base[2] + random.randint(20, 30), 255) - return (r, g, b) - -def game(): - global grids, side, dc - # 根据格子数量计算格子边长和间距 - side = 700 // n * 0.9 - space = 700 // n * 0.1 - # 创建列表grids,后面存储每个方格信息 - grids = [] - # 获取基础色和异色 - bc = base_color() - dc = dif_color(bc) - # 记录方格编号 - i = 1 - # 随机选择一个位置的方格设置略微不同的颜色 - dif_index = random.randint(1, n * n) - for row in range(n): - for col in range(n): - info = { - 'pos': (space + col * (side + space), - space + row * (side + space)), - 'color': dc if i == dif_index else bc - } - grids.append(info) - i += 1 - -def on_mouse_down(pos): - global n, win, total_t - for grid in grids: - grid_rect = Rect(grid['pos'], (side, side)) - if grid_rect.collidepoint(pos) and grid['color'] == dc: - if n > 10: - win = True - total_t = t - else: - n += 1 # 进入下一关 - game() - -# 初始化游戏参数 -n = 3 # 初始为3×3的矩阵 -win = False # 记录游戏成功状态 -start_t = time.time() # 记录开始时间 -game() - -# 启动游戏 -pgzrun.go() \ No newline at end of file diff --git a/第19讲 火眼金睛(二)/课堂成果/课后作业-作品优化 .py b/第19讲 火眼金睛(二)/课堂成果/课后作业-作品优化 .py deleted file mode 100644 index 5d1f685..0000000 --- a/第19讲 火眼金睛(二)/课堂成果/课后作业-作品优化 .py +++ /dev/null @@ -1,89 +0,0 @@ -'''作品优化 —— 增大游戏难度 - -提示: - -1. 增加关卡数量 - -2. 减小基础色和异色的区别''' -import pgzrun -import random -import time - -WIDTH = 1000 # 窗口的宽度 -HEIGHT = 725 # 窗口的高度 - -def draw(): - screen.blit('火眼金睛.png', (0, 0)) - if win: - screen.blit('游戏成功.png', (0, 0)) - screen.draw.text(f"{total_t:.1f}", center=(520, 570), fontsize=90, color="yellow") - else: - screen.draw.text(f"{t:.1f} s", center=(900, 662), fontsize=40, color="yellow") - for grid in grids: - screen.draw.filled_rect(Rect(grid['pos'], (side, side)), grid['color']) - -def update(): - """更新函数,用于实时更新游戏状态相关信息,这里主要更新总耗时""" - global t - t = time.time() - start_t - -def base_color(): - """生成随机基础颜色""" - return (random.randint(0, 255), - random.randint(0, 255), - random.randint(0, 255)) - -def dif_color(base): - """ - 参数: - base:表示基础颜色的元组,格式为(r,g,b) - """ - r = min(base[0] + random.randint(20, 25), 255) - g = min(base[1] + random.randint(20, 25), 255) - b = min(base[2] + random.randint(20, 25), 255) - return (r, g, b) - -def game(): - global grids, side, dc - # 根据格子数量计算格子边长和间距 - side = 700 // n * 0.9 - space = 700 // n * 0.1 - # 创建列表grids,后面存储每个方格信息 - grids = [] - # 获取基础色和异色 - bc = base_color() - dc = dif_color(bc) - # 记录方格编号 - i = 1 - # 随机选择一个位置的方格设置略微不同的颜色 - dif_index = random.randint(1, n * n) - for row in range(n): - for col in range(n): - info = { - 'pos': (space + col * (side + space), - space + row * (side + space)), - 'color': dc if i == dif_index else bc - } - grids.append(info) - i += 1 - -def on_mouse_down(pos): - global n, win, total_t - for grid in grids: - grid_rect = Rect(grid['pos'], (side, side)) - if grid_rect.collidepoint(pos) and grid['color'] == dc: - if n > 20: - win = True - total_t = t - else: - n += 1 # 进入下一关 - game() - -# 初始化游戏参数 -n = 3 # 初始为3×3的矩阵 -win = False # 记录游戏成功状态 -start_t = time.time() # 记录开始时间 -game() - -# 启动游戏 -pgzrun.go() \ No newline at end of file diff --git a/第1讲 点名系统/41点名系统讲义.pdf b/第1讲 点名系统/41点名系统讲义.pdf deleted file mode 100644 index 3b4e146..0000000 Binary files a/第1讲 点名系统/41点名系统讲义.pdf and /dev/null differ diff --git a/第1讲 点名系统/点名系统.png b/第1讲 点名系统/点名系统.png deleted file mode 100644 index 26c2905..0000000 Binary files a/第1讲 点名系统/点名系统.png and /dev/null differ diff --git a/第1讲 点名系统/课堂成果/点名.png b/第1讲 点名系统/课堂成果/点名.png deleted file mode 100644 index 2c554c7..0000000 Binary files a/第1讲 点名系统/课堂成果/点名.png and /dev/null differ diff --git a/第1讲 点名系统/课堂成果/点名系统.py b/第1讲 点名系统/课堂成果/点名系统.py deleted file mode 100644 index d51399a..0000000 --- a/第1讲 点名系统/课堂成果/点名系统.py +++ /dev/null @@ -1,40 +0,0 @@ -# 导入所需要的库 -from tkinter import * -import random - -# 创建主窗口 -root = Tk() -root.geometry('500x150+300+500') -root.title('点名系统') - -bg_image = PhotoImage(file = '点名.png') - -bg_label = Label(root, image = bg_image) -bg_label.place(x=0, y=0, relwidth=1, relheight=1) - -# 设置全局变量 -var = StringVar() # 这个变量用来显示在标签上的名字 -names = ['小明', '红红', '粘豆包', '牛牛'] # 这个列表存储学生的名字 -flag = False # 这个标志用来表示是否正在进行点名 - -# 定义一个函数,用来进行点名 -def roll(): - if flag: # 如果正在进行点名,那么显示一个随机的名字 - var.set(random.choice(names)) - root.after(10, roll) # 在10毫秒后,再次调用这个函数 - -# 定义一个函数,用来切换点名状态 -def check(): - global flag # 声明我们要使用的是全局变量,而不是创建一个新的局部变量 - if flag: # 如果正在进行点名,那么停止点名 - flag = False - else: # 否则,开始点名 - flag = True - roll() - -# 创建并配置标签和按钮 -Label(root, textvariable=var, font=('楷体', 50)).pack() -Button(root, text="开始/停止点名", command=check).pack() - -# 启动事件循环 -root.mainloop() diff --git a/第1讲 点名系统/课堂成果/课后作业-晚饭吃什么.py b/第1讲 点名系统/课堂成果/课后作业-晚饭吃什么.py deleted file mode 100644 index 4e946be..0000000 --- a/第1讲 点名系统/课堂成果/课后作业-晚饭吃什么.py +++ /dev/null @@ -1,45 +0,0 @@ -'''【课后作业要求】 -晚饭吃什么 - -要求: - -1. 点击按钮食物开始滚动 - -2. 再次点击按钮食物停止滚动,显示晚饭要吃的食物 - -3. 修改合适的题目和按钮文本''' -# 导入所需要的库 -from tkinter import * -import random - -# 创建主窗口 -root = Tk() -root.geometry('300x100+300+500') -root.title('晚饭吃什么') - -# 设置全局变量 -var = StringVar() -foods = ['火锅', '烤肉', '炒菜', '烧烤'] -rolling = False - -# 定义一个函数,用来滚动清单 -def roll_food(): - if rolling: - var.set(random.choice(foods)) - root.after(10, roll_food) - -# 定义一个函数,用来切换按钮状态 -def toggle_roll(): - global rolling - if rolling: - rolling = False - else: - rolling = True - roll_food() - -# 创建并配置标签和按钮 -Label(root, textvariable=var, font=('楷体', 40)).pack() -Button(root, text="开始/停止滚动", command=toggle_roll).pack() - -# 启动事件循环 -root.mainloop() diff --git a/第20讲 疯狂的摩托(一)/60疯狂的摩托一讲义.pdf b/第20讲 疯狂的摩托(一)/60疯狂的摩托一讲义.pdf deleted file mode 100644 index 7bcac59..0000000 Binary files a/第20讲 疯狂的摩托(一)/60疯狂的摩托一讲义.pdf and /dev/null differ diff --git a/第20讲 疯狂的摩托(一)/疯狂的摩托(一).png b/第20讲 疯狂的摩托(一)/疯狂的摩托(一).png deleted file mode 100644 index 98a97d9..0000000 Binary files a/第20讲 疯狂的摩托(一)/疯狂的摩托(一).png and /dev/null differ diff --git a/第20讲 疯狂的摩托(一)/课堂成果/疯狂的摩托.7z b/第20讲 疯狂的摩托(一)/课堂成果/疯狂的摩托.7z deleted file mode 100644 index ae5c863..0000000 Binary files a/第20讲 疯狂的摩托(一)/课堂成果/疯狂的摩托.7z and /dev/null differ diff --git a/第20讲 疯狂的摩托(一)/课堂成果/疯狂的摩托1 .py b/第20讲 疯狂的摩托(一)/课堂成果/疯狂的摩托1 .py deleted file mode 100644 index 55cda70..0000000 --- a/第20讲 疯狂的摩托(一)/课堂成果/疯狂的摩托1 .py +++ /dev/null @@ -1,68 +0,0 @@ -import pgzrun -import random -from pgzhelper import * - -# 游戏窗口大小 -WIDTH = 1500 -HEIGHT = 800 - -# 创建背景角色 -bg1 = Actor('连续道路', topleft = (0,0)) -bg2 = Actor('连续道路', topleft = (1500,0)) - -# 创建障碍物 -obstacles = [] -for _ in range(3): # 障碍物数量 - x = random.randint(WIDTH, WIDTH + 1500) # 障碍物出现在屏幕右侧外 - y = random.randint(100, HEIGHT - 50) - obstacles.append(Actor('路障', (x, y))) - -# 创建摩托车 -motor = Actor('摩托1', (200, HEIGHT // 2)) -# 将摩托造型存放在列表内 -motor.images = ['摩托1','摩托2'] - -# 初始化设置 -speed = 15 - -def draw(): - # 绘制连续背景 - bg1.draw() - bg2.draw() - # 绘制障碍物 - for obs in obstacles: - obs.draw() - # 绘制摩托 - motor.draw() - -# 背景、终点线移动 -def bg_move(): - bg1.x -= speed - bg2.x -= speed - if bg1.right <= 0: - bg1.left = bg2.right - if bg2.right <= 0: - bg2.left = bg1.right - -# 更新障碍物位置 -def obs_move(): - for obs in obstacles: - obs.x -= speed # 障碍物随背景一起移动 - if obs.x < 0: - obs.x = random.randint(WIDTH, WIDTH + 1500) # 障碍物继续出现在屏幕外 - obs.y = random.randint(100, HEIGHT - 50) - -def update(): - bg_move() - obs_move() - # 控制赛车移动,限制不能出界 - if keyboard.up and motor.top > 0: - motor.y -= 7 - if keyboard.down and motor.bottom < HEIGHT-50: - motor.y += 7 - -def change_image(): - motor.next_image() -clock.schedule_interval(change_image,0.2) - -pgzrun.go() \ No newline at end of file diff --git a/第20讲 疯狂的摩托(一)/课堂成果/课后作业-小城漫步.py b/第20讲 疯狂的摩托(一)/课堂成果/课后作业-小城漫步.py deleted file mode 100644 index 45f99c9..0000000 --- a/第20讲 疯狂的摩托(一)/课堂成果/课后作业-小城漫步.py +++ /dev/null @@ -1,48 +0,0 @@ -'''小城漫步 - -要求如下: - -1. ‘白日街景’、‘夜晚街景’两图滚动出现 - -2. ‘走1’、‘走2’两图,实现博克斯走路动效 - -3. 按下键盘右键,背景滚动''' -import pgzrun -from pgzhelper import * - -WIDTH = 960 -HEIGHT = 720 - -# 创建背景角色 -bg1 = Actor('白日街景', topleft=(0, 0)) -bg2 = Actor('夜晚街景', topleft=(960, 0)) -# 创建博克斯角色 -people = Actor('走1', (200, 500)) -people.images = ['走1', '走2'] -# 初始化速度 -speed = 10 - - -def draw(): - bg1.draw() - bg2.draw() - people.draw() - - -def update(): - if keyboard.right: - bg1.x -= speed - bg2.x -= speed - if bg1.right <= 0: - bg1.left = bg2.right - if bg2.right <= 0: - bg2.left = bg1.right - - -def change_image(): - people.next_image() - - -clock.schedule_interval(change_image, 0.5) - -pgzrun.go() \ No newline at end of file diff --git a/第21讲 疯狂的摩托(二)/61疯狂的摩托二讲义.pdf b/第21讲 疯狂的摩托(二)/61疯狂的摩托二讲义.pdf deleted file mode 100644 index 3a75e25..0000000 Binary files a/第21讲 疯狂的摩托(二)/61疯狂的摩托二讲义.pdf and /dev/null differ diff --git a/第21讲 疯狂的摩托(二)/疯狂的摩托(二).png b/第21讲 疯狂的摩托(二)/疯狂的摩托(二).png deleted file mode 100644 index 4f7a237..0000000 Binary files a/第21讲 疯狂的摩托(二)/疯狂的摩托(二).png and /dev/null differ diff --git a/第21讲 疯狂的摩托(二)/课堂成果/疯狂的摩托.7z b/第21讲 疯狂的摩托(二)/课堂成果/疯狂的摩托.7z deleted file mode 100644 index ae5c863..0000000 Binary files a/第21讲 疯狂的摩托(二)/课堂成果/疯狂的摩托.7z and /dev/null differ diff --git a/第21讲 疯狂的摩托(二)/课堂成果/疯狂的摩托.py b/第21讲 疯狂的摩托(二)/课堂成果/疯狂的摩托.py deleted file mode 100644 index 4382974..0000000 --- a/第21讲 疯狂的摩托(二)/课堂成果/疯狂的摩托.py +++ /dev/null @@ -1,109 +0,0 @@ -import pgzrun -import random -from pgzhelper import * - -# 游戏窗口大小 -WIDTH = 1500 -HEIGHT = 800 - -# 创建背景角色 -bg1 = Actor('连续道路', topleft = (0,0)) -bg2 = Actor('连续道路', topleft = (1500,0)) - -# 创建障碍物 -obstacles = [] -for _ in range(3): # 障碍物数量 - x = random.randint(WIDTH, WIDTH + 1500) # 障碍物出现在屏幕右侧外 - y = random.randint(100, HEIGHT - 50) - obstacles.append(Actor('路障', (x, y))) - -# 创建摩托车 -motor = Actor('摩托1', (200, HEIGHT // 2)) -# 将摩托造型存放在列表内 -motor.images = ['摩托1','摩托2'] - -# 创建终点线 -line = Actor('终点线', topleft = (20000, 163)) - -# 初始化设置 -speed = 15 -flag = 0 - -def draw(): - # 绘制连续背景 - bg1.draw() - bg2.draw() - if flag == 1: - music.stop() - screen.blit('摩托成功', (0,0)) - elif flag == 2: - music.stop() - screen.blit('摩托失败', (0,0)) - else: - # 绘制障碍物 - for obs in obstacles: - obs.draw() - # 绘制摩托 - motor.draw() - # 绘制终点线 - line.draw() - # 绘制距离文字 - x = int(line.x-motor.x) - screen.draw.text(f'距终点:{x} m', (50,700), fontname = 'simkai', fontsize = 50) - -# 背景、终点线移动 -def bg_move(): - bg1.x -= speed - bg2.x -= speed - if bg1.right <= 0: - bg1.left = bg2.right - if bg2.right <= 0: - bg2.left = bg1.right - line.x -= speed - -# 更新障碍物位置 -def obs_move(): - for obs in obstacles: - obs.x -= speed # 障碍物随背景一起移动 - if obs.x < 0: - obs.x = random.randint(WIDTH, WIDTH + 1500) # 障碍物继续出现在屏幕外 - obs.y = random.randint(100, HEIGHT - 50) - -# 最后冲刺 -def line_collide(): - global flag - if motor.collide_pixel(line): - flag = 1 - sounds.胜利.play() - else: - motor.x += 15 - -# 判断是否与障碍物相撞 -def obs_collide(): - global flag - for obs in obstacles: - if motor.collide_pixel(obs): - flag = 2 - sounds.失败.play() - -def update(): - if flag == 0: - if line.x > WIDTH - 200: # 正常行驶 - bg_move() - obs_move() - else: # 最后冲刺 - line_collide() - # 控制赛车移动,限制不能出界 - if keyboard.up and motor.top > 0: - motor.y -= 7 - if keyboard.down and motor.bottom < HEIGHT-50: - motor.y += 7 - # 是否碰撞障碍物 - obs_collide() - -def change_image(): - motor.next_image() -clock.schedule_interval(change_image,0.2) -music.play('速度与激情') - -pgzrun.go() \ No newline at end of file diff --git a/第21讲 疯狂的摩托(二)/课堂成果/课后作业 -游戏优化py b/第21讲 疯狂的摩托(二)/课堂成果/课后作业 -游戏优化py deleted file mode 100644 index bd9eceb..0000000 --- a/第21讲 疯狂的摩托(二)/课堂成果/课后作业 -游戏优化py +++ /dev/null @@ -1,153 +0,0 @@ -'''游戏优化 - -要求如下: - -1. 绘制‘钻石’角色 - -2. 钻石随背景同步移动,移出舞台后从右侧重新进入 - -3. 摩托碰到钻石后,钻石从右侧重新进入 - -4. 变量 score 记录收集到的钻石数量 - -5. 在窗口内,绘制文字‘收集宝石:×颗’''' -import pgzrun -import random -from pgzhelper import * - -# 游戏窗口大小 -WIDTH = 1500 -HEIGHT = 800 - -# 创建背景角色 -bg1 = Actor('连续道路', topleft=(0, 0)) -bg2 = Actor('连续道路', topleft=(1500, 0)) - -# 创建障碍物 -obstacles = [] -for _ in range(3): # 障碍物数量 - x = random.randint(WIDTH, WIDTH + 1500) # 障碍物出现在屏幕右侧外 - y = random.randint(100, HEIGHT - 50) - obstacles.append(Actor('路障', (x, y))) - -# 创建摩托车 -motor = Actor('摩托1', (200, HEIGHT // 2)) -# 将摩托造型存放在列表内 -motor.images = ['摩托1', '摩托2'] - -# 创建终点线 -line = Actor('终点线', topleft=(20000, 163)) - -# 创建钻石 -zuan = Actor('钻石', topleft=(WIDTH + 100, random.randint(100, HEIGHT - 50))) - -# 初始化设置 -speed = 15 -flag = 0 -score = 0 - - -def draw(): - # 绘制连续背景 - bg1.draw() - bg2.draw() - if flag == 1: - music.stop() - screen.blit('摩托成功', (0, 0)) - elif flag == 2: - music.stop() - screen.blit('摩托失败', (0, 0)) - else: - # 绘制障碍物 - for obs in obstacles: - obs.draw() - # 绘制摩托 - motor.draw() - # 绘制终点线 - line.draw() - # 绘制钻石 - zuan.draw() - # 绘制距离文字 - x = int(line.x - motor.x) - screen.draw.text(f'距终点:{x} m', (50, 700), fontname='simkai', fontsize=50) - # 绘制钻石数量文字 - screen.draw.text(f'收集钻石:{score}颗', (50, 100), fontname='simkai', fontsize=50) - - -# 背景、终点线移动 -def bg_move(): - bg1.x -= speed - bg2.x -= speed - if bg1.right <= 0: - bg1.left = bg2.right - if bg2.right <= 0: - bg2.left = bg1.right - line.x -= speed - zuan.x -= speed - if zuan.x <= 0: - zuan.x = random.randint(WIDTH, WIDTH + 1500) - zuan.y = random.randint(100, HEIGHT - 50) - - # 更新障碍物位置 - - -def obs_move(): - for obs in obstacles: - obs.x -= speed # 障碍物随背景一起移动 - if obs.x < 0: - obs.x = random.randint(WIDTH, WIDTH + 1500) # 障碍物继续出现在屏幕外 - obs.y = random.randint(100, HEIGHT - 50) - - -# 最后冲刺 -def line_collide(): - global flag - if motor.collide_pixel(line): - flag = 1 - else: - motor.x += 15 - - -# 判断是否与障碍物相撞 -def obs_collide(): - global flag - for obs in obstacles: - if motor.collide_pixel(obs): - flag = 2 - - -# 收集钻石 -def zuan_collide(): - global score - if motor.collide_pixel(zuan): - score += 1 - zuan.x = random.randint(WIDTH, WIDTH + 1500) - zuan.y = random.randint(100, HEIGHT - 50) - - -def update(): - if flag == 0: - if line.x > WIDTH - 200: # 正常行驶 - bg_move() - obs_move() - else: # 最后冲刺 - line_collide() - # 控制赛车移动,限制不能出界 - if keyboard.up and motor.top > 0: - motor.y -= 7 - if keyboard.down and motor.bottom < HEIGHT - 50: - motor.y += 7 - # 是否碰撞障碍物 - obs_collide() - # 是否碰到钻石 - zuan_collide() - - -def change_image(): - motor.next_image() - - -clock.schedule_interval(change_image, 0.2) -music.play('速度与激情') - -pgzrun.go() \ No newline at end of file diff --git a/第2讲 弹幕/42弹幕讲义.pdf b/第2讲 弹幕/42弹幕讲义.pdf deleted file mode 100644 index 5fd58ee..0000000 Binary files a/第2讲 弹幕/42弹幕讲义.pdf and /dev/null differ diff --git a/第2讲 弹幕/弹幕.png b/第2讲 弹幕/弹幕.png deleted file mode 100644 index 489a24f..0000000 Binary files a/第2讲 弹幕/弹幕.png and /dev/null differ diff --git a/第2讲 弹幕/课堂成果/kuang.png b/第2讲 弹幕/课堂成果/kuang.png deleted file mode 100644 index cbbaffd..0000000 Binary files a/第2讲 弹幕/课堂成果/kuang.png and /dev/null differ diff --git a/第2讲 弹幕/课堂成果/tv.png b/第2讲 弹幕/课堂成果/tv.png deleted file mode 100644 index 5eae63b..0000000 Binary files a/第2讲 弹幕/课堂成果/tv.png and /dev/null differ diff --git a/第2讲 弹幕/课堂成果/弹幕.py b/第2讲 弹幕/课堂成果/弹幕.py deleted file mode 100644 index 86200df..0000000 --- a/第2讲 弹幕/课堂成果/弹幕.py +++ /dev/null @@ -1,43 +0,0 @@ -import tkinter as tk -import random -import threading -import time -from PIL import Image, ImageTk - -class MovingLabel(threading.Thread): - def __init__(self, window, text): - threading.Thread.__init__(self) - self.text = text - self.label = tk.Label(window, image=kuang,text=self.text, compound="center",font=("黑体",20),fg='white',width=190,height=45) - self.label.place(x=800, y=random.randint(50, 400)) - - def run(self): - x = 800 - while x > -200: - x -= 2 - self.label.place(x=x) - time.sleep(0.02) - self.label.destroy() - -def send(): - text = e1.get() - ml = MovingLabel(window, text) - ml.start() - -window = tk.Tk() -window.geometry('1000x670') -window.resizable(0,0) -kuang = ImageTk.PhotoImage(file='kuang.png') - -bg_image = Image.open("tv.png") -bg_image = ImageTk.PhotoImage(bg_image) -bg_label = tk.Label(window, image=bg_image) -bg_label.pack() - -e1=tk.Entry(window, font=("黑体", 20)) -e1.place(x=280,y=620) - -b1=tk.Button(window, text="发送弹幕", font=("黑体", 20), command=send) -b1.place(x=580,y=613) - -window.mainloop() diff --git a/第2讲 弹幕/课堂成果/课后作业.py b/第2讲 弹幕/课堂成果/课后作业.py deleted file mode 100644 index 4ff18d8..0000000 --- a/第2讲 弹幕/课堂成果/课后作业.py +++ /dev/null @@ -1,44 +0,0 @@ -import tkinter as tk -import random -import threading -import time -from PIL import Image, ImageTk - -class MovingLabel(threading.Thread): - def __init__(self, window, text): - threading.Thread.__init__(self) - self.text = text - self.label = tk.Label(window, image=kuang,text=self.text, compound="center",font=("黑体",20),fg='white',width=190,height=45) - #self.label.place(x=800, y=random.randint(10, 550)) - self.label.place(x=random.randint(10, 550), y=300) - - def run(self): - y = 500 - while y > 0: - y -= 2 - self.label.place(y=y) - time.sleep(0.02) - self.label.destroy() - -def send(): - text = e1.get() - ml = MovingLabel(window, text) - ml.start() - -window = tk.Tk() -window.geometry('1000x670') -window.resizable(0,0) -kuang = ImageTk.PhotoImage(file='kuang.png') - -bg_image = Image.open("tv.png") -bg_image = ImageTk.PhotoImage(bg_image) -bg_label = tk.Label(window, image=bg_image) -bg_label.pack() - -e1=tk.Entry(window, font=("黑体", 20)) -e1.place(x=280,y=620) - -b1=tk.Button(window, text="发送弹幕", font=("黑体", 20), command=send) -b1.place(x=580,y=613) - -window.mainloop() \ No newline at end of file diff --git a/第3讲 二维码生成器/43二维码生成器讲义.pdf b/第3讲 二维码生成器/43二维码生成器讲义.pdf deleted file mode 100644 index 7273a47..0000000 Binary files a/第3讲 二维码生成器/43二维码生成器讲义.pdf and /dev/null differ diff --git a/第3讲 二维码生成器/二维码生成器.png b/第3讲 二维码生成器/二维码生成器.png deleted file mode 100644 index a6e76fe..0000000 Binary files a/第3讲 二维码生成器/二维码生成器.png and /dev/null differ diff --git a/第3讲 二维码生成器/课堂成果/qrcode_bg.png b/第3讲 二维码生成器/课堂成果/qrcode_bg.png deleted file mode 100644 index e296776..0000000 Binary files a/第3讲 二维码生成器/课堂成果/qrcode_bg.png and /dev/null differ diff --git a/第3讲 二维码生成器/课堂成果/二维码生成器.py b/第3讲 二维码生成器/课堂成果/二维码生成器.py deleted file mode 100644 index 7e314e5..0000000 --- a/第3讲 二维码生成器/课堂成果/二维码生成器.py +++ /dev/null @@ -1,38 +0,0 @@ -# 编程前,运行【安装第三方库.py】文件,安装本课用到的第三方库 - -import tkinter -from PIL import Image, ImageTk -from tkinter import filedialog -import os -from amzqr import amzqr -w = tkinter.Tk() -w.geometry("400x400") -w.resizable(0,0) - -bg_image = Image.open("qrcode_bg.png") -bg_image = ImageTk.PhotoImage(bg_image) -bg_label = tkinter.Label(w, image=bg_image) -bg_label.pack() - -t1 = tkinter.Text(w, font=("微软雅黑", 12),width=30,height=5) -t1.place(x=80, y=100) -t2 = tkinter.Text(w, font=("微软雅黑", 12),width=23,height=1) -t2.place(x=80, y=250) -def get_pic(): - pic_path = filedialog.askopenfilename() - t2.delete("1.0", "end") - t2.insert("1.0", pic_path) - -btn1 = tkinter.Button(w, text="浏览", font=("微软雅黑", 12), command=get_pic) -btn1.place(x=312, y=250, height=25) -def qr(): - words = t1.get("1.0","end") - words = "".join(words.split('\n')) - picture = t2.get("1.0", "end")[:-1] - version, level, qr_name = amzqr.run(words=words, picture=picture, colorized=True) - os.system(qr_name) - -btn2 = tkinter.Button(w, text="生成二维码", font=("微软雅黑", 15), command=qr) -btn2.place(x=80, y=300, width=250) -w.mainloop() - diff --git a/第3讲 二维码生成器/课堂成果/安装第三方库.py b/第3讲 二维码生成器/课堂成果/安装第三方库.py deleted file mode 100644 index bef3c4e..0000000 --- a/第3讲 二维码生成器/课堂成果/安装第三方库.py +++ /dev/null @@ -1,7 +0,0 @@ -# 点击运行【安装第三方库.py】,即可安装本课用到的第三方库 - -import pip -pip.main(['install','jieba']) -pip.main(['install','wordcloud']) -#pip.main(['install','pillow']) -#pip.main(['install','numpy']) \ No newline at end of file diff --git a/第4讲 邮箱轰炸1/44邮箱轰炸1讲义.pdf b/第4讲 邮箱轰炸1/44邮箱轰炸1讲义.pdf deleted file mode 100644 index a754df2..0000000 Binary files a/第4讲 邮箱轰炸1/44邮箱轰炸1讲义.pdf and /dev/null differ diff --git a/第4讲 邮箱轰炸1/课堂成果/email.png b/第4讲 邮箱轰炸1/课堂成果/email.png deleted file mode 100644 index 29670eb..0000000 Binary files a/第4讲 邮箱轰炸1/课堂成果/email.png and /dev/null differ diff --git a/第4讲 邮箱轰炸1/课堂成果/课后作业.py b/第4讲 邮箱轰炸1/课堂成果/课后作业.py deleted file mode 100644 index 807ee45..0000000 --- a/第4讲 邮箱轰炸1/课堂成果/课后作业.py +++ /dev/null @@ -1,21 +0,0 @@ -import smtplib -from email.mime.text import MIMEText -from email.utils import formataddr -import time - -to=input("输入收件人:") -count=int(input("发送次数:")) -user='zhangsan444444z@163.com' -password='FMORERKAQJWEBSUX' -subject = "新年祝福" -content = "新年快乐,祝您新年大吉!" -msg = MIMEText(content,'html','utf-8') -msg['Subject'] = subject -msg['From'] = formataddr(('张三',user)) -msg['to'] = to -s = smtplib.SMTP_SSL("smtp.163.com", 465) -s.login(user, password) -for i in range(count): - s.sendmail(user, to, msg.as_string()) - print('成功') - time.sleep(2) diff --git a/第4讲 邮箱轰炸1/课堂成果/邮箱轰炸1.py b/第4讲 邮箱轰炸1/课堂成果/邮箱轰炸1.py deleted file mode 100644 index b6c9e16..0000000 --- a/第4讲 邮箱轰炸1/课堂成果/邮箱轰炸1.py +++ /dev/null @@ -1,35 +0,0 @@ -# 1 导入模块 -import smtplib -from email.mime.text import MIMEText #往邮件中写内容的对象 -from email.utils import formataddr #发件人信息 -import time - -# 2 发送方和接收方配置 -# 发件方邮箱:谁发送的 -user='zhangsan444444z@163.com' -# 生成的授权码:不能泄露 -password='FMORERKAQJWEBSUX' -# # 发送给谁,可以写多个人,以列表形式存储 -to="zhangsan444444z@163.com" - -subject = "新年祝福" # 邮件主题 -content = "新年快乐,祝您新年大吉!" # 邮箱内容 - -# 生成一个MIMEText对象(发送html格式邮件) -msg = MIMEText(content,'html','utf-8') -# 放入邮件主题 -msg['Subject'] = subject -# 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址 -msg['From'] = formataddr(('张三',user)) -# 放入收件人,将收件人转化为以逗号分隔的字符串 -msg['to'] = to - -# 通过ssl方式发送,服务器地址,端口 465 994 -s = smtplib.SMTP_SSL("smtp.163.com", 465) -# 登录到邮箱 -s.login(user, password) -# 发送邮件:发送方,收件方,要发送的消息 -for i in range(5): - s.sendmail(user, to, msg.as_string()) # 第二个参数可以以列表的方式写多个 - print('成功') - time.sleep(2) diff --git a/第4讲 邮箱轰炸1/邮箱轰炸1.png b/第4讲 邮箱轰炸1/邮箱轰炸1.png deleted file mode 100644 index fb72e52..0000000 Binary files a/第4讲 邮箱轰炸1/邮箱轰炸1.png and /dev/null differ diff --git a/第5讲 邮箱轰炸2/45邮箱轰炸2讲义.pdf b/第5讲 邮箱轰炸2/45邮箱轰炸2讲义.pdf deleted file mode 100644 index 84564ea..0000000 Binary files a/第5讲 邮箱轰炸2/45邮箱轰炸2讲义.pdf and /dev/null differ diff --git a/第5讲 邮箱轰炸2/课堂成果/email.png b/第5讲 邮箱轰炸2/课堂成果/email.png deleted file mode 100644 index 29670eb..0000000 Binary files a/第5讲 邮箱轰炸2/课堂成果/email.png and /dev/null differ diff --git a/第5讲 邮箱轰炸2/课堂成果/邮箱轰炸2.py b/第5讲 邮箱轰炸2/课堂成果/邮箱轰炸2.py deleted file mode 100644 index e925e05..0000000 --- a/第5讲 邮箱轰炸2/课堂成果/邮箱轰炸2.py +++ /dev/null @@ -1,73 +0,0 @@ -# 1 导入模块 -import smtplib -from email.mime.text import MIMEText #往邮件中写内容的对象 -from email.utils import formataddr #发件人信息 -import time -import tkinter -import threading - - - -# 2 发送方和接收方配置 -# 发件方邮箱:谁发送的 -user='zhangsan444444z@163.com' -# 生成的授权码:不能泄露 -password='FMORERKAQJWEBSUX' - -def send_mail(): - to = e1.get() - content = t2.get("1.0", "end") - count = int(e3.get()) - delay= int(e4.get()) - - subject = "To:{}".format(to) # 邮件主题 - #content = "新年快乐,祝您新年大吉!" # 邮箱内容 - - # 生成一个MIMEText对象(发送html格式邮件) - msg = MIMEText(content,'html','utf-8') - # 放入邮件主题 - msg['Subject'] = subject - # 放入发件人,元祖中内容第一个是发件人名称,第二个是发件地址 - msg['From'] = formataddr(('张三',user)) - # 放入收件人,将收件人转化为以逗号分隔的字符串 - msg['to'] = to - - # 通过ssl方式发送,服务器地址,端口 465 994 - s = smtplib.SMTP_SSL("smtp.163.com", 465) - # 登录到邮箱 - s.login(user, password) - # 发送邮件:发送方,收件方,要发送的消息 - for i in range(count): - s.sendmail(user, to, msg.as_string()) # 第二个参数可以以列表的方式写多个 - print('成功') - time.sleep(delay) - - -def send(): - t = threading.Thread(target=send_mail) - t.start() - -w = tkinter.Tk() -w.geometry('800x600') -w.resizable(0,0) - -bg = tkinter.PhotoImage(file='email.png') -bg_label = tkinter.Label(w, image=bg) -bg_label.place(x=0, y=0) - -e1 = tkinter.Entry(w,font=("黑体",20),width=18) -e1.place(x=150, y=190) - -t2 = tkinter.Text(w,font=("黑体",20),width=18,height=8) -t2.place(x=150, y=255) - -e3 = tkinter.Entry(w,font=("黑体",20),width=8) -e3.place(x=508, y=190) - -e4 = tkinter.Entry(w,font=("黑体",20),width=8) -e4.place(x=508, y=322) - -b5 = tkinter.Button(w, text="发送", font=("黑体",20),width=8,command=send) -b5.place(x=508,y=425) - -w.mainloop() diff --git a/第5讲 邮箱轰炸2/邮箱轰炸2.png b/第5讲 邮箱轰炸2/邮箱轰炸2.png deleted file mode 100644 index 77f9ffb..0000000 Binary files a/第5讲 邮箱轰炸2/邮箱轰炸2.png and /dev/null differ diff --git a/第6讲 太阳系/46太阳系讲义.pdf b/第6讲 太阳系/46太阳系讲义.pdf deleted file mode 100644 index 03cdc74..0000000 Binary files a/第6讲 太阳系/46太阳系讲义.pdf and /dev/null differ diff --git a/第6讲 太阳系/46课太阳系海报.png b/第6讲 太阳系/46课太阳系海报.png deleted file mode 100644 index 70ae353..0000000 Binary files a/第6讲 太阳系/46课太阳系海报.png and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/playground.png b/第6讲 太阳系/课堂成果/playground.png deleted file mode 100644 index ef945fb..0000000 Binary files a/第6讲 太阳系/课堂成果/playground.png and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/rabbit.gif b/第6讲 太阳系/课堂成果/rabbit.gif deleted file mode 100644 index 93fd967..0000000 Binary files a/第6讲 太阳系/课堂成果/rabbit.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/sun.png b/第6讲 太阳系/课堂成果/sun.png deleted file mode 100644 index c9c3e6e..0000000 Binary files a/第6讲 太阳系/课堂成果/sun.png and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/土星.gif b/第6讲 太阳系/课堂成果/土星.gif deleted file mode 100644 index 6160c99..0000000 Binary files a/第6讲 太阳系/课堂成果/土星.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/地球.gif b/第6讲 太阳系/课堂成果/地球.gif deleted file mode 100644 index 17d5e76..0000000 Binary files a/第6讲 太阳系/课堂成果/地球.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/天王星.gif b/第6讲 太阳系/课堂成果/天王星.gif deleted file mode 100644 index 3e94794..0000000 Binary files a/第6讲 太阳系/课堂成果/天王星.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/太阳系.png b/第6讲 太阳系/课堂成果/太阳系.png deleted file mode 100644 index 43bd4b0..0000000 Binary files a/第6讲 太阳系/课堂成果/太阳系.png and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/太阳系.py b/第6讲 太阳系/课堂成果/太阳系.py deleted file mode 100644 index 70ba9df..0000000 --- a/第6讲 太阳系/课堂成果/太阳系.py +++ /dev/null @@ -1,72 +0,0 @@ -#请在这里编写代码 -from turtle import * -import time - -tracer(0) -screen = Screen() # 创建窗口 -screen.bgpic("sun.png") # 设置背景 -screen.setup(1000, 800) # 设置窗口大小 - - -register_shape("水星.gif") -mercury = Turtle() -mercury.shape("水星.gif") -mercury.penup() - -register_shape("金星.gif") -gold = Turtle() -gold.shape("金星.gif") -gold.penup() - -register_shape("地球.gif") -earth =Turtle() -earth.shape("地球.gif") -earth.penup() - -register_shape("火星.gif") -mars = Turtle() -mars.shape("火星.gif") -mars.penup() -mars.goto(0,-180) - -register_shape("木星.gif") -mu = Turtle() -mu.shape("木星.gif") -mu.penup() -mu.goto(0,-220) - -register_shape("土星.gif") -tu = Turtle() -tu.shape("土星.gif") -tu.penup() -tu.goto(0,-270) - -register_shape("天王星.gif") -tian = Turtle() -tian.shape("天王星.gif") -tian.penup() -tian.goto(0,-320) - -register_shape("海王星.gif") -hai = Turtle() -hai.shape("海王星.gif") -hai.penup() -hai.goto(0,-380) - - -mercury.goto(0, -70) -gold.goto(0, -100) -earth.goto(0, -140) - -while True: - mercury.circle(70, 360 / 88) - gold.circle(100, 360 / 365) - earth.circle(140, 360 / 224) - mars.circle(180, 360 / 450) - mu.circle(220, 360 / 500) - tu.circle(270, 360 / 600) - tian.circle(320, 360 / 700) - hai.circle(380, 360 / 800) - update() # 刷新屏幕 - time.sleep(0.01) - diff --git a/第6讲 太阳系/课堂成果/木星.gif b/第6讲 太阳系/课堂成果/木星.gif deleted file mode 100644 index 87c1861..0000000 Binary files a/第6讲 太阳系/课堂成果/木星.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/水星.gif b/第6讲 太阳系/课堂成果/水星.gif deleted file mode 100644 index 56c42e4..0000000 Binary files a/第6讲 太阳系/课堂成果/水星.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/海王星.gif b/第6讲 太阳系/课堂成果/海王星.gif deleted file mode 100644 index 750cd46..0000000 Binary files a/第6讲 太阳系/课堂成果/海王星.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/火星.gif b/第6讲 太阳系/课堂成果/火星.gif deleted file mode 100644 index c8094c9..0000000 Binary files a/第6讲 太阳系/课堂成果/火星.gif and /dev/null differ diff --git a/第6讲 太阳系/课堂成果/课后作业-龟兔赛跑.py b/第6讲 太阳系/课堂成果/课后作业-龟兔赛跑.py deleted file mode 100644 index 8c796ff..0000000 --- a/第6讲 太阳系/课堂成果/课后作业-龟兔赛跑.py +++ /dev/null @@ -1,30 +0,0 @@ -#请在这里编写代码 -import turtle -import time - -turtle.tracer(0) -screen = turtle.Screen() # 创建窗口 -screen.bgpic("playground.png") # 设置背景 -screen.setup(800, 800) # 设置窗口大小 - - -turtle.register_shape("rabbit.gif") -t=turtle.Pen() -rabbit = turtle.Turtle() -rabbit.shape("rabbit.gif") -rabbit.penup() -rabbit.goto(0, -200) -t.penup() -t.color("green") -t.goto(0,-250) -t.turtlesize(3) -t.shape("turtle") - -while True: - rabbit.circle(200, 3) - t.circle(250, 1) - - - turtle.update() # 刷新屏幕 - time.sleep(0.01) - diff --git a/第6讲 太阳系/课堂成果/金星.gif b/第6讲 太阳系/课堂成果/金星.gif deleted file mode 100644 index e531e7d..0000000 Binary files a/第6讲 太阳系/课堂成果/金星.gif and /dev/null differ diff --git a/第7讲 字母卡牌/47字母卡牌讲义.pdf b/第7讲 字母卡牌/47字母卡牌讲义.pdf deleted file mode 100644 index 45d4df3..0000000 Binary files a/第7讲 字母卡牌/47字母卡牌讲义.pdf and /dev/null differ diff --git a/第7讲 字母卡牌/字母卡牌.png b/第7讲 字母卡牌/字母卡牌.png deleted file mode 100644 index 19f6f9c..0000000 Binary files a/第7讲 字母卡牌/字母卡牌.png and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/.idea/.gitignore b/第7讲 字母卡牌/课堂成果/.idea/.gitignore deleted file mode 100644 index 359bb53..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# 默认忽略的文件 -/shelf/ -/workspace.xml diff --git a/第7讲 字母卡牌/课堂成果/.idea/inspectionProfiles/Project_Default.xml b/第7讲 字母卡牌/课堂成果/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 36de856..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/.idea/inspectionProfiles/profiles_settings.xml b/第7讲 字母卡牌/课堂成果/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/.idea/material_theme_project_new.xml b/第7讲 字母卡牌/课堂成果/.idea/material_theme_project_new.xml deleted file mode 100644 index ef4c87e..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/material_theme_project_new.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/.idea/misc.xml b/第7讲 字母卡牌/课堂成果/.idea/misc.xml deleted file mode 100644 index 5d3fc1a..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/.idea/modules.xml b/第7讲 字母卡牌/课堂成果/.idea/modules.xml deleted file mode 100644 index 7631ecb..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/.idea/vcs.xml b/第7讲 字母卡牌/课堂成果/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/.idea/课堂成果.iml b/第7讲 字母卡牌/课堂成果/.idea/课堂成果.iml deleted file mode 100644 index 38e523c..0000000 --- a/第7讲 字母卡牌/课堂成果/.idea/课堂成果.iml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/A.gif b/第7讲 字母卡牌/课堂成果/A.gif deleted file mode 100644 index 9803702..0000000 Binary files a/第7讲 字母卡牌/课堂成果/A.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/ABC.ogg b/第7讲 字母卡牌/课堂成果/ABC.ogg deleted file mode 100644 index b1f9a68..0000000 Binary files a/第7讲 字母卡牌/课堂成果/ABC.ogg and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/B.gif b/第7讲 字母卡牌/课堂成果/B.gif deleted file mode 100644 index 01d6ce9..0000000 Binary files a/第7讲 字母卡牌/课堂成果/B.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/C.gif b/第7讲 字母卡牌/课堂成果/C.gif deleted file mode 100644 index 94e33f3..0000000 Binary files a/第7讲 字母卡牌/课堂成果/C.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/D.gif b/第7讲 字母卡牌/课堂成果/D.gif deleted file mode 100644 index 9b36474..0000000 Binary files a/第7讲 字母卡牌/课堂成果/D.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/E.gif b/第7讲 字母卡牌/课堂成果/E.gif deleted file mode 100644 index ac99bff..0000000 Binary files a/第7讲 字母卡牌/课堂成果/E.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/F.gif b/第7讲 字母卡牌/课堂成果/F.gif deleted file mode 100644 index d91610f..0000000 Binary files a/第7讲 字母卡牌/课堂成果/F.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/G.gif b/第7讲 字母卡牌/课堂成果/G.gif deleted file mode 100644 index d8a8689..0000000 Binary files a/第7讲 字母卡牌/课堂成果/G.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/H.gif b/第7讲 字母卡牌/课堂成果/H.gif deleted file mode 100644 index 185960a..0000000 Binary files a/第7讲 字母卡牌/课堂成果/H.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/I.gif b/第7讲 字母卡牌/课堂成果/I.gif deleted file mode 100644 index f92292b..0000000 Binary files a/第7讲 字母卡牌/课堂成果/I.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/J.gif b/第7讲 字母卡牌/课堂成果/J.gif deleted file mode 100644 index b40d5b2..0000000 Binary files a/第7讲 字母卡牌/课堂成果/J.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/K.gif b/第7讲 字母卡牌/课堂成果/K.gif deleted file mode 100644 index f3aa7b9..0000000 Binary files a/第7讲 字母卡牌/课堂成果/K.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/L.gif b/第7讲 字母卡牌/课堂成果/L.gif deleted file mode 100644 index 6218580..0000000 Binary files a/第7讲 字母卡牌/课堂成果/L.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/M.gif b/第7讲 字母卡牌/课堂成果/M.gif deleted file mode 100644 index 57b5c1a..0000000 Binary files a/第7讲 字母卡牌/课堂成果/M.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/N.gif b/第7讲 字母卡牌/课堂成果/N.gif deleted file mode 100644 index 9f544a4..0000000 Binary files a/第7讲 字母卡牌/课堂成果/N.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/O.gif b/第7讲 字母卡牌/课堂成果/O.gif deleted file mode 100644 index a4939db..0000000 Binary files a/第7讲 字母卡牌/课堂成果/O.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/P.gif b/第7讲 字母卡牌/课堂成果/P.gif deleted file mode 100644 index 00276fa..0000000 Binary files a/第7讲 字母卡牌/课堂成果/P.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/Q.gif b/第7讲 字母卡牌/课堂成果/Q.gif deleted file mode 100644 index ceb1cc2..0000000 Binary files a/第7讲 字母卡牌/课堂成果/Q.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/R.gif b/第7讲 字母卡牌/课堂成果/R.gif deleted file mode 100644 index c9255a5..0000000 Binary files a/第7讲 字母卡牌/课堂成果/R.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/README.md b/第7讲 字母卡牌/课堂成果/README.md deleted file mode 100644 index 1109d02..0000000 --- a/第7讲 字母卡牌/课堂成果/README.md +++ /dev/null @@ -1,3 +0,0 @@ -```bash -pip install pygame -i https://mirrors.aliyun.com/pypi/simple/ -``` \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/S.gif b/第7讲 字母卡牌/课堂成果/S.gif deleted file mode 100644 index 33ca659..0000000 Binary files a/第7讲 字母卡牌/课堂成果/S.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/T.gif b/第7讲 字母卡牌/课堂成果/T.gif deleted file mode 100644 index 0e421be..0000000 Binary files a/第7讲 字母卡牌/课堂成果/T.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/U.gif b/第7讲 字母卡牌/课堂成果/U.gif deleted file mode 100644 index f8cd49f..0000000 Binary files a/第7讲 字母卡牌/课堂成果/U.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/V.gif b/第7讲 字母卡牌/课堂成果/V.gif deleted file mode 100644 index 2f1b7e1..0000000 Binary files a/第7讲 字母卡牌/课堂成果/V.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/W.gif b/第7讲 字母卡牌/课堂成果/W.gif deleted file mode 100644 index 6603bcf..0000000 Binary files a/第7讲 字母卡牌/课堂成果/W.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/X.gif b/第7讲 字母卡牌/课堂成果/X.gif deleted file mode 100644 index cb9a25f..0000000 Binary files a/第7讲 字母卡牌/课堂成果/X.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/Y.gif b/第7讲 字母卡牌/课堂成果/Y.gif deleted file mode 100644 index 21a176d..0000000 Binary files a/第7讲 字母卡牌/课堂成果/Y.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/Z.gif b/第7讲 字母卡牌/课堂成果/Z.gif deleted file mode 100644 index 7cdf4eb..0000000 Binary files a/第7讲 字母卡牌/课堂成果/Z.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/cardback.gif b/第7讲 字母卡牌/课堂成果/cardback.gif deleted file mode 100644 index 1e08184..0000000 Binary files a/第7讲 字母卡牌/课堂成果/cardback.gif and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/jiyi.py b/第7讲 字母卡牌/课堂成果/jiyi.py deleted file mode 100644 index 427a491..0000000 --- a/第7讲 字母卡牌/课堂成果/jiyi.py +++ /dev/null @@ -1,166 +0,0 @@ -import turtle -import random -import time -import string - -def start_game(rows=8, cols=8): - SIZE = 80 - COUNT = rows * cols - WIDTH, HEIGHT = cols * SIZE, rows * SIZE - - # 初始化画布和窗口(上方留出按钮空间) - screen = turtle.Screen() - screen.setup(WIDTH + 40, HEIGHT + 80) # 上方多出40像素放按钮 - screen.bgcolor('white') - screen.title("字母翻牌游戏") - - # 注册字母图片(这里默认没有图片) - for ch in string.ascii_uppercase: - try: - turtle.addshape(f"{ch}.gif") - except: - pass - - # 生成牌面内容 - tiles = random.sample(string.ascii_uppercase * 2, COUNT // 2) * 2 - random.shuffle(tiles) - - # 卡片是否隐藏 - hide = [True] * COUNT - - # 游戏状态 - state = { - 'mark': None, - 'matched_pair': None, - 'reveal': None - } - - # 卡片乌龟 - turtles = [turtle.Turtle() for _ in range(COUNT)] - for t in turtles: - t.hideturtle() - t.penup() - - # 公共画笔 - pen = turtle.Turtle() - pen.hideturtle() - pen.penup() - - # 返回按钮乌龟 - back_btn = turtle.Turtle() - back_btn.hideturtle() - back_btn.penup() - - def draw_back_button(): - back_btn.goto(-WIDTH // 2, HEIGHT // 2 + 10) - back_btn.color("black", "lightgray") - back_btn.begin_fill() - for _ in range(2): - back_btn.forward(100) - back_btn.left(90) - back_btn.forward(40) - back_btn.left(90) - back_btn.end_fill() - back_btn.goto(-WIDTH // 2 + 20, HEIGHT // 2 + 15) - back_btn.write("返回", font=("Arial", 16, "bold")) - - def check_back_button(x, y): - bx1, by1 = -WIDTH // 2, HEIGHT // 2 + 10 - bx2, by2 = bx1 + 100, by1 + 40 - return bx1 <= x <= bx2 and by1 <= y <= by2 - - def go_back_to_menu(): - screen.bye() - import youxijiemian - youxijiemian.show_start_window() - # 你可以在这里调用 Tkinter 菜单,例如:show_start_window() - - def xy(i): - x = -WIDTH // 2 + (i % cols) * SIZE - y = -HEIGHT // 2 + (i // cols) * SIZE - return x, y - - def index(x, y): - col = int((x + WIDTH // 2) // SIZE) - row = int((y + HEIGHT // 2) // SIZE) - i = row * cols + col - if 0 <= i < COUNT: - return i - return None - - def draw(): - pen.clear() - for i in range(COUNT): - x, y = xy(i) - t = turtles[i] - t.goto(x + SIZE // 2, y + SIZE // 2) - - if not hide[i]: - t.hideturtle() - elif i == state.get("mark") or i == state.get("reveal") or (state.get("matched_pair") and i in state["matched_pair"]): - t.shape("square") - t.shapesize(stretch_wid=3, stretch_len=3) - t.color("black") - t.showturtle() - pen.goto(x + SIZE // 2 - 15, y + SIZE // 2 - 20) - pen.write(tiles[i], font=('Arial', 24, 'bold')) - else: - pen.goto(x, y) - pen.color('black', 'skyblue') - pen.begin_fill() - for _ in range(4): - pen.forward(SIZE - 10) - pen.left(90) - pen.end_fill() - t.hideturtle() - draw_back_button() - turtle.update() - - def hide_matched(): - i1, i2 = state["matched_pair"] - hide[i1] = False - hide[i2] = False - state["matched_pair"] = None - draw() - - def tap(x, y): - if check_back_button(x, y): - go_back_to_menu() - return - - i = index(x, y) - if i is None or not hide[i] or state.get("matched_pair"): - return - - m = state.get("mark") - if m is None: - state["mark"] = i - elif m == i: - return - elif tiles[m] != tiles[i]: - state["reveal"] = i - draw() - time.sleep(0.5) - state["mark"] = None - state["reveal"] = None - else: - state["matched_pair"] = (m, i) - state["mark"] = None - state["reveal"] = None - draw() - screen.ontimer(hide_matched, 2000) - - draw() - if all(not h for h in hide): - pen.goto(0, 0) - pen.color("green") - pen.write("🎉 全部配对成功!", font=('Arial', 24, 'bold')) - - turtle.tracer(False) - draw() - turtle.onscreenclick(tap) - turtle.done() - -# 测试入口 -if __name__ == "__main__": - start_game(8, 8) diff --git a/第7讲 字母卡牌/课堂成果/letter.png b/第7讲 字母卡牌/课堂成果/letter.png deleted file mode 100644 index 2b08d03..0000000 Binary files a/第7讲 字母卡牌/课堂成果/letter.png and /dev/null differ diff --git a/第7讲 字母卡牌/课堂成果/tets.py b/第7讲 字母卡牌/课堂成果/tets.py deleted file mode 100644 index 5a11cf8..0000000 --- a/第7讲 字母卡牌/课堂成果/tets.py +++ /dev/null @@ -1,5 +0,0 @@ -from turtle import * - -listen() -onscreenclick(print) -done() \ No newline at end of file diff --git a/第7讲 字母卡牌/课堂成果/youxijiemian.py b/第7讲 字母卡牌/课堂成果/youxijiemian.py deleted file mode 100644 index 74f946c..0000000 --- a/第7讲 字母卡牌/课堂成果/youxijiemian.py +++ /dev/null @@ -1,34 +0,0 @@ -# start_menu.py -import tkinter as tk -import jiyi # 你的游戏模块(包含 start_game) - -def show_start_window(): - def start_game(rows, cols): - print(f"游戏启动:{rows}行 x {cols}列") - root.destroy() - jiyi.start_game(rows, cols) - - root = tk.Tk() - root.title("字母翻牌游戏 - 开始界面") - root.geometry("600x500") - - tk.Label(root, text="请选择游戏难度", font=("Arial", 18)).pack(pady=20) - - difficulty = tk.StringVar(value="8x8") - for option in ["6x6", "8x8", "10x10"]: - tk.Radiobutton(root, text=option, variable=difficulty, value=option, - font=("Arial", 16)).pack(anchor="w", padx=60, pady=8) - - def on_start_click(): - diff = difficulty.get() - rows, cols = map(int, diff.split("x")) - start_game(rows, cols) - - tk.Button(root, text="开始游戏", font=("Arial", 20), bg="lightgreen", - command=on_start_click).pack(pady=30, ipadx=20, ipady=10) - - root.mainloop() - -# 程序入口 -if __name__ == "__main__": - show_start_window() diff --git a/第7讲 字母卡牌/课堂成果/字母卡牌.py b/第7讲 字母卡牌/课堂成果/字母卡牌.py deleted file mode 100644 index 4802f54..0000000 --- a/第7讲 字母卡牌/课堂成果/字母卡牌.py +++ /dev/null @@ -1,30 +0,0 @@ -# 运行程序前, 请务必前往本课包【课程说明】处,下载课程素材,完成配置 - -from turtle import * -import pygame -pygame.mixer.init() -pygame.mixer.music.load("ABC.ogg") -pygame.mixer.music.play(-1) - -tracer(False) -setup(1200,800) -bgpic('letter.png') -t=Pen() -t.hideturtle() - -for i in range(65,91): - register_shape(str(chr(i))+'.gif') - -number=0 -def draw(x,y): - global number - t.penup() - t.goto(x,y) - t.pendown() - t.shape(chr(number%26+65)+".gif") - t.stamp() - number+=1 - update() -listen() -onscreenclick(draw) -done() diff --git a/第7讲 字母卡牌/课堂成果/字母卡牌素材.zip b/第7讲 字母卡牌/课堂成果/字母卡牌素材.zip deleted file mode 100644 index 5da9877..0000000 Binary files a/第7讲 字母卡牌/课堂成果/字母卡牌素材.zip and /dev/null differ diff --git a/第8讲 蒙特卡洛法求圆周率/48蒙特卡洛法求圆周率讲义.pdf b/第8讲 蒙特卡洛法求圆周率/48蒙特卡洛法求圆周率讲义.pdf deleted file mode 100644 index 45e711a..0000000 Binary files a/第8讲 蒙特卡洛法求圆周率/48蒙特卡洛法求圆周率讲义.pdf and /dev/null differ diff --git a/第8讲 蒙特卡洛法求圆周率/蒙特卡洛法求圆周率.png b/第8讲 蒙特卡洛法求圆周率/蒙特卡洛法求圆周率.png deleted file mode 100644 index 8a4e414..0000000 Binary files a/第8讲 蒙特卡洛法求圆周率/蒙特卡洛法求圆周率.png and /dev/null differ diff --git a/第8讲 蒙特卡洛法求圆周率/课堂成果/dot.png b/第8讲 蒙特卡洛法求圆周率/课堂成果/dot.png deleted file mode 100644 index 52e3ab7..0000000 Binary files a/第8讲 蒙特卡洛法求圆周率/课堂成果/dot.png and /dev/null differ diff --git a/第8讲 蒙特卡洛法求圆周率/课堂成果/随机打点法.py b/第8讲 蒙特卡洛法求圆周率/课堂成果/随机打点法.py deleted file mode 100644 index 9a2a571..0000000 --- a/第8讲 蒙特卡洛法求圆周率/课堂成果/随机打点法.py +++ /dev/null @@ -1,32 +0,0 @@ -from turtle import * -import random -tracer(False) -bgpic("dot.png") -setup(1200,800) - -t=Pen() -t.ht() -t.penup() - -nei=0 -total=0 - -t2=Pen() -t2.ht() -t2.penup() -t2.goto(380,-50) - -while True: - x=random.randint(-200,200) - y=random.randint(-200,200) - t.goto(x,y) - if t.distance(0,0)<200: - t.dot(5,'yellow') - nei+=1 - else: - t.dot(5,'magenta') - total+=1 - pai=4*nei/total - t2.clear() - t2.write("{}\n\n{}\n\n{}".format(nei,total,round(pai,4)),font=("宋体",25,'bold')) - update() diff --git a/第8讲蒙特卡洛法求圆周率/课堂成果/README.md b/第8讲蒙特卡洛法求圆周率/课堂成果/README.md new file mode 100644 index 0000000..ef1f7b9 --- /dev/null +++ b/第8讲蒙特卡洛法求圆周率/课堂成果/README.md @@ -0,0 +1,3 @@ +```bash +pip install -i https://mirrors.aliyun.com/pypi/simple numpy matplotlib +``` \ No newline at end of file diff --git a/第8讲蒙特卡洛法求圆周率/课堂成果/割圆法.py b/第8讲蒙特卡洛法求圆周率/课堂成果/割圆法.py new file mode 100644 index 0000000..bd6a49f --- /dev/null +++ b/第8讲蒙特卡洛法求圆周率/课堂成果/割圆法.py @@ -0,0 +1,53 @@ +import numpy as np +import matplotlib.pyplot as plt +import matplotlib.animation as animation + +# 圆的半径 +radius = 1.0 +init_n = 6 +max_frame = 10 # 最多动画帧数 + +# 创建图形 +fig, ax = plt.subplots(figsize=(7, 7)) +ax.set_aspect('equal') +ax.set_xlim(-1.3, 1.3) +ax.set_ylim(-1.3, 1.3) +ax.set_title("割圆法动画演示:多边形逼近圆周率 π", fontsize=14) + +# 添加单位圆 +circle = plt.Circle((0, 0), radius, fill=False, linestyle='--', color='gray') +ax.add_patch(circle) + +# 多边形对象和文本对象 +polygon_line, = ax.plot([], [], 'b-', linewidth=2) +info_text = ax.text(-1.25, 1.18, '', fontsize=11, color='darkred', fontfamily='monospace') +formula_text = ax.text(-1.25, -1.2, '', fontsize=10, color='black', fontfamily='monospace') + +def generate_polygon(n): + """生成正n边形的顶点""" + angles = np.linspace(0, 2 * np.pi, n + 1) + x = radius * np.cos(angles) + y = radius * np.sin(angles) + return x, y + +def update(frame): + n = init_n * (2 ** frame) + x, y = generate_polygon(n) + polygon_line.set_data(x, y) + + # π近似计算:π ≈ n × sin(π / n) + pi_approx = n * np.sin(np.pi / n) + + info_text.set_text(f"边数: {n:5d} π ≈ {pi_approx:.10f}") + + # 显示公式推导 + formula_text.set_text( + "π ≈ n × sin(π / n) (r = 1)\n" + "推导:L = n × s = 2n × sin(π / n) → π ≈ L / 2\n" + ) + + return polygon_line, info_text, formula_text + +# 动画制作 +ani = animation.FuncAnimation(fig, update, frames=max_frame, interval=1000, blit=True) +plt.show() diff --git a/第9讲 世界时钟/49世界时钟讲义.pdf b/第9讲 世界时钟/49世界时钟讲义.pdf deleted file mode 100644 index 3905ba8..0000000 Binary files a/第9讲 世界时钟/49世界时钟讲义.pdf and /dev/null differ diff --git a/第9讲 世界时钟/世界时钟.png b/第9讲 世界时钟/世界时钟.png deleted file mode 100644 index 2fcec59..0000000 Binary files a/第9讲 世界时钟/世界时钟.png and /dev/null differ diff --git a/第9讲 世界时钟/课堂成果/America.png b/第9讲 世界时钟/课堂成果/America.png deleted file mode 100644 index c40d143..0000000 Binary files a/第9讲 世界时钟/课堂成果/America.png and /dev/null differ diff --git a/第9讲 世界时钟/课堂成果/Britain.png b/第9讲 世界时钟/课堂成果/Britain.png deleted file mode 100644 index e50074c..0000000 Binary files a/第9讲 世界时钟/课堂成果/Britain.png and /dev/null differ diff --git a/第9讲 世界时钟/课堂成果/China.png b/第9讲 世界时钟/课堂成果/China.png deleted file mode 100644 index 95e8948..0000000 Binary files a/第9讲 世界时钟/课堂成果/China.png and /dev/null differ diff --git a/第9讲 世界时钟/课堂成果/Russia.png b/第9讲 世界时钟/课堂成果/Russia.png deleted file mode 100644 index 342a09b..0000000 Binary files a/第9讲 世界时钟/课堂成果/Russia.png and /dev/null differ diff --git a/第9讲 世界时钟/课堂成果/世界时钟.py b/第9讲 世界时钟/课堂成果/世界时钟.py deleted file mode 100644 index ca08cfe..0000000 --- a/第9讲 世界时钟/课堂成果/世界时钟.py +++ /dev/null @@ -1,64 +0,0 @@ -import datetime -from turtle import * - -bgpic("China.png") -setup(1200,800) -tracer(False) - -h=Pen() -m=Pen() -s=Pen() -h.pensize(5) -m.pensize(3) -s.pensize(2) - -p=Pen() -p.ht() -p.penup() -p.goto(-220,-345) - -t = datetime.datetime.now() -cha=datetime.timedelta(hours=0) - -def change(x,y): - # print(x,y) - global cha - if -495