可以理解输出 [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_act
,11101982
(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
这是我的第一个 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_act
,11101982
(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