真知即所以为行,不行不足谓之知。

python计算任意两个日期的天数间隔V1.0

Spread the love

起源于练手做个三天打鱼两天晒网的程序,后来想着改改,目前验证下还都能算出来,不知道有没有bug,暂且叫做v1.0吧,用的也都是很笨的算发,程序应当还能优化,后续等熟悉了再说了,没有调用模块。

这特么算我这老帮菜生平第一次独立写超过了100行的代码么?hhh

 

def runNian(x):
    """闰年判断"""
    if x % 4 == 0:
        if x % 100 == 0:
            if x % 400 == 0:
                return True
            else:
                return False
        else:
            return True
    else:
        return False

def input_date():
    """输入日期,如果不是数字就提示并重新输入,q结束"""
    while True:
        year = input("Enter year('q' to quit):")
        if year == "q":#如果是q结束
            exit()
        elif year.isdigit():#如果是数字但不满足
            if int(year) < 0:
                print("You must enter a number big than zero.")
                continue
            else:#如果是数字但是满足条件
                break
        else:
            print("You must enter a number:")
            continue
    year = int(year)
    while True:
        month = input("Enter month:")
        if month == "q":
            exit()
        elif month.isdigit():
            if int(month) < 0 or int(month) > 12:
                print("You must enter a number between 1 and 12!")
                continue
            else:
                break
        else:
            print("You must enter a number:")
            continue
    month = int(month)

    if runNian(year):
        monthList = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]#闰年2月29天
    else:
        monthList = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    while True:
        day = input("Enter dateday:")
        if year == "q":#如果是q结束
            exit()
        elif day.isdigit():#如果是数字但不满足
            if int(day) < 0:
                print("You must enter a number big than zero.")
                continue
            elif int(day) > monthList[month]:#判断天数是否合理
                print("You must enter a right date:")
                continue
            else:#如果是数字但是满足条件
                break
        else:
            print("You must enter a number:")
            continue
    day= int(day)
    date = [year,month,day]
    return date

def toDay(s,e):
    """计算两个日期的天数间隔"""
    m = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, ]#把月份单独做个列表出来对应
    a = m[s[1]:]
    b = m[:e[1]]#进行列表切片求和
    if s[1] == e[1]:
        n=abs((e[0] - s[0])) * 365 + e[2]-s[2]
    elif s[1] < e[1]:
        n = (e[0] - s[0]) * 365 + sum(m[s[1]:e[1]]) + e[2] - s[2]
    else:
        n = (e[0] - s[0]) * 365 - sum(m[e[1]:s[1]]) + e[2]-s[2]
    runRi = 0
    for i in range(s[0],(e[0]+1)):
        if runNian(i):
            runRi += 1#计算总共要加多少个闰日(一个闰年多1天)
    n = n + runRi
    if (runNian(e[0]) and e[1] < 3):#如果最后一年是闰年但没到3月份,这一天减回来,少加一个闰日,
        n -= 1
    return n

#主程序
def main():
    """输入年、月日并按照先后顺序排序(因有可能输入日期的先后顺序不一致)"""
    x = input_date()
    print("Please enter the other date:")
    y = input_date()
    print("The start date is:")
    print(x)
    print("The end date is:")
    print(y)
    if x[0] < y[0]:
        print("间隔" + str(toDay(x, y)) + "天.")
    elif x[0] == y[0]:
        if x[1] <y[1]:
            print("间隔" + str(toDay(x, y)) + "天.")
        elif x[1] == y[1]:
            if x[2] < y[2]:
                print("间隔" + str(toDay(x, y)) + "天.")
            elif x[2] > y[2]:
                print("间隔" + str(toDay(y, x)) + "天.")
            else:
                print("间隔0天.")
        else:
            print("间隔" + str(toDay(y, x)) + "天.")
    else:
        print("间隔" + str(toDay(y, x)) + "天.")
main()

 


Spread the love
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

未经允许不得转载:Living in the flow » python计算任意两个日期的天数间隔V1.0

分享到: 更多 (0)
avatar

评论 1

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1
    avatar

    s为字符串
    s.isalnum() 所有字符都是数字或者字母
    s.isalpha() 所有字符都是字母
    s.isdigit() 所有字符都是数字
    s.islower() 所有字符都是小写
    s.isupper() 所有字符都是大写
    s.istitle() 所有单词都是首字母大写,像标题
    s.isspace() 所有字符都是空白字符、\t、\n、\r

    yasin2年前 (2018-10-15)国内网友谷歌浏览器 Windows 10 回复
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活