Python - 按天算年龄

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

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

分三种情况讨论:

1、年份和月份都相同

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

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

闰年为一下两种情况

1、能被400整除

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

、、、、、、、、、、、、、、、

本题来自Udacity的计算机科学导论课程,用来做Python入门

Python语言兼具一般高级语言和脚本语言的特点,在官网下了一个东东,只会做脚本,函数现在只会一行一行往里敲,然后运行,无法调试,好像是需要找一个开发环境,有空弄

附代码

# 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_leap(year):
    result = False
    if year % 400 == 0:
        result = True
    if year % 4 == 0 and year % 100 != 0:
        result = True
    return result

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    daysOfMonths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if year1 == year2 and month1 == month2:
        days = day2 - day1
    if year1 == year2:
        days1 = 0
        i = 0
        while i < month1 - 1:
            days1 = days1 + daysOfMonths[i]
            i = i + 1
        days1 = days1 + day1
        if is_leap(year1) and month1 > 2:
            days1 = days1 + 1
        days2 = 0
        i = 0
        while i < month2 - 1:
            days2 = days2 + daysOfMonths[i]
            i = i + 1
        days2 = days2 + day2
        if is_leap(year2) and month2 > 2:
            days2 = days2 + 1
        days = days2 - days1
    else:
        days1 = 0
        i = 0
        while i < month1 - 1:
            days1 = days1 + daysOfMonths[i]
            i = i + 1
        days1 = days1 + day1
        if is_leap(year1) and month1 > 2:
            days1 = days1 + 1
        days2 = 0
        i = 0
        while i < month2 - 1:
            days2 = days2 + daysOfMonths[i]
            i = i + 1
        days2 = days2 + day2
        if is_leap(year2) and month2 > 2:
            days2 = days2 + 1
        days = 365 - days1 + days2
        if is_leap(year1):
            days = days + 1
        year1 = year1 + 1
        while year1 < year2:
            days = days + 365
            year1 = year1 + 1
            if is_leap(year1):
                days = days + 1
    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"
        else:
            print "Test case passed!"

test()

原文地址:https://www.cnblogs.com/qingkai/p/8667501.html

时间: 2024-11-23 21:42:48

Python - 按天算年龄的相关文章

蓝桥杯-标题:算年龄

标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年).他年少时便很有才华.一次有人问他的年龄,他回答说:"到了x的平方那年,我刚好是x岁". 请你计算一下,德摩根到底出生在哪一年.题中的年龄指的是周岁. 请填写表示他出生年份的四位数字,不要填写任何多余内容.#include<stdio.h>#include<math.h>int main(){ int age; int a,b,i,j;//X2-18xx=X; for(i=1;i<100;i+

python 学习day1--计算机组成原理

1. Python是一款编程语言,用于程序员与计算机的沟通,即程序员可以通过编程让计算机实现某些特定功能. 用程序语言开发程序,最终开发出的是一个软件,目前我们使用的软件均是需要运行在操作系统之上的,我了解到之前也有过在没有操作系统的环境下实现编程,但是太过复杂,难以满足现在应用软件的需求.操作系统是运行于硬件之上,来控制硬件的. 2.应用程序->操作系统->硬件 (计算机 = 硬件 + 操作系统 + 应用程序) 计算机硬件包含:运算器.控制器.存储器.输入设备.输出设备,例如常见的计算机系统

JS根据身份证号码算年龄

如果把身份证号码传到页面上,在前端页面获取年龄就需要用到JS脚本了: function GetAge(identityCard) { var len = (identityCard + "").length; if (len == 0) { return 0; } else { if ((len != 15) && (len != 18))//身份证号码只能为15位或18位其它不合法 { return 0; } } var strBirthday = "&qu

巧算年龄

程序地址:http://www.cheemoedu.com/exercise/33 问题描述: 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第3个人,又说比第2个人大2岁.问第2个人,说比第1个人大2岁.问最后1个人,他说是10岁.请问第5个人多大? 我的思路: 这个程序是一个需要不断回调原函数的典型,后面也有一个类似问题,这次换个写法: 定义一个计算年龄的函数,因为第一个人的年龄为10,后面的人依次加2,因此根据for循环按照循环的次数i计

Excel-计算年龄、工龄 datedif()

函数名称:DATEDIF 主要功能:计算返回两个日期参数的差值. 使用格式:=DATEDIF(date1,date2,"y").=DATEDIF(date1,date2,"m").=DATEDIF(date1,date2,"d") 参数说明:date1代表前面一个日期,date2代表后面一个日期:y(m.d)要求返回两个日期相差的年(月.天)数. 应用举例:在C23单元格中输入公式:=DATEDIF(A23,TODAY(),"y&quo

for语句之侦查队挑选人、猴子吃桃、5个小朋友算年龄、1 () 2 () 3 ()4 = 4;问括号里我要填 (- 或 +)问题

1.某侦察队接到一项紧急任务,要求在A.B.C.D.E.F六个队员中尽可能多地挑若干人,但有以下限制条件:侦察兵A和B两人中至少去一人: a+b>=1(由于每个队员有两种状态:去与不去,假设不去为0,去为1:把每个条件用等式表示出来,用for循环让每个条件都满足)A和D不能一起去: a+d<=1A.E和F三人中要派两人去: a+e+f == 2B和C都去或都不去: b+c !=1C和D两人中去一个: c+d==1若D不去,则E也不去. d+e==0 || d=1问应当让哪几个人去? for (

python 用while 猜年龄

age = 50 while True: user_input_age = int(input("age is: ")) if user_input_age == age: print(" Yes! \n") break #终止 elif user_input_age > age: print("age is smaller, try input batter!") else: print("age is batter, try

python-应用OpenCV和Python进行SIFT算法的实现

如下图为进行测试的q和h,分别验证基于BFmatcher.FlannBasedMatcher等的SIFT算法 代码如下: import numpy as np import cv2 from matplotlib import pyplot as plt imgname1 = 'G:/q.jpg' imgname2 = 'G:/h.jpg' sift=cv2.xfeatures2d.SIFT_create() img1 = cv2.imread(imgname1) gray1 = cv2.cvt

c语言练习28——算年龄

#include<stdio.h> #include<stdlib.h> /*题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问 第三个人,又说比第2人大两岁.问第2个人,说比第一个人大两岁.最后问第一个人,他说是10岁.请问第五个人多大?*/ int main(){ int i,age=10; for(i=0;i<4;i++) age=age+2; printf("第五个人岁数为:%d岁",age);