如何实现每次触发时从文件读取下一行内容的闪卡程序功能
现有代码问题说明
- 第一段无效代码问题:
- 函数内部的
with open语句缺少缩进,存在语法错误无法正常运行 - 遍历文件对象时同时调用
next(f),会导致每次循环跳过1行,实际每轮读取2行内容 - 判断逻辑
if 'A' == line.strip()仅会在某行内容恰好为A时才打印下一行,和你的需求完全不符
- 第二段代码的缺陷:
- 每次调用函数都会重新打开文件,计数变量每次从0开始计算,没有记录上次读取的位置,所以永远只会输出固定行内容
实现方案
闪卡场景单词量级一般不大,最简单的实现方式是程序启动时一次性将所有单词、释义加载到内存,用索引变量记录当前读取位置,每次调用函数时索引自增即可,具体代码如下:
# 全局变量,程序启动时初始化 word_list = [] definition_list = [] current_index = 0 # 预加载单词和释义数据,程序启动时仅需执行1次 def load_resource(): global word_list, definition_list # 加载单词列表,自动过滤空行 with open('Words.txt', 'r', encoding='utf-8') as f: word_list = [line.strip() for line in f if line.strip()] # 加载释义列表,格式和单词文件完全一致 with open('Definitions.txt', 'r', encoding='utf-8') as f: definition_list = [line.strip() for line in f if line.strip()] # 点击按钮时调用的函数 def nextWord(): global current_index # 读完所有单词后的处理,要循环背的话可以把current_index重置为0 if current_index >= len(word_list): print("已完成所有单词的学习") return # 读取当前单词和对应释义 current_word = word_list[current_index] current_def = definition_list[current_index] # 此处可替换为你闪卡界面的展示逻辑,当前为测试打印 print(f"单词:{current_word}") print(f"释义:{current_def}") # 索引+1,下次调用自动取下一组 current_index += 1
使用说明
- 程序启动时先调用一次
load_resource()完成数据加载 - 每次点击闪卡的下一个按钮,直接调用
nextWord()即可按顺序展示下一组单词和释义 - 如果你的词库量级极大(十万条以上)不想占用过多内存,可以用文件对象的
tell()方法记录读取偏移量,将偏移量存在本地临时文件中,每次调用函数时用seek()跳转到对应位置读取即可,也能实现断点续读的效果
内容的提问来源于stack exchange,提问作者helicopter
相关产品推荐
相关产品推荐

