代码之家  ›  专栏  ›  技术社区  ›  sebaLinares

能够理解输出[python]

  •  -1
  • sebaLinares  · 技术社区  · 7 年前

    这是我的第一篇帖子,所以我对格式表示歉意。 我得到了一段我为大学写的代码,它是用来计算我生活了多少天,多少小时,多少分钟。

    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))
    

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

    print(anosViv) and print(anosViv*365)
    

    求求你,我卡住了

    1 回复  |  直到 7 年前
        1
  •  1
  •   ShadowRanger    7 年前

    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
    

    问题是,通过先对年份进行计算,你就可以对生存的年份进行四舍五入,并通过适当的负月数进行修正(类似的问题会在几天内出现)。所以你的最终结果实际上是正确的(ish);实际上,你还没有度过35年,你的寿命比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