本文目录导读:
- 项目一:随机密码生成器(基础 · 文件与字符串处理)
- 项目二:简易待办事项管理器(入门 · 列表与JSON)
- 项目三:天气查询助手(进阶 · API请求与JSON)
- 项目四:文本关键词统计器(实用 · 文件处理与正则)
- 项目五:桌面番茄钟(图形化 · Tkinter入门)
- 💡 学习建议
Python 小型实战项目是巩固语法、理解编程逻辑、并快速获得成就感的最佳方式,以下我为你整理了 5个不同难度和方向的小型实战项目,每个都附带了核心知识点和简要的代码思路。
这些项目建议在 100-200 行代码内完成。
项目一:随机密码生成器(基础 · 文件与字符串处理)
项目简介:
用户输入想要生成的密码长度和数量,程序生成包含大小写字母、数字和特殊符号的强密码,并保存到 passwords.txt 文件中。
核心技术点:
string模块 (ascii_letters,digits,punctuation)random模块 (random.choice,random.shuffle)- 文件读写 (
with open(...) as f) - 基本函数封装
核心代码思路:
import string
import random
def generate_password(length=12):
characters = string.ascii_letters + string.digits + string.punctuation
password = ''.join(random.choice(characters) for _ in range(length))
return password
def save_passwords(passwords, filename="passwords.txt"):
with open(filename, 'a') as f: # 'a' 表示追加模式
for pwd in passwords:
f.write(pwd + '\n')
# 用户交互
length = int(input("请输入密码长度: "))
count = int(input("请输入生成数量: "))
passwords = [generate_password(length) for _ in range(count)]
save_passwords(passwords)
print("密码已保存到 passwords.txt")
项目二:简易待办事项管理器(入门 · 列表与JSON)
项目简介:
一个命令行下的待办事项应用,支持 add(添加)、done(标记完成)、list(查看列表)、delete(删除)等功能,数据持久化存储在 todo.json 文件中。
核心技术点:
- JSON 序列化/反序列化 (
json.load,json.dump) - 列表与字典的操作
- 命令行参数解析 (简单版用
sys.argv或input().split()) - 时间戳 (
datetime)
核心代码思路:
import json
import os
from datetime import datetime
TODO_FILE = "todo.json"
def load_tasks():
if not os.path.exists(TODO_FILE):
return []
with open(TODO_FILE, 'r') as f:
return json.load(f)
def save_tasks(tasks):
with open(TODO_FILE, 'w') as f:
json.dump(tasks, f, indent=4)
def add_task(task_name):
tasks = load_tasks()
task = {"id": len(tasks) + 1, "name": task_name, "done": False, "created": str(datetime.now())}
tasks.append(task)
save_tasks(tasks)
def list_tasks():
tasks = load_tasks()
for task in tasks:
status = "✅" if task["done"] else "⬜"
print(f"{status} [{task['id']}] {task['name']}")
# 主循环
if __name__ == "__main__":
while True:
cmd = input("> ").strip().lower()
if cmd.startswith("add "):
add_task(cmd[4:])
elif cmd == "list":
list_tasks()
elif cmd.startswith("done "):
# 实现标记完成逻辑
pass
elif cmd == "exit":
break
项目三:天气查询助手(进阶 · API请求与JSON)
项目简介:
通过调用免费天气 API(如 OpenWeatherMap 或 wttr.in),输入城市名,返回当前温度、湿度和天气状况,无需 API Key 可以使用 wttr.in。
核心技术点:
requests库(HTTP 请求)- API 接口调用与 JSON 解析
- 异常处理 (
try...except)
核心代码思路(使用 wttr.in,无需API Key):
import requests
import json
def get_weather(city):
# wttr.in 是一个免费、无需 key 的命令行天气服务
url = f"https://wttr.in/{city}?format=j1" # j1 返回 JSON 格式
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
data = response.json()
current = data['current_condition'][0]
temp = current['temp_C']
humidity = current['humidity']
desc = current['weatherDesc'][0]['value']
print(f"🌆 {city} 的天气:")
print(f"🌡️ 温度: {temp}°C")
print(f"💧 湿度: {humidity}%")
print(f"☁️ 描述: {desc}")
except requests.exceptions.RequestException as e:
print(f"网络错误: {e}")
except (KeyError, IndexError):
print("无法解析天气数据,请检查城市名。")
if __name__ == "__main__":
city = input("请输入城市名 ( Beijing, London): ")
get_weather(city)
项目四:文本关键词统计器(实用 · 文件处理与正则)
项目简介:
读取一篇英文或中文文章(.txt 文件),统计其中出现频率最高的前10个单词,并过滤掉常见的停用词(如 "the", "a", "is")。
核心技术点:
- 文件读取
collections.Counter(计数器)- 正则表达式
re.findall(r'\b\w+\b')或中文分词(简单版可去掉标点) - 数据可视化(可选,用
matplotlib画柱状图)
核心代码思路:
import re
from collections import Counter
# 常见的英文停用词
STOP_WORDS = {'the', 'a', 'an', 'is', 'are', 'was', 'were', 'in', 'on', 'at', 'to', 'of', 'and', 'for', 'it', 'this', 'that', 'with', 'from', 'as', 'by', 'be', 'has', 'have', 'had'}
def analyze_text(filepath):
with open(filepath, 'r', encoding='utf-8') as f:
text = f.read().lower() # 统一小写
# 使用正则提取所有单词(只保留字母)
words = re.findall(r'\b[a-z]+\b', text)
# 过滤停用词
filtered_words = [word for word in words if word not in STOP_WORDS and len(word) > 1]
# 统计频率
word_counts = Counter(filtered_words)
print("出现频率最高的前10个词:")
for word, count in word_counts.most_common(10):
print(f"{word}: {count} 次")
if __name__ == "__main__":
filepath = input("请输入文本文件路径: ")
analyze_text(filepath)
项目五:桌面番茄钟(图形化 · Tkinter入门)
项目简介:
使用 Python 自带的 GUI 库 tkinter,制作一个经典的番茄钟(25分钟专注,5分钟休息)带倒计时显示和开始/重置按钮。
核心技术点:
tkinter基础(窗口、标签、按钮、布局)- 定时器 (
root.after) - 状态管理(专注/休息切换)
核心代码思路(简化版):
import tkinter as tk
class PomodoroTimer:
def __init__(self, root):
self.root = root
self.root.title("🍅 番茄钟")
self.work_min = 25 * 60 # 25分钟
self.break_min = 5 * 60 # 5分钟
self.remaining = self.work_min
self.is_work = True
self.running = False
self.label = tk.Label(root, text="25:00", font=("Arial", 48, "bold"))
self.label.pack(pady=20)
self.status_label = tk.Label(root, text="工作时间", font=("Arial", 14))
self.status_label.pack()
self.start_btn = tk.Button(root, text="开始", command=self.start_timer)
self.start_btn.pack(side=tk.LEFT, padx=10)
self.reset_btn = tk.Button(root, text="重置", command=self.reset_timer)
self.reset_btn.pack(side=tk.RIGHT, padx=10)
def update_display(self):
mins, secs = divmod(self.remaining, 60)
self.label.config(text=f"{mins:02d}:{secs:02d}")
def countdown(self):
if self.running and self.remaining > 0:
self.remaining -= 1
self.update_display()
self.root.after(1000, self.countdown) # 每秒调用一次自己
elif self.remaining == 0:
self.running = False
self.switch_mode()
def start_timer(self):
if not self.running:
self.running = True
self.countdown()
def reset_timer(self):
self.running = False
self.remaining = self.work_min if self.is_work else self.break_min
self.update_display()
def switch_mode(self):
self.is_work = not self.is_work
self.remaining = self.work_min if self.is_work else self.break_min
self.status_label.config(text="工作时间" if self.is_work else "休息时间")
self.update_display()
if __name__ == "__main__":
root = tk.Tk()
app = PomodoroTimer(root)
root.mainloop()
💡 学习建议
- 先复制运行:把代码复制到本地跑通,理解每一行的作用。
- 添加你的功能:比如在“待办事项”中增加优先级,在“密码生成器”中增加数字/符号的强制比例。
- 重构代码:将重复的代码提炼成函数或类。
- 写注释:用中文注释解释你的逻辑,这是提升思维的好方法。
你可以从项目一(密码生成器) 或项目三(天气查询) 开始,因为它们反馈最直观,需要的轮子最少,祝你编码愉快!
标签: 实战案例