孩子學習一個知識有三個階段:課前預習+上課認真學習+課後適時復習
課後適時復習需要時間表,比如下面這樣:
這個時間表最麻煩的是每天都要手動去計算復習時間,我手動計算了一段時間,真是耗時又容易出錯,人的腦子不適合做這種計算。
這種簡單重復的計算還是應該交給計算機來完成。
所以昨晚用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-27'
# 將輸入的日期字符串拆分並轉化為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]
stage_3_months = [date_point_10[1]+1, date_point_10[1]+2, date_point_10[1]+3, date_point_10[1]+4, date_point_10[1]+5]
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自動按三列存儲了。