如何计算类Spreeder终端速读工具的chunk块切换间隔时间
正确的间隔时长计算方案
你原本推导的公式数学逻辑是通顺的,偏差来源主要是没有适配最后一个chunk的实际单词数,调整后即可得到准确的间隔时间。
核心计算逻辑
WPM的定义是每分钟阅读的单词数,因此单个单词的基础停留时长为 60 / wpm 秒,一个包含k个单词的chunk的停留时长就是 k * (60 / wpm) 秒,和你写的 k/(wpm/60) 等价。
重点注意:k是当前chunk实际包含的单词数,不是固定的用户输入chunkSize,最后一个chunk的单词数通常会小于预设的chunkSize,不能直接用固定值计算
代码修改参考
删除主函数里固定的t赋值逻辑,把t的计算放到循环内部,每次根据当前chunk的实际单词数动态计算即可,修改后的main函数参考如下:
def main(): run_time = run_times(chunkSize) # 提前捕获chunk过大的异常,避免后续报错 if run_time == "Error": return startIndex = 0 endIndex = chunkSize - 1 for i in range(run_time): temp_string = dye(startIndex, endIndex) print(temp_string) # 按当前chunk实际包含的单词数计算停留时长 current_chunk_words = endIndex - startIndex + 1 t = current_chunk_words * 60 / wpm clear_screen(t) # 索引更新逻辑可以简化为如下写法,效果和你原本的判断完全一致 startIndex += chunkSize endIndex = min(endIndex + chunkSize, len(all_words) - 1)
可选优化点
可以提前把原文拆分好的单词列表存为全局变量,不用每次在dye函数里重复split字符串,能减少不必要的性能开销。
内容的提问来源于stack exchange,提问作者BooRuleDie
相关产品推荐
相关产品推荐

