Python小练习:使用艾宾浩斯进行学习计划,并导出为txt文档
为了辅导家里的小孩学习,打算使用艾宾浩斯来做一个学习计划。
以每天要学习的量为一个知识点(例如,英文书的一页纸为一个知识点,一天新学一页纸,或者一个章节,或者每天10个单词之类)。
但是知识点数量常常不固定,每次用excel 慢慢改都挺麻烦的。所以最好是程序生成。
随便查了一下,网络上没有现成的,所以自己撸了一个,初学python,请勿见怪。使用的IDE是VS Code。
下面代码的例子就是,一共需要学习5个知识点。(请自行更改数量)
totalPoint=32; # 请改这里。每天学习一个知识点,一共多少个知识点;必须是大于1的整数。# 根据经验,6个或者以上,就不会出现Rest休息的日子。 EbbinghausDays=[0,1,2,5,8,14]; # 这里可以改 # 0天,1天后,2天后,5天后,8天后,14天后 # 每个知识点都学习1+5=6天 firstTimes=3 # 这里可以改 # 第一天学习几次,可以设置为1次、3次等 # 获得桌面路径,找了几个,只有这个是正确的,其他的方法都是默认是C盘的 import ctypes from ctypes import wintypes, windll def GetDesktopPath(): CSIDL_DESKTOP = 0 _SHGetFolderPath = windll.shell32.SHGetFolderPathW _SHGetFolderPath.argtypes = [wintypes.HWND, ctypes.c_int, wintypes.HANDLE, wintypes.DWORD, wintypes.LPCWSTR] path_buf = ctypes.create_unicode_buffer(wintypes.MAX_PATH) result = _SHGetFolderPath(0, CSIDL_DESKTOP, 0, 0, path_buf) return path_buf.value # 把list转为string def list2string(lst): result = '' for item in lst: if(result!=''): result += '\n' result += item return result.strip() # 把string保存为txt文件 import os def string2txt(content,file_name=''): # 拼接桌面路径 _desktop_path = GetDesktopPath(); # _desktop_path = os.path.join(os.path.expanduser('~'),'Desktop') # 这个方法获得的desktop是C盘的,因此是错误的 file_name=file_name.strip(); # 相当于trim if(file_name==''): file_name = 'test.txt' # 拼接完整文件路径 file_path = os.path.join(_desktop_path, file_name) # 打开文件,写模式 with open(file_path,'w') as f: f.write(content) print("--- start ---"); list1 = [] rDays=range(1,totalPoint+1); for r in rDays: print(r); print("------"); # print(EbbinghausDays[-1]); for number in range(1, totalPoint+EbbinghausDays[-1]+1): line=""; for r in rDays: for day in EbbinghausDays: if(r+day==number): if(line!=""): line+="\t"; line +=str(r); if(r==number): for t in range(1,firstTimes): line+="\t"+str(r); # print(str(r)+"+"+str(day)+"="+str(r+day)); # print(number); # print("......"); if(line!=""): line="day"+str(number)+"\t"+line; print(line); list1.append(line); else: print("day"+str(number)+"\tRest"); # 当天没有需要学习的知识点,所以休息Rest。 list1.append(line); # 行头加上序号。i从0开始 for i in range(len(list1)): if(i<len(rDays)): list1[i]=str(i+1)+"\t\t"+list1[i] else: list1[i]="\t\t"+list1[i] # 把标题添加到最前面 # 方法一:list1 = ["知识点\t对应内容\t日期\t学习详情"] + list1 # 方法二: list1.insert(0, "知识点\t对应内容\t日期\t学习详情") print("------"); print ("更新后的列表 : \n", list1); print("------"); print ("更新后的列表 : \n", list2string(list1)); print("--- end ---"); string2txt(list2string(list1)); # 导出为桌面txt文档
输出结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】