用Python写的自动生成孩子复习时间的代码

孩子学习一个知识有三个阶段:课前预习+上课认真学习+课后适时复习

课后适时复习需要时间表,比如下面这样:
在这里插入图片描述
这个时间表最麻烦的是每天都要手动去计算复习时间,我手动计算了一段时间,真是耗时又容易出错,人的脑子不适合做这种计算。

这种简单重复的计算还是应该交给计算机来完成。

所以昨晚用Python写了个代码,完成上面的任务。

代码如下:

# !/usr/bin/env python
# -*- coding: utf-8 -*-

import datetime  # 导入时间模块


# 日期计算函数
# start_date_list为列表对象,三个int元素,分别表示年月日
# day_step为向后多少天
# 返回值end_date_list也为列表对象,三个int元素,分别表示年月日
def date_count(start_date_list, day_step):
    year_start = start_date_list[0]
    month_start = start_date_list[1]
    day_start = start_date_list[2]

    start_date = datetime.datetime(year_start, month_start, day_start)
    end_date = start_date + datetime.timedelta(day_step)

    year_end = end_date.year
    month_end = end_date.month
    day_end = end_date.day

    end_date_list = [year_end, month_end, day_end]
    return end_date_list


study_date = input("请输入年月日(如1990-01-01):")  # 输入当前日期
# study_date = '2022-06-28'

# 将输入的日期字符串拆分并转化为int型
study_date_split = study_date.split("-")
year1 = study_date_split[0]
month1 = study_date_split[1]
day1 = study_date_split[2]
year1_int = int(year1)
month1_int = int(month1)
day1_int = int(day1)

# 生成第一阶段(连续复习七天)的复习时间
date_point_1 = [year1_int, month1_int, day1_int]
date_point_2 = date_count(date_point_1, 6)
stage_1_str = '{}月{}日至{}月{}日'.format(date_point_1[1], date_point_1[2], date_point_2[1], date_point_2[2])

# 生成第二阶段(连续复习四周,一周复习一次)的第一周复习时间
date_point_3 = date_count(date_point_2, 1)
date_point_4 = date_count(date_point_3, 6)
stage_2_str1 = '第一周({}月{}日至{}月{}日)'.format(date_point_3[1], date_point_3[2], date_point_4[1], date_point_4[2])

# 生成第二阶段(连续复习四周,一周复习一次)的第二周复习时间
date_point_5 = date_count(date_point_4, 1)
date_point_6 = date_count(date_point_5, 6)
stage_2_str2 = '第二周({}月{}日至{}月{}日)'.format(date_point_5[1], date_point_5[2], date_point_6[1], date_point_6[2])

# 生成第二阶段(连续复习四周,一周复习一次)的第三周复习时间
date_point_7 = date_count(date_point_6, 1)
date_point_8 = date_count(date_point_7, 6)
stage_2_str3 = '第三周({}月{}日至{}月{}日)'.format(date_point_7[1], date_point_7[2], date_point_8[1], date_point_8[2])

# 生成第二阶段(连续复习四周,一周复习一次)的第四周复习时间
date_point_9 = date_count(date_point_8, 1)
date_point_10 = date_count(date_point_9, 6)
stage_2_str4 = '第四周({}月{}日至{}月{}日)'.format(date_point_9[1], date_point_9[2], date_point_10[1], date_point_10[2])

# 汇总第二阶段的复习时间
stage_2_str = stage_2_str1+stage_2_str2+stage_2_str3+stage_2_str4

# 生成第三阶段(连续复习五个月,一个月复习一次)的复习时间
stage_3_day = date_point_10[2]
s3_ms = date_point_10[1]
stage_3_months = [(s3_ms+1) % 12, (s3_ms+2) % 12, (s3_ms+3) % 12, (s3_ms+4) % 12, (s3_ms+5) % 12]

# 下面这几句代码的详解见博文https://blog.csdn.net/wenhao_ir/article/details/125443427
for index, x in enumerate(stage_3_months):
    if x == 0:
        stage_3_months[index] = 12

stage_3_str = '{0}月{5}日 {1}月{5}日 {2}月{5}日 {3}月{5}日 {4}月{5}日'.format(stage_3_months[0], stage_3_months[1],
                                                                    stage_3_months[2], stage_3_months[3],
                                                                    stage_3_months[4], stage_3_day)

# 打印输出所有复习时间
print('今天子衡学习内容的复习时刻表如下:')

# 本来下面这条语句中应该用tab字符(\t)作为分隔符的,
# 但是不在Pycharm中运行时,输出的tab字符元法被Excel识别
# 不仅无法识别,还导致每个阶段与每个阶段之间的空白太大
# 所以只好用'#'代替,只是需要把生成的内容复制到txt中再作个替换
# 把'#'用tab替换
char_separate = '#'
str_all = stage_1_str+char_separate+stage_2_str+char_separate+stage_3_str
print(str_all)

# 让cmd窗口不要自动关闭
input('Press Enter to exit...')

代码就不解释了,上面的注释已经写得很清楚了。

运行结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

把上面的内容复制到Notepad++中,
在这里插入图片描述

然后对‘#’作替换处理:
在这里插入图片描述
然后把替换好的内容粘贴到Excel中就行了~
在这里插入图片描述
由于复制的内容到了tab制表符,所以Excel自动按三列存储了。

猜你喜欢

转载自blog.csdn.net/wenhao_ir/article/details/125496932