【发布时间】:2020-07-22 06:46:32
【问题描述】:
我想通过两个日期之间的特定规则来确定费用。问题是输入不是日期格式,而是:
6 6 2020
9 9 2020
条件如下:
- 如果是同一天,则固定成本为 20。
- 如果在一天之后但仍在一个月内,则成本 = 30 *(天数)。
- 如果一个月后但仍在一年内,则成本 = 1000 *(月数)。
- 如果在创建一年之后,则固定成本为 20000。
如何仅通过更改 cost() 来比较它们?
我尝试过的远非完美,并且已经使用了太多分支:
def cost(d1, m1, y1, d2, m2, y2):
yd=0
md=0
dd = 0
if (y1==y2):
yd=0
else: yd=abs(y1-y2)
if (m1==m2):
md=0
else: md=abs(m1-m2)
if (d1==d2):
dd=0
else: dd=abs(d1-d2)
cost = int()
if (md>11 or yd>0):
cost = 20000
elif (md>0 and md<12):
cost = 1000*md
elif (dd==0 and md==0 and yd==0):
cost = 20
elif (dd>0 and md==0 and yd==0):
cost = dd*30
print("yd=",yd)
print("md=",md)
print("dd=",dd)
return cost
if __name__ == '__main__':
#d1M1Y1 = input().split()
d1M1Y1 = [6,1,2020]
d1 = int(d1M1Y1[0])
m1 = int(d1M1Y1[1])
y1 = int(d1M1Y1[2])
#d2M2Y2 = input().split()
d2M2Y2 = [4,1,2021]
d2 = int(d2M2Y2[0])
m2 = int(d2M2Y2[1])
y2 = int(d2M2Y2[2])
result = server_cost(d1, m1, y1, d2, m2, y2)
print(str(result) + '\n')
【问题讨论】:
-
您最好将字符串转换为日期,然后进行比较。
-
为什么不使用
datetime.strpdate()将字符串解码为datetime.datetime,然后您可以使用>和<比较值 -
@RA3 是否允许如上所述将输入转换为日期时间?检查date time。最佳
-
然后您可以减去日期并获得天数和月数,而无需担心复杂的逻辑。
-
我建议您在结束日期上增加 1 天以简化您的逻辑。当您减去日期时,如果差异为 1 天,则为 20,如果差异大于 1 天但小于一个月,则直接将天数差异乘以 30,依此类推。否则你会陷入极端情况。