本文目录导读:

我来介绍几种编写生词复习提醒脚本的方法,从简单到复杂:
最简单的命令行脚本(Python)
import time
import random
# 生词库
vocabulary = {
"abandon": "放弃",
"benefit": "好处",
"challenge": "挑战",
"dedicate": "致力于",
"efficient": "高效的"
}
def show_review():
"""显示随机生词"""
word, meaning = random.choice(list(vocabulary.items()))
print(f"\n📚 生词复习提醒!")
print(f"单词: {word}")
input("按回车查看释义...")
print(f"释义: {meaning}")
# 每30分钟提醒一次
while True:
show_review()
print("\n下次提醒在30分钟后...")
time.sleep(1800) # 30分钟
带背诵间隔的复习脚本
import schedule
import time
from datetime import datetime
class VocabularyReview:
def __init__(self):
self.words = {}
self.review_count = {} # 记录每个单词复习次数
def add_word(self, word, meaning):
"""添加生词"""
self.words[word] = meaning
self.review_count[word] = 0
def calculate_interval(self, word):
"""根据复习次数计算间隔"""
count = self.review_count[word]
# 艾宾浩斯遗忘曲线间隔
intervals = [1, 2, 4, 7, 15, 30] # 天数
if count < len(intervals):
return intervals[count] * 3600 # 转换为秒
else:
return 30 * 3600 # 超过6次后每月复习一次
def review_word(self, word):
"""复习一个单词"""
self.review_count[word] += 1
print(f"\n⏰ 复习提醒!")
print(f"单词: {word}")
print(f"释义: {self.words[word]}")
print(f"已复习 {self.review_count[word]} 次")
# 显示下次复习时间
interval = self.calculate_interval(word)
next_review = time.time() + interval
print(f"下次复习: {datetime.fromtimestamp(next_review).strftime('%Y-%m-%d %H:%M')}")
# 使用示例
reviewer = VocabularyReview()
reviewer.add_word("persistent", "坚持不懈的")
reviewer.add_word("ambiguous", "模糊不清的")
reviewer.add_word("comprehensive", "全面的")
# 立即复习一个
reviewer.review_word("persistent")
带GUI界面的版本
import tkinter as tk
from tkinter import messagebox
import time
import threading
class VocabularyReviewer:
def __init__(self):
self.root = tk.Tk()
self.root.title("生词复习提醒")
self.root.geometry("400x300")
# 生词库
self.words = {
"elaborate": "精心制作的",
"fluctuate": "波动",
"generate": "产生",
"hypothesis": "假设",
"inevitable": "不可避免的"
}
self.current_word = None
self.create_widgets()
# 启动定期提醒
self.start_reminder()
def create_widgets(self):
"""创建界面元素"""
# 生词显示
self.word_label = tk.Label(self.root, text="", font=("Arial", 24))
self.word_label.pack(pady=20)
# 释义标签(初始隐藏)
self.meaning_label = tk.Label(self.root, text="", font=("Arial", 16))
self.meaning_label.pack(pady=10)
# 按钮
self.show_btn = tk.Button(self.root, text="显示释义",
command=self.show_meaning)
self.show_btn.pack(pady=10)
self.next_btn = tk.Button(self.root, text="下一个",
command=self.next_word)
self.next_btn.pack(pady=10)
# 状态显示
self.status_label = tk.Label(self.root, text="", font=("Arial", 10))
self.status_label.pack(pady=20)
def start_reminder(self):
"""开始定时提醒"""
def remind():
while True:
time.sleep(1800) # 半小时
self.root.after(0, self.show_reminder)
thread = threading.Thread(target=remind, daemon=True)
thread.start()
def show_reminder(self):
"""显示提醒对话框"""
if messagebox.askyesno("复习提醒", "该复习生词了!现在复习吗?"):
self.next_word()
def show_meaning(self):
"""显示单词释义"""
if self.current_word and self.current_word in self.words:
self.meaning_label.config(text=self.words[self.current_word])
def next_word(self):
"""切换到下一个单词"""
import random
word = random.choice(list(self.words.keys()))
self.current_word = word
self.word_label.config(text=word)
self.meaning_label.config(text="") # 隐藏释义
self.status_label.config(text=f"共有 {len(self.words)} 个生词")
def run(self):
"""运行程序"""
self.next_word()
self.root.mainloop()
# 运行程序
if __name__ == "__main__":
app = VocabularyReviewer()
app.run()
网页版提醒(使用Flask)
# server.py
from flask import Flask, render_template, jsonify
import random
from datetime import datetime, timedelta
app = Flask(__name__)
# 生词库
vocabulary = [
{"word": "accomplish", "meaning": "完成", "example": "accomplish a task"},
{"word": "brilliant", "meaning": "杰出的", "example": "brilliant idea"},
{"word": "consequence", "meaning": "后果", "example": "face the consequences"},
{"word": "demonstrate", "meaning": "展示", "example": "demonstrate a skill"},
]
@app.route('/')
def index():
return '''
<html>
<head>
<title>生词复习</title>
<style>
body { font-family: Arial; margin: 50px; text-align: center; }
.word { font-size: 30px; margin: 20px; }
.meaning { font-size: 20px; color: #666; }
.btn { padding: 10px 20px; margin: 10px; cursor: pointer; }
</style>
</head>
<body>
<h1>📚 生词复习提醒</h1>
<div id="word" class="word"></div>
<div id="meaning" class="meaning"></div>
<button class="btn" onclick="getWord()">下一个单词</button>
<button class="btn" onclick="showMeaning()">显示释义</button>
<script>
let currentWord = {};
function getWord() {
fetch('/random_word')
.then(response => response.json())
.then(data => {
currentWord = data;
document.getElementById('word').textContent = data.word;
document.getElementById('meaning').textContent = '点击显示释义';
});
}
function showMeaning() {
if (currentWord.meaning) {
document.getElementById('meaning').textContent =
currentWord.meaning + ' | 例句: ' + currentWord.example;
}
}
// 初始加载
getWord();
// 每30分钟提醒
setInterval(() => {
if(confirm('该复习生词了!')) {
getWord();
}
}, 1800000);
</script>
</body>
</html>
'''
@app.route('/random_word')
def random_word():
return jsonify(random.choice(vocabulary))
if __name__ == '__main__':
app.run(debug=True)
使用建议
- 根据需求选择版本:简单提醒用版本1,科学复习用版本2,有界面需求用版本3
- 自定义复习间隔:根据艾宾浩斯遗忘曲线设置合理间隔
- 导入生词表:可以从文件或API导入词汇
- 添加通知功能:可以集成系统通知或邮件提醒
需要我详细解释某个特定功能或帮你定制更复杂的版本吗?