可以理解输出 [python]

Can understand output [python]

这是我的第一个 post 所以对于格式问题我深表歉意。 我得到了我为大学写的那段代码,它用于计算我活了多少天、小时和分钟。

def min_vivido(fech_act,fec_nac):
anosViv = (fech_act%10000) - (fec_nac%10000)
mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)
diasViv = ((fech_act//10000)//100) - ((fec_nac//10000)//100)
print(anosViv)
print(anosViv*365)
total_dia = (anosViv * 365) + (mesViv * 30) + diasViv
horas_dias = total_dia * 24
min_dias = horas_dias * 60

return min_dias, horas_dias, total_dia

所以当我尝试打印这个时:

print(min_vivido(25072017,11101982))

我知道我已经活了 12699 天,304776 小时 18286560 分钟。问题是,如果我只看 2017 年到 1982 年之间的年份,我至少活了 35 年,而 * 365 是 12775,这还不算我多活的月数和天数。

奇怪的是,如果我尝试在我的代码中打印

print(anosViv) and print(anosViv*365)

我得到 35 和 12775

请帮忙,我卡住了

假设您的输入是 int 值,试图以 DDMMYYYY 形式表示日期,请查看您的 mes_viv 计算:

mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)

对于您的输入,25072017(ISO 格式 2017-07-25)用于 fech_act11101982(ISO 格式 1982-10-11)用于出生日期 fec_nac,您正在计算:

mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)
mesViv = ((25072017//10000)%100) - ((11101982//10000)%100)
mesViv = (2507%100) - (1110%100)
mesViv = (7) - (10)
mesViv = -3

问题是,通过首先对年数进行计算,您将对生活的年数进行四舍五入,并通过生活适当数量的负月数来纠正它(天数会出现类似的问题)。所以你的最终结果实际上是正确的(大概);你实际上还没有活完 35 年,你活了不到 3 个月不到 35 年,因此天数应该更少(大约 60-90 天,你瞧,你少了 76 天, 忽略闰年问题)。

也就是说,请使用the datetime module。它将更正确地执行此操作(没有负增量,处理闰日等)并且更简单。

例如,即使不更改输入和输出,您也可以这样做:

import datetime

def numerical_date_to_date(dtint):
    # Factor out conversion from weird int-based format to datetime.date
    daymon, years = divmod(dtint, 10000)
    days, months = divmod(daymon, 100)
    return datetime.date(years, months, days)

def min_vivido(fech_act, fec_nac):
    diff = numerical_date_to_date(fech_act) - numerical_date_to_date(fec_nac)
    horas_dias = diff.days * 24
    min_dias = horas_dias * 60
    return min_dias, horas_dias, diff.days