为了高效背单词,许多人用艾宾浩斯记忆法,即,分别在第1,2,4,7,15天(并不精确,但差不多)记同样的单词。但是为了规划这个计划,必须有个日历。人工写比较麻烦,于是我就变了个程序,可以打印出记忆日历。人生苦短,我用PYTHON。代码如下:
import sys
class Calender:
def __init__(self, row:int):
self.row = row
self.schedule = [[] for _ in range(row*7)]
def find_2_consequtive_spare_days(self):
for i in range(len(self.schedule)):
if len(self.schedule[i]) == 0 and len(self.schedule[i+1]) == 0:
return i
return -1
def ebinhouse(self):
intervals = [1, 2, 4, 7, 15]
lesson = 0
enough = True
while enough:
lesson += 1
start = self.find_2_consequtive_spare_days()
if start < 0:
break
for k in intervals:
day = start + k - 1
if day >= len(self.schedule):
enough = False
break
self.schedule[day].append(lesson)
def print(self):
week = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
content = ""
for j in range(len(week)):
content += week[j] + "\t"
content += "\n"
for i in range(self.row):
for j in range(len(week)):
day = i * 7 + j
content += str(self.schedule[day]) + "\t"
content += "\n"
print(content)
if __name__ == "__main__":
row = 30
if len(sys.argv) >= 2:
row = int(sys.argv[1])
calender = Calender(row)
calender.ebinhouse()
calender.print()
生成出如下表格:
Mon Tue Wed Thu Fri Sat Sun
[1] [1] [] [1] [2] [2] [1]
[2] [3] [3] [2] [3] [4] [4]
[1, 3] [4] [5] [5] [2, 4] [5] [6]
[6] [3, 5] [6] [7] [7] [4, 6] [7]
[8] [8] [5, 7] [8] [9] [9] [6, 8]
[9] [10] [10] [7, 9] [10] [11] [11]
……
其中每个数字代表一个单元,单元的单词数量可多可少,根据自己的时间定。拿走不谢。