美文网首页
python小题 按天算年龄

python小题 按天算年龄

作者: 生活就是爱 | 来源:发表于2020-06-27 13:38 被阅读0次

今天玩了一个题目,本来以为很简单,结果也折腾了好久,还在网上搜了一下解题思路才把代码写出来

一、题目

问题:输入出生日期和当前的日期,输出活了多少天

举例:你是昨天出生的,那么输出就为1

本题来自Udacity的计算机科学导论课程,用来做Python入门
官网还有几个测试用例

test_cases = [((2012,1,1,2012,2,28), 58), 
                  ((2012,1,1,2012,3,1), 60),
                  ((2011,6,30,2012,6,30), 366),
                  ((2011,1,1,2012,8,8), 585 ),
                  ((1900,1,1,1999,12,31), 36523)]

二、解题思路

分三种情况讨论:

1、年份和月份都相同

2、年份相同月份不同,先计算出生当天是当年的第几天,后计算当前为当年的第几天,相减

3、年份不同,还是先计算出生当天为当年的第几天,后计算当前为当年的第几天,做闰年判断,逐一相加

闰年为一下两种情况

1、能被400整除

2、能被4整除但不能被100整除

三、代码实现

# By Websten from forums
#
# Given your birthday and the current date, calculate your age in days. 
# Account for leap days. 
#
# Assume that the birthday and current date are correct dates (and no 
# time travel). 
#

def is_runnian(year):
    if year%400 == 0:
        return True
    elif year%4==0 and year%100!=0:
        return True
    else:
        return False
        
def days_of_year(year):
    if not is_runnian(year):
        days_of_year = 365
    else:
        days_of_year = 366
    return days_of_year
    
def count_day(year,month,day):
    if not is_runnian(year):
        daysOfMonths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    else:
        daysOfMonths = [ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    days = 0
    for i in range(1,month):
        days += daysOfMonths[i-1]
    days+=day
    return days

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    ##
    # Your code here.
    ##
    if year1==year2 and month1==month2:
        return day2-day1
    elif year1==year2:
        return count_day(year2,month2,day2)-count_day(year1,month1,day1)
    else:
        if (year2-year1)==1:
            return days_of_year(year1)-count_day(year1,month1,day1)+count_day(year2,month2,day2)
        else:
            days=0
            for i in range(year1+1,year2):
                days+=days_of_year(i)
            days = days+days_of_year(year1)-count_day(year1,month1,day1)+count_day(year2,month2,day2)
            
        return days


# Test routine

def test():
    test_cases = [((2012,1,1,2012,2,28), 58), 
                  ((2012,1,1,2012,3,1), 60),
                  ((2011,6,30,2012,6,30), 366),
                  ((2011,1,1,2012,8,8), 585 ),
                  ((1900,1,1,1999,12,31), 36523)]
    for (args, answer) in test_cases:
        result = daysBetweenDates(*args)
        if result != answer:
            print "Test with data:", args, "failed",result
        else:
            print "Test case passed!", args

test()

参考资料:
python 按天算年龄

相关文章

  • python小题 按天算年龄

    今天玩了一个题目,本来以为很简单,结果也折腾了好久,还在网上搜了一下解题思路才把代码写出来 一、题目 本题来自Ud...

  • 《日更挑战》

    时间确实是可以在指尖流逝,不管是按年算,按月算,按天算,还是按小时算…… 日更挑战转眼间已经120天了,已经想不起...

  • 一只流浪猫的流浪生涯

    我是一只流浪猫。按人类的年龄来算,我有7岁,这大大超过我同伴们的平均寿命。按我们猫的年龄来算,我已是只阅尽千帆的老...

  • Python练习小题

    倒序一个整数 例如 1234 --> 4321 进阶版去掉列表 Pyhton魔性版 通过字符串倒序

  • 2020-03-28

    35岁还是年轻人吗?按年龄算,肯定不是了,按心理年龄,得看个人心态。我是觉得我还年轻,说实话,还是有点心虚的。...

  • 你的猫按人类年龄算多大啦?

    一个常见的错误说法是:猫的一年等于人的7年。实际上猫的年龄比这增长得还快。随着年龄的增长,疾病也随之而来。猫在不同...

  • D6-练习

    准备数据: 1、查询各学生的年龄,只按年份来算select Sname,year(now())-year(Sage...

  • 一只工蜂充实的一生

    今天,从微博博主@XOHOL那里看到了一个蜜蜂知识:蜜蜂工蜂工种的按年龄分配。 蜜蜂的寿命122-152天,平均算...

  • 小扣20210304

    真佩服那些给孩子按天算年龄的人!我从年头记到三月份,已经搞不清今天是今年的第几天了,索性还是按日期来吧! 我是一个...

  • 手上青春,还剩多少?2019,你是想继续平平淡淡,还是在工作中享

    “手上青春,还剩多少?”来自江美琪的歌曲《那年情书》的歌词。画着自己的人生电池图,算一算按上海的平均年龄活到80岁...

网友评论

      本文标题:python小题 按天算年龄

      本文链接:https://www.haomeiwen.com/subject/pegmfktx.html