实验内容
前一日函数PreDate是NextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。
年的取值在1812年到2020年
日的取值在1日到31日之间
1 月的取值在1到12月之间
分析:
(1)分析
输入:year--month--day
操作:
day变量值减1
day复位为30
day复位为31
day复位为30
day复位为29
day复位为28
month变量值减1
month复位为12
year变量值减1
(2)规则
M1={ month有30天 }
M2={ month有31天,1月、3月、8月除外 }
M3={ month是1月 }
M4={ month是2月 }
M5={ month是3月 }
M6={ month是8月 }
D1={ day=1 }
D2={ 2≤day≤27 }
D3={ day=28 }
D4={ day=29 }
D5={ day=30 }
D6={ day=31 }
Y1={ year是闰年 }
Y2={ year不是闰年 }
代码如下:
import datetime
print("请输入格式为xxxx-xx-xx的时间")
while True:
now_time = input('输入时间:')
this_time = datetime.datetime.strptime(now_time, '%Y-%m-%d')
year = int(this_time.strftime("%Y"))
month = int(this_time.strftime("%m"))
day = int(this_time.strftime("%d"))
if year < 1812 or year > 2020 or month < 1 or month > 12 or day < 1 or day > 31:
print('请重新输入时间')
else :
break
# yes_time = this_time + datetime.timedelta(days=-1) #调用函数直接输出
# yes_Time = yes_time.strftime('%Y-%m-%d') #格式化输出
# print(yes_Time)
# 年份发生改变情况
if month == 1 and day == 1:
year = year - 1
month = 12
day = 31
# 月份发生改变
elif month != 1 and day == 1:
if month == 2 or month == 4 or month == 6 or month == 8 or month == 9 or month == 11:
month = month -1
day = 31
elif month == 5 or month == 7 or month == 10 or month == 12:
month = month -1
day = 30
else:
if (year % 4 == 0 and year % 100 > 0) or (year % 100 == 0 and year % 400 == 0) :
month = month - 1
day = 29
else:
month = month - 1
day = 28
# 只是day发生变化
else:
day = day - 1
yes_time = datetime.datetime(year,month,day)
print(yes_time.strftime('%Y-%m-%d'))
决策表
|
1 |
2-5 |
6 |
7 |
8-12 |
13 |
14-18 |
19 |
20-21 |
month在 |
M1 |
M1 |
M1 |
M2 |
M2 |
M3 |
M3 |
M4 |
M4 |
day在 |
D1 |
D2-D5 |
D6 |
D1 |
D2-D6 |
D1 |
D2-D6 |
D1 |
D2-D3 |
year在 |