python适合多大年龄-python小题 按天算年龄

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

一、题目

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

举例:你是昨天出生的,那么输出就为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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值