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文档
复制代码

 

 

输出结果如下:

 

posted @   zzgreg  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示