python小项目编程-初级(5、词频统计,6、简单得闹钟)

1、词频统计

统计文本文件中每个单词出现的频率。

实现

import tkinter as tk
from tkinter import filedialog, messagebox
from collections import Counter
import reclass WordFrequencyCounter:def __init__(self, master):self.master = masterself.master.title("词频统计")self.label = tk.Label(master, text="选择一个文本文件进行词频统计")self.label.pack(pady=10)self.select_button = tk.Button(master, text="选择文件", command=self.select_file)self.select_button.pack(pady=5)self.result_text = tk.Text(master, width=50, height=20)self.result_text.pack(pady=10)def select_file(self):"""选择文件并统计单词频率"""file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])if file_path:try:self.count_words(file_path)except Exception as e:messagebox.showerror("错误", f"读取文件时出错: {e}")def count_words(self, file_path):"""统计单词频率并显示结果"""with open(file_path, 'r', encoding='utf-8') as file:text = file.read()# 统计单词频率words = re.findall(r'\b\w+\b', text.lower())  # 使用正则表达式提取单词并转换为小写word_count = Counter(words)  # 统计单词频率self.display_results(word_count)return word_count #为了UT 写了returndef display_results(self, word_count):"""显示单词频率结果"""self.result_text.delete(1.0, tk.END)  # 清空文本框for word, count in word_count.items():self.result_text.insert(tk.END, f"{word}: {count}\n")  # 打印每个单词及其频率if __name__ == "__main__":root = tk.Tk()app = WordFrequencyCounter(root)root.mainloop()

测试

unittest

import unittest
from collections import Counter
from word_frequency_counter import WordFrequencyCounter  # 假设你的类在这个文件中
import tkinter as tkclass TestWordFrequencyCounter(unittest.TestCase):def setUp(self):"""创建一个 Tkinter 窗口以便测试"""self.root = tk.Tk()self.app = WordFrequencyCounter(self.root)self.test_file_path = 'test_sample.txt'with open(self.test_file_path, 'w', encoding='utf-8') as f:f.write("Hello world! Hello Python. Hello, hello world.")def tearDown(self):"""销毁 Tkinter 窗口"""self.root.destroy()def test_count_words(self):"""测试单词计数功能"""expected_count = Counter({'hello': 4, 'world': 2, 'python': 1})# 使用私有方法进行测试word_count = self.app.count_words(self.test_file_path)self.assertEqual(word_count, expected_count)def test_display_results(self):"""测试结果显示功能"""test_count = Counter({'hello': 4, 'world': 1})self.app.display_results(test_count)# 检查文本框内容expected_output = "hello: 4\nworld: 1\n"self.assertEqual(self.app.result_text.get(1.0, tk.END).strip(), expected_output.strip())if __name__ == "__main__":unittest.main()

pytest


import pytest
from collections import Counter
from word_frequency_counter import WordFrequencyCounter  # 假设你的类在这个文件中
import tkinter as tk@pytest.fixture
def app():"""创建一个 Tkinter 窗口以便测试"""root = tk.Tk()app = WordFrequencyCounter(root)app.test_file_path = 'test_sample.txt'with open(app.test_file_path, 'w', encoding='utf-8') as f:f.write("Hello world! Hello Python. Hello, hello world.")yield approot.destroy()def test_count_words(app):"""测试单词计数功能"""expected_count = Counter({'hello': 4, 'world': 2, 'python': 1})# 使用私有方法进行测试word_count = app.count_words(app.test_file_path)assert word_count == expected_countdef test_display_results(app):"""测试结果显示功能"""test_count = Counter({'hello': 4, 'world': 1})app.display_results(test_count)# 检查文本框内容expected_output = "hello: 4\nworld: 1\n"assert app.result_text.get(1.0, tk.END).strip() == expected_output.strip()

2、简单的闹钟

设置一个简单的闹钟,指定时间后播放提示音。

实现

import tkinter as tk
from tkinter import messagebox
from datetime import datetime
import winsound  # Windows平台播放声音
import threading
import timeclass AlarmClock:def __init__(self, root):self.root = rootself.root.title("闹铃")self.alarms = []# GUI Componentsself.label = tk.Label(root, text="设置时间 (HH:MM):")self.label.pack(pady=10)self.entry = tk.Entry(root)self.entry.pack(pady=10)self.event_label = tk.Label(root, text="事件描述:")self.event_label.pack(pady=10)self.event_entry = tk.Entry(root)self.event_entry.pack(pady=10)self.add_button = tk.Button(root, text="添加闹铃", command=self.add_alarm)self.add_button.pack(pady=10)self.alarm_listbox = tk.Listbox(root)self.alarm_listbox.pack(pady=10)self.remove_button = tk.Button(root, text="删除闹铃", command=self.remove_alarm)self.remove_button.pack(pady=10)# Start alarm checking in a separate threadself.check_alarms_thread = threading.Thread(target=self.check_alarms, daemon=True)self.check_alarms_thread.start()def add_alarm(self):time_str = self.entry.get()event = self.event_entry.get()try:# Validate time formatdatetime.strptime(time_str, "%H:%M")self.alarms.append((time_str, event))self.alarm_listbox.insert(tk.END, f"{time_str} - {event}")self.entry.delete(0, tk.END)self.event_entry.delete(0, tk.END)except ValueError:messagebox.showerror("无效得时间", "Please enter time in HH:MM format.")def remove_alarm(self):selected = self.alarm_listbox.curselection()if selected:self.alarm_listbox.delete(selected)self.alarms.pop(selected[0])def check_alarms(self):while True:current_time = datetime.now().strftime("%H:%M")for alarm in self.alarms:if alarm[0] == current_time:winsound.Beep(1000, 2000)  # 1000Hz, 1秒messagebox.showinfo("Alarm", f"Time for: {alarm[1]}")self.alarms.remove(alarm)self.alarm_listbox.delete(0)time.sleep(30)  # Check every 30 secondsif __name__ == "__main__":root = tk.Tk()app = AlarmClock(root)root.mainloop()

测试:

unittest

import unittest
from datetime import datetime
from unittest.mock import patch
from AlarmClock import AlarmClock
import tkinter as tkclass TestAlarmClock(unittest.TestCase):def setUp(self):self.root = tk.Tk()self.app = AlarmClock(self.root)def test_add_alarm_valid(self):self.app.entry.insert(0, "12:30")self.app.event_entry.insert(0, "Meeting")self.app.add_alarm()self.assertEqual(len(self.app.alarms), 1)self.assertEqual(self.app.alarms[0], ("12:30", "Meeting"))def test_add_alarm_invalid(self):self.app.entry.insert(0, "25:00")self.app.event_entry.insert(0, "Invalid Time")self.app.add_alarm()self.assertEqual(len(self.app.alarms), 0)def test_remove_alarm(self):self.app.entry.insert(0, "12:30")self.app.event_entry.insert(0, "Meeting")self.app.add_alarm()self.app.alarm_listbox.select_set(0)self.app.remove_alarm()self.assertEqual(len(self.app.alarms), 0)def tearDown(self):self.root.destroy()if __name__ == "__main__":unittest.main()

pytest

import pytest
from datetime import datetime
from unittest.mock import patch
from AlarmClock import AlarmClock
import tkinter as tk@pytest.fixture
def app():root = tk.Tk()app = AlarmClock(root)yield approot.destroy()def test_add_alarm_valid(app):app.entry.insert(0, "12:30")app.event_entry.insert(0, "Meeting")app.add_alarm()assert len(app.alarms) == 1assert app.alarms[0] == ("12:30", "Meeting")def test_add_alarm_invalid(app):app.entry.insert(0, "25:00")app.event_entry.insert(0, "Invalid Time")app.add_alarm()assert len(app.alarms) == 0def test_remove_alarm(app):app.entry.insert(0, "12:30")app.event_entry.insert(0, "Meeting")app.add_alarm()app.alarm_listbox.select_set(0)app.remove_alarm()assert len(app.alarms) == 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/21353.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文讲解Redis为什么读写性能高以及I/O复用相关知识点

Redis为什么读写性能高呢? Redis 的速度⾮常快,单机的 Redis 就可以⽀撑每秒十几万的并发,性能是 MySQL 的⼏⼗倍。原因主要有⼏点: ①、基于内存的数据存储,Redis 将数据存储在内存当中,使得数据的读写操…

计算机网络安全之一:网络安全概述

1.1 网络安全的内涵 随着计算机和网络技术的迅猛发展和广泛普及,越来越多的企业将经营的各种业务建立在Internet/Intranet环境中。于是,支持E-mail、文件共享、即时消息传送的消息和协作服务器成为当今商业社会中的极重要的IT基础设施。然而&#xff0…

程函方程的详细推导

以下是基于非均匀介质弹性波方程(无纵波假设)推导程函方程的详细过程,完整考虑纵波(P 波)和横波(S 波)的耦合效应:

【JavaEE进阶】MyBatis通过注解实现增删改查

目录 🍃前言 🍀打印日志 🌴传递参数 🎋增(Insert) 🚩返回主键 🎄删(Delete) 🌲改(Update) 🌳查(Select) 🚩起别名 🚩结果映射 🚩开启驼…

[AHOI2018初中组] 分组---贪心算法

贪心没套路果真如此。 题目描述 小可可的学校信息组总共有 n 个队员,每个人都有一个实力值 ai​。现在,一年一度的编程大赛就要到了,小可可的学校获得了若干个参赛名额,教练决定把学校信息组的 n 个队员分成若干个小组去参加这场…

DeepSeek动画视频全攻略:从架构到本地部署

DeepSeek 本身并不直接生成动画视频,而是通过与一系列先进的 AI 工具和传统软件协作,完成动画视频的制作任务。这一独特的架构模式,使得 DeepSeek 在动画视频创作领域发挥着不可或缺的辅助作用。其核心流程主要包括脚本生成、画面设计、视频合成与后期处理这几个关键环节。 …

用deepseek学大模型08-长短时记忆网络 (LSTM)

deepseek.com 从入门到精通长短时记忆网络(LSTM),着重介绍的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导…

以ChatGPT为例解析大模型背后的技术

目录 1、大模型分类 2、为什么自然语言处理可计算? 2.1、One-hot分类编码(传统词表示方法) 2.2、词向量 3、Transformer架构 3.1、何为注意力机制? 3.2、注意力机制在 Transformer 模型中有何意义? 3.3、位置编…

鸿道Intewell操作系统:赋能高端装备制造,引领国产数控系统迈向新高度

在当今全球制造业竞争日益激烈的时代,高端装备制造作为国家核心竞争力的重要组成部分,其发展水平直接影响着一个国家的综合实力。而CNC数控系统,作为高端装备制造的“大脑”,对于提升装备的精度、效率和智能化水平起着关键作用。鸿…

mac开发环境配置笔记

1. 终端配置 参考: Mac终端配置笔记-CSDN博客 2. 下载JDK 到 oracle官网 下载jdk: oracle官网 :Java Downloads | Oraclemac的芯片为Intel系列下载 x64版本的jdk;为Apple Mx系列使用 Arm64版本;oracle官网下载时报错:400 Bad R…

【Python爬虫(29)】爬虫数据生命线:质量评估与监控全解

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?

简介:在人工智能飞速发展的今天,大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作,还是科研辅助、代码生成,大模型的身影无处不在。然而,面对市场上琳琅满目的工具,如何挑选最适合自己的那…

测评雷龙出品的CS SD NAND贴片式TF卡

一、前言 在现代科技飞速发展的背景下,存储解决方案的创新与进步成为了推动各行各业发展的重要力量。这篇文章讲解雷龙公司出品的CS SD NAND贴片式TF卡的深度测评。这款产品不仅以其小巧精致的设计脱颖而出,更凭借其卓越的性能和可靠性,在众…

Hadoop一 HDFS分布式文件系统

一 分布式文件存储 了解为什么海量数据需要使用分布式存储技术 100T数据太大,单台服务器无法承担。于是: 分布式服务器集群 靠数量取胜,多台服务器组合,才能Hold住,如下 分布式不仅仅是解决了能存的问题&#xff…

windows下docker使用笔记

目录 镜像的配置 镜像的拉取 推荐镜像源列表(截至2025年2月测试有效) 配置方法 修改容器名字 如何使用卷 创建不同的容器,每个容器中有不同的mysql和java版本(不推荐) 1. 安装 Docker Desktop(Win…

1005 K 次取反后最大化的数组和(贪心)

文章目录 题目[](https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/)算法原理源码总结 题目 如上图,k是取反的次数,在数组【4,-1,3】中,当k 1,把-2取反为2,和为9;在数组…

java毕业设计之医院门诊挂号系统(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的医院门诊挂号系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 医院门诊挂号系统的主要使用者…

深入学习解析:183页可编辑PPT华为市场营销MPR+LTC流程规划方案

华为终端正面临销售模式转型的关键时刻,旨在通过构建MPRLTC项目,以规避对运营商定制的过度依赖,并探索新的增长路径。项目核心在于建设一套全新的销售流程与IT系统,支撑双品牌及自有品牌的战略发展。 项目总体方案聚焦于四大关键议…

JUC并发—8.并发安全集合一

大纲 1.JDK 1.7的HashMap的死循环与数据丢失 2.ConcurrentHashMap的并发安全 3.ConcurrentHashMap的设计介绍 4.ConcurrentHashMap的put操作流程 5.ConcurrentHashMap的Node数组初始化 6.ConcurrentHashMap对Hash冲突的处理 7.ConcurrentHashMap的并发扩容机制 8.Concu…

Cython学习笔记1:利用Cython加速Python运行速度

Cython学习笔记1:利用Cython加速Python运行速度 CythonCython 的核心特点:利用Cython加速Python运行速度1. Cython加速Python运行速度原理2. 不使用Cython3. 使用Cython加速(1)使用pip安装 cython 和 setuptools 库(2&…