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

一、题目

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

举例:你是昨天出生的,那么输出就为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小题 按天算年龄相关推荐

  1. python如何定义一个函数选择题_Python逻辑题(以下10个选择题有唯一答案,请编写自定义函数judge遍历答案列表并报告正确答案),python,道,汇报...

    python逻辑题(以下10道选择题有唯一答案,请编写自定义函数judge遍历答案列表并汇报正确答案) 1.题目.代码及答案演示 代码: 逻辑题 说明 :个人没用过 Jupyter Notebook ...

  2. python输入出生年份、输出年龄_python根据出生日期计算年龄的代码

    python根据出生日期计算年龄的代码,运行后会提醒用户输出出生的年月日,然后输出年龄,可以改写为一个通用函数 from time import * #a function to find your ...

  3. python编写姓名年龄_python小工具 - alert弹框输出姓名年龄、求和

    # 导入tkinter的所有的包里面所有的内容from tkinter import *import tkinter.messageboxasmessagebox # 从Frame派生一个Applic ...

  4. python取特定年份的数据_python,_怎样用python提取不同股票csv里特定时间段的数据,python - phpStudy...

    怎样用python提取不同股票csv里特定时间段的数据 我有几千只股票的csv数据,需要算所有股票在特定时间段内的收益率. 但是数据里的日期信息并不统一,有的csv到2011年就没有了之后的信息了,有 ...

  5. python与数据思维基础笔记_Python小课笔记--Python基础:数据和函数(二)

    截图来自Python小课 文|仟樱雪 在Python小课-1-2节中,已经学习了基础模块--数据--数据类型(整数.字符串),以及基础模块--变量,基础模块--函数(input函数.print函数). ...

  6. python用random函数猜字母_Python小游戏——猜数字教程(random库教程)

    今天来开发一个简单的数字逻辑游戏,猜数字(数字炸弹) 首先开发游戏第一件事,了解需求. 猜数字游戏规则: 计算机随机生成一个指定范围的数字,由玩家来猜测, 之后计算机会根据玩家提供数字来与自己生成的数 ...

  7. python win32转pdf 横版_Python 小技巧之 Office 文件转 PDF

    文章来源于公众号:Python技术 作者:派森酱 在日常的生活工作中,难免需要用到一些 小Tip 来解决工作中遇到的小难题,今天的文章给大家安利一个方便快捷的小技巧,将 Office(doc/docx ...

  8. python 引入同一路径的类_python小课堂15 - 史上最详细的包和模块import讲解篇

    python小课堂15 - 史上最详细的包和模块import讲解篇 前言 在大量的代码设计中,我们不可能将所有代码都写在一个.py文件,所以有了包.模块,而为了代码可以重复利用(复用性),就有了类.函 ...

  9. python中关键字 表示空类型_Python小知识:如何在Python 3中转换数据类型

    写在前面: 在Python中,数据类型用于对一种特定类型的数据进行分类,确定可以分配给该类型的值以及可以对其执行的操作. 这里主要讲述转换数字,字符串,元组和列表,并提供示例以帮助各位熟悉不同的用例. ...

最新文章

  1. Oracle 10g如何对用户姓名,按首字母排序、查询
  2. python爬取天天基金_用Python抓取天天基金网基金历史净值数据
  3. 报班学python到底怎么样-你们都是怎么学 Python 的?
  4. spark如何防止内存溢出_Spark 理论基石 —— RDD
  5. Ubuntu 12.04LTS 找不到eth0网卡
  6. SAP Spartacus单元测试里Component实例的创建细节
  7. debug ERP initial load error
  8. 中科大 计算机网络2 什么是互联网
  9. listview 刷新结束 监听_Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
  10. BigDecimal数据加法返回值接收
  11. PHP常用正则类(全)
  12. 11月安全回顾:你造吗?短信验证码未必可靠
  13. Linux学习笔记2 - 字符界面
  14. awesomium_v1.6.6_sdk 百度云下载地址
  15. JQuery函数大全
  16. tomcat9 中文乱码
  17. SIM900/SIM900A 模块实现收发短信,打电话
  18. 2013江苏计算机二级vfp试题,2008年春季江苏省计算机等级考试二级VFP考试试题(含答案)...
  19. 室内定位:基于NB/LTE Cat.1蜂窝网络的穿戴设备定位 BLE-4
  20. 我的世界无限资源的服务器,我的世界无限资源单机版

热门文章

  1. node.js+uniapp计算机毕业设计安卓校园兼职APP(程序+APP+LW)
  2. HIT 软件构造 面向复用的设计模式
  3. 模仿酷狗7(Kugou7)音乐魔方界面源码
  4. 【计算机毕业设计】012基于springboot的社区团购系统设计
  5. 利用js 获取本日 本周 本月时间代码
  6. 单片机 STM32F103C8T6 cubeMX HAL库 从环境到开发 正点原子工程移植 freeRTOS
  7. 伯克利计算机低年级核心课程之CS61A-SICP
  8. 什么是语义分割?原理+实现过程?
  9. omap5 eMMC 启动流程
  10. 微型四轴飞行器(5)九轴姿态融合算法B