# 输入年月日,如:1995年12月10日,计算是该年的第几天?
# 同时计算出当天是星期几?

print("请依据提示依次输入您想查询的年 月 日")

# 第一段代码块(年月日输入)开始

# 输入年份并对输入值进行判断其合理性
while True:
    year = int(input("请输入您想查询所在的年份(1970~2038年):"))
    if 1970 <= year <= 2038:
        if (year%4 ==0 and year%100 !=0) or year%400 == 0:
            # leap = 0 表示润年
            leap = 0
            # print(leap)
        else:
            # leap = 1 表示平年
            leap = 1

        print("您输入的年份为%d年" %year)
        break
    else:
        print("您输入的年份为%d年,不在1970年至2038年之间,请您依据提示再次输入" %year)
# 年份输入代码结束

# 输入月份并判断输入值进行判断其合理性,主要分润年和非润年
while True:
    print("-------------------------------------------------")
    month = int(input("请输入您想查询所在的月份:"))
    if 1<= month <= 12:
        print("您输入的月份为%d月" %month)
        break
    else:
        print("您输入的月份为%d,不在1月至12月之间,请您依据提示再次输入" %month)
# 月份输入代码结束

# 1 3 5 7 8 10 12 月31天  4 6 9 11月 30天  润年2月29天   2月28天
# standard_month 表示平年中每个月对应的天数
standard_day = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

# 输入具体时间并对时间进行判断,依据年 月来判断其合理性
while True:
    print("-------------------------------------------------")
    day = int(input("请输入您想查询的具体日期:"))
    if leap ==0:
        if month == 2 and 0 <= day <= 29:
            print("您输入的是%d年%d月%d日" %(year,month,day))
            break
        else:
            print("您输入的日期为%d,超过%d月的最大天数%d天,请您依据提示再次输入" %(day, month, 29))

        if 0 <= day <= standard_day[month-1]:
            print("您输入的是%d年%d月%d日" %(year,month,day))
            break
        else:
            print("您输入的日期为%d,超过%d月的最大天数%d天,请您依据提示再次输入" %(day, month, standard_day[month-1]))

    elif leap == 1:
        if 0 <= day <=standard_day[month-1]:
            print("您输入的是%d年%d月%d日" %(year,month,day))
            break
        else:
            print("您输入的日期为%d,超过%d月的最大天数%d天,请您依据提示再次输入" % (day, month, standard_day[month - 1]))

# 日期代码输入结束
# 第一段代码块(年月日输入)结束

# 第二段代码块(依据输入的年月日判断为该年的第几天)开始

print("-------------------------------------------------")

# 计算天数变量的初始化
sum_day = 0
# 月的约束条件,
# 当输入是month=1月时,(n=1)<(mont=1)时不成立,1月不计入月数累加
# 当输入是month=2月时,(n=1)<(mont=2)时成立,1月计入月数累加
# 依次类推
n = 1

# 循环计算上月及之前月份的累加和(天数)
while n < month:
    sum_day += standard_day[n]
    n += 1

# 计算总天数
sum_day += day

# 判断平润年,如果是平年,则直接输出,如果是润年,则使sum_day数值再加1,
if leap == 0:
    print("您输入的%d年%d月%d日是该年的第%d天" %(year, month, day, (sum_day+1)))
else:
    print("您输入的%d年%d月%d日是该年的第%d天" %(year, month, day, sum_day))
# 第二段代码块(判断该日期是该年的第几天)结束

# 第三段代码块(判断该天是星期几)开始
print("-------------------------------------------------")

from datetime import datetime
# datetime模块中有delta类,这个类的对象用于表示一个时间间隔,比如两个日期或者时间的差别

# 格式化输入时间
get_day = datetime(year,month,day)
# 格式化初始时间1970年1月1日 星期四
standard_day = datetime(1970,1,1)

# diff_day = get_day - standard_day 该段代码输出的为 1 days 00:00:00
# 输入日期与起始1970年1月1日 星期四 之间的相差天数diff_day
diff_day = (get_day - standard_day).days #经过修改过后,这样输出就是日期了

# 相差天数对7取余数
week_day = diff_day % 7
# week_day 余数加上1970年1月1日当天星期四的天数
week_day += 4
# 两者相加可能会大于7,if判断循环
if week_day >7:
    week_day %= 7
    print("您输入的%d年%d月%d日是星期%d" %(year, month, day, week_day))
else:
    print("您输入的%d年%d月%d日是星期%d" %(year, month, day, week_day))
# 第三段代码块(判断该天是星期几)结束

# import sys

# sys.exit()结束程序循环

Python练习笔记——计算输入日期为改年的第几天、星期几的更多相关文章

  1. 吴裕雄--天生自然python学习笔记:Python3 日期和时间

    Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...

  2. Python练习笔记——计算个人体重指数

    输入您的身高 体重 性别 计算出你的体重是否标准 gender = input('请输入您的性别(boy or girl):') height = input('请输入您的身高(单位cm):') he ...

  3. Python练习笔记——对输入的数字进行加和

    请您输入数字,每个数字采用回车结束,当您输入型号*时,则结束数字输入,输出所有数字的总和 def num_sum(): i = 0 while True: get_num = input(" ...

  4. python练习笔记——计算1/1-1/3+1/5-1/7……的和

    1 / 1 - 1 / 3 + 1 / 5 - 1 / 7 + ....求100000个这样的分式计算之为是多少?将此值乘以4后打印出来,看看是什么? num_list = [] count = -1 ...

  5. python小案例-计算输入两个数的最大公约数与最小公倍数

    # 计算最大公约数 def gcd(x,y): """ 计算最大公约数 :param x:一个正整数 :param y:一个正整数 :return:x,y的最大公约数 & ...

  6. Problem D: 结构体:计算输入日期是该年的第几天

    #include <stdio.h> struct time{ int year; int month; int day;}; int main(void) { struct time s ...

  7. Python中判断是否为闰年,求输入日期是该年第几天

    #coding = utf-8 def getLastDay(): y = int(input("Please input year :")) m = int(input(&quo ...

  8. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  9. Python datetime time 等时间 日期 之间的计算和相互转化

    from datetime import datetime, date, timedelta, timezone from time import time, ctime, localtime, st ...

随机推荐

  1. Informatica 常用组件Lookup缓存之五 使用动态查找高速缓存

    对于关系查找,当目标表也是查找表时,可能要配置转换以使用动态高速缓存.PowerCenter 将在处理第一个查找请求时创建高速缓存.它将根据查找条件为传递给转换的每行查询高速缓存.当您使用动态高速缓存 ...

  2. Python并发编程-Redis

    Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Remote Dictionary Server(Redis)是一个基于 key-value ...

  3. Cesium随笔(1)部署自己的项目 【转】

    Cesium是国外开发的基于Webgl的跨浏览器的三维地球显示的Javascript开源库,只要浏览器支持Webgl,html5就可以运行.甚至部分手机浏览器都可以运行 . 首先,对Cesium进行本 ...

  4. 【手势识别】简介 GestureDetector ScaleGestureDetector

    2017-3-6 单点触摸手势识别器GestureDetector 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等.一般情况下,我们可以通过View或Activ ...

  5. Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem in 解决方案

    because regular C functions work differently than the Windows API functions; their "calling con ...

  6. 栈溢出笔记1.3 准备Shellcode

    经过1.1和1.2节的讲述,我们已经知道了怎样更改EIP的值. 程序运行函数之后将跳转到我们设定的位置開始运行,因此,我们须要准备一个自己的程序,接手后面的工作.这是一个什么样的程序?是一个C语言编写 ...

  7. IO习题

    1.Java实现将九九乘法表输入到文本文件 public class Test1 { public static void main(String[] args) throws FileNotFoun ...

  8. 如何解决Cydia提示错误

    删除/etc/apt/sources.list.d该目录下的cydia.list进入var/lib/apt/lists删掉此文件夹下的所有文件,以及partial下的文件,但须保留这个空文件夹.进入/ ...

  9. 11个强大的 Visual Studio 调试技能

    简介 调试是软件开辟周期中很首要的一项目组.它具有挑衅性,同时也很让人困惑和懊恼.总的来说,对于稍大一点的法度,调试是不成避免的.比来几年,调试对象的成长让很多调试任务变的越来越简单和省时. 这篇文章 ...

  10. 【面试笔试】Java常见面试笔试总结

    Java 基础 1.有哪些数据类型 Java定义了8种简单类型:byte.short.int.long.char.float.double和boolean. 2.面向对象的语言特征 封装.继承.多态 ...