如何编写生词复习提醒脚本

wen 实用脚本 29

本文目录导读:

如何编写生词复习提醒脚本

  1. 最简单的命令行脚本(Python)
  2. 带背诵间隔的复习脚本
  3. 带GUI界面的版本
  4. 网页版提醒(使用Flask)
  5. 使用建议

我来介绍几种编写生词复习提醒脚本的方法,从简单到复杂:

最简单的命令行脚本(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. 根据需求选择版本:简单提醒用版本1,科学复习用版本2,有界面需求用版本3
  2. 自定义复习间隔:根据艾宾浩斯遗忘曲线设置合理间隔
  3. 导入生词表:可以从文件或API导入词汇
  4. 添加通知功能:可以集成系统通知或邮件提醒

需要我详细解释某个特定功能或帮你定制更复杂的版本吗?

抱歉,评论功能暂时关闭!