软件测试python版本的决策表法解决preDate返回前一天日期

实验内容

前一日函数PreDateNextDate的逆函数,即给定一个月份、日期、年,会返回前一天的日期。

年的取值在1812年到2020年

日的取值在1日到31日之间

1 月的取值在112月之间

分析:

(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在

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值