20193126韩浩 实验四《Python程序设计》实验报告

20193126韩浩《Python程序设计》实验4
课程:《Python程序设计》
班级: 2342
姓名: 韩浩
学号:20234129
实验教师:王志强
实验日期:2025年5月14日
必修/选修: 专选课

1.实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
课代表和各小组负责人收集作业(源代码、视频、综合实践报告)
例如:编写从社交网络爬取数据,实现可视化舆情监控或者情感分析。
例如:利用公开数据集,开展图像分类、恶意软件检测等
例如:利用Python库,基于OCR技术实现自动化提取图片中数据,并填入excel中。
例如:爬取天气数据,实现自动化微信提醒
例如:利用爬虫,实现自动化下载网站视频、文件等。
例如:编写小游戏:坦克大战、贪吃蛇、扫雷等等
注:在Windows/Linux系统上使用VIM、PDB、IDLE、Pycharm等工具编程实现。
2.实验过程及结果:
发现转盘小游戏在生活中,我们经常面临选择难题,因而编写了一款转盘小游戏代码来帮助我们决策。
图书馆推荐建议阅读的的名著,再结合我个人的能力,准备编写一个相关的小程序。

import tkinter as tk
import threading
import time

class BookRecommendationApp:
def __init__(self, root):
    self.root = root
    self.root.title("名著阅读推荐")
    self.root.minsize(300, 300)
    self.root.resizable(False, False)  # 禁止窗口缩放
    
    # 中文字体设置
    self.font = ("微软雅黑", 10)
    
    # 名著列表
    self.activities = [
        "红楼梦", "三国演义", "水浒传", "西游记",
        "战争与和平", "巴黎圣母院", "悲惨世界", "红与黑",
        "百年孤独", "傲慢与偏见"
    ]
    
    # 界面组件
    self.activity_buttons = []
    self.is_loop_running = False
    self.should_continue = False
    self.highlight_thread = None
    
    self.create_widgets()

def create_widgets(self):
    """创建界面元素"""
    # 创建名著按钮
    for idx, book in enumerate(self.activities):
        x = 20 + (idx % 3) * 80
        y = 50 + (idx // 3) * 50
        btn = tk.Button(
            self.root,
            text=book,
            bg="#FFFFFF",
            font=self.font,
            relief=tk.RAISED,
            bd=1
        )
        btn.place(x=x, y=y, width=60, height=40)
        self.activity_buttons.append(btn)
    
    # 创建控制按钮
    self.start_btn = tk.Button(
        self.root,
        text="开始推荐",
        command=self.start_highlight,
        font=self.font,
        bg="#4CAF50",  # 绿色
        fg="white",
        activebackground="#45a049"
    )
    self.start_btn.place(x=100, y=250, width=80, height=35)
    
    self.stop_btn = tk.Button(
        self.root,
        text="停止推荐",
        command=self.stop_highlight,
        font=self.font,
        bg="#FF4444",  # 红色
        fg="white",
        activebackground="#ff6b6b",
        state=tk.DISABLED
    )
    self.stop_btn.place(x=200, y=250, width=80, height=35)

def highlight_activities(self):
    """线程执行的高亮循环"""
    index = 0
    while self.should_continue:
        try:
            time.sleep(0.5)
            # 重置所有按钮颜色
            for btn in self.activity_buttons:
                btn.config(bg="#FFFFFF")
            # 高亮当前按钮
            self.activity_buttons[index].config(bg="#8BC34A")  # 青绿色
            index = (index + 1) % len(self.activities)
        except Exception as e:
            print(f"高亮错误: {str(e)}")
            self.stop_highlight()
            break

def start_highlight(self):
    """启动高亮推荐"""
    if self.is_loop_running:
        return
    
    self.is_loop_running = True
    self.should_continue = True
    self.highlight_thread = threading.Thread(
        target=self.highlight_activities,
        daemon=True  # 守护线程随主程序退出
    )
    self.highlight_thread.start()
    
    # 更新按钮状态
    self.start_btn.config(state=tk.DISABLED)
    self.stop_btn.config(state=tk.NORMAL)

def stop_highlight(self):
    """停止高亮推荐"""
    self.should_continue = False
    self.is_loop_running = False
    
    # 重置所有按钮颜色
    for btn in self.activity_buttons:
        btn.config(bg="#FFFFFF")
    
    # 更新按钮状态
    self.start_btn.config(state=tk.NORMAL)
    self.stop_btn.config(state=tk.DISABLED)

  if __name__ == "__main__":
  root = tk.Tk()
  app = BookRecommendationApp(root)

# 确保窗口关闭时正确终止线程
root.protocol("WM_DELETE_WINDOW", lambda: [app.stop_highlight(), root.destroy()])

root.mainloop()

以下是运行相关画面







3关于本次实验和课程的心得体会:
通过本次实验,我不仅掌握了 Python 编程和多线程技术,更重要的是体会到了软件开发的完整流程。从需求分析、设计到实现、测试,每一个环节都需要严谨的思考和细致的工作。在面对技术难题时,我学会了主动查阅资料、借鉴他人经验,这将对我今后的学习和工作产生积极影响。
同时,实验也让我认识到自己的不足。在界面设计和用户体验方面,我还有很大的提升空间。未来,我将继续学习相关知识,不断完善这个系统,并将所学技术应用到更多实际项目中。
这次实验是一次宝贵的实践经历,它让我明白编程不仅是实现功能,更是追求代码的优雅、系统的健壮和用户的体验。我相信这些经验和体会将成为我编程道路上的重要基石。学习过程总是艰辛的,但是一切都值得,能学习到真东西。
4、课程总结与建议
节课还能跟着老师的节奏走,什么变量、print 语句这些基础的还能理解,结果越往后越懵 —— 循环嵌套的时候感觉脑子打结,学类和对象的时候直接 “抽象攻击”,尤其是讲到网络爬虫那部分,一堆英文函数和协议看得我头大,我自从退伍回去之后英语全忘了。有次写实验作业对着代码改了俩小时没跑通,差点想摔键盘(冷静下来还是默默百度了)!
但王老师真的是我坚持下来的 “救命稻草”!他讲课特别有耐心,每次讲复杂的知识点都会举超接地气的例子。比如讲字典的时候,他说 “字典就像咱们查词典,键是词语,值就是解释,想找啥直接搜键就行”,一下子就懂了!答疑的时候更是绝,有次我问 “为啥列表修改后原数据也变了”,他画了个内存图给我讲 “引用赋值”,比我自己啃教材效率高 100 倍!而且他脾气特别好,不管问题多基础都不嫌弃,每次去答疑都能看到他笑眯眯的,让人完全没压力。
实验也挺有意思的, “你这循环像套娃一样乱”,最后我们分工调试,他写算法我查语法,花了一下午终于跑通了!那次之后发现,和不同专业的同学合作还挺有火花的,而且一起解决问题后特别有成就感,现在看到彼此都像 “代码战友” 一样亲切。
学完这门课,虽然不敢说精通,但至少对 Python 有了基本认识。现在知道列表和元组的区别,会用 if 判断和 for 循环写简单程序,甚至还能写个小爬虫爬点公开数据(当然仅限于作业水平)。最惊喜的是,发现编程和文科其实有共通点 —— 都是在解决问题,只不过一个用文字,一个用代码。比如用 Python 分析诗词里的高频词,突然觉得 “代码好像也能玩出人文味儿”。
想给老师提几个小建议哈:
多串讲案例:比如讲语法的时候,可以用一个 “校园活动报名系统” 贯穿始终,先讲怎么用变量存报名信息,再讲用列表统计人数,最后用文件操作保存数据,这样学的时候能知道这些语法 “怎么用”,不会觉得零散。
来点文科生友好的实战:比如布置点 “用 Python 整理读书笔记”“统计小说里的人物出场次数” 这种作业,感觉会更有动力敲代码,毕竟和咱们专业能结合上。
偶尔来个小抽查:比如下课前随机问个小问题,像 “字典和列表的区别是啥”,答对的给个小积分啥的,督促我们课后及时复习,不然真的容易学了就忘(别问我怎么知道的……)。
最后必须夸夸王老师!这学期多亏您没放弃我们这些 “编程小白”,每次讲题都讲得特别透,还一直鼓励我们 “多试错就会了”。现在看到自己写的代码能跑起来,真的超有成就感!希望老师以后继续带感地讲课,也祝老师天天开心,带的学生都能成为 “代码小能手”!比心~
真挚的建议:老师您可以提供更多的资源以及学习网站,和老师还可以设置随机的知识性小测,促使同学们及时回顾、掌握所学。
希望老师您可以工作顺利,最后必须实名 @王老师!这学期跟着您学编程太值了~从对着代码抓耳挠腮到能独立完成小作业,每一步都离不开您的 “点播”!记得有次我问超基础的问题,您不仅没嫌弃还画图标注,当时就觉得 “这老师也太靠谱了”!感谢您一学期的操心和包容,希望您新的学期少点熬夜改作业,多来点摸鱼时间~祝您事业 666,身体倍儿棒,教过的学生都能成为 “编程大佬”,桃李遍天下!作为一名退伍老兵还得继续保持我们部队的作风,遇山开山,遇水架桥,攻坚克难,勇往直前!感谢王老师您这个学期的关怀和支持。
至此敬礼!

posted on 2025-05-27 22:52  乘风破浪,行稳致远  阅读(19)  评论(0)    收藏  举报

导航