博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python打印万年历
阅读量:6825 次
发布时间:2019-06-26

本文共 3116 字,大约阅读时间需要 10 分钟。

1.输入任何年份,输入月份

2.格式化输出本月的日历

3.思路

  3.1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大多的手机的

     日历功能只能显示到1970年1月1日这一天;以1970年一月一号作为参考。

  3.2,要想打印某年某月的日历,首先应该计算出这个月1号是星期几?

     解决1号是星期几?

     3.2.1:先计算出年天数,即截至这一年1月1号的天数,用for循环,从1970年开始,闰年 + 366,平年 + 365;
     3.2.2:计算出月天数,即截至本月1号的天数,用for循环,从1月份开始,算出月天数;
     3.2.3:用年天数加月天数,求得本月1号距离1970年1月1号的总天数,用总天数来判断本月1号是星期几;

               如果是小于1970年,可以打印,同理。

  3.3, 判断本月的总天数;

  3.4, 打印日历;

4.运行效果图1:

运行效果图2:

运行效果图3:

5.代码实现

 

# 定义判断闰年的函数,是闰年返回True,不是返回Falsedef isLeapYear(year):    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):        return True    else:        return False# 定义计算从1970年到截止到今年的 年天数的函数def yearsDays(year):    totalDays = 0    if year >= 1970:        for i in range(1970, year):            # print("%d年" % i)            if isLeapYear(i):                totalDays += 366            else:                totalDays += 365    else:        for i in range(year, 1970):            # print("%d年" % i)            if isLeapYear(i):                totalDays += 366            else:                totalDays += 365    return totalDays# 定义计算本年一月截止到目前月的 月天数的函数def monthsDays(year, month):    s = ("0", "31", "60", "91", "121", "152", "182", "213", "244", "274", "305", "335")    days = int(s[month - 1])    # print(month,"月")    if isLeapYear(year):        days = days    else:        if month == 1:            days = 0        elif month == 2:            days == 31        else:            days = days - 1    return days# 定义计算本月的天数def thisMonthDays(year, month):    if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:        return 31    elif isLeapYear(year) and month == 2:        return 29    elif (not isLeapYear(year)) and month == 2:        return 28    else:        return 30# 计算本月一号是星期几的函数def week(year, month):    thisDay = 0    yDays = yearsDays(year)    mDays = monthsDays(year, month)    # 计算出来年天数和月天数的总和    if year >= 1970:        sumDays = yDays + mDays        if sumDays % 7 == 0:            thisDay = 4        else:            if sumDays % 7 + 4 > 7:                thisDay = abs(sumDays % 7 - 3)            else:                thisDay = sumDays % 7 + 4    else:        sumDays = yDays - mDays        if sumDays % 7 == 0:            thisDay = 4        else:            lastDay = sumDays % 7            thisDay = 4 - lastDay            if thisDay < 0:                thisDay += 7    return thisDay# 定义打印顶部标题栏函数def printTitle(year, month):    print("-" * 36, "%s年%d月" % (year, month), "-" * 36)    s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")    for i in s:        print("%-10s" % i, end="")    print()# 打印主体部分def printMain(year, month):    day1 = week(year, month)    day2 = thisMonthDays(year, month)    # 打印空白地方    if day1 != 7:        for i in range(1, day1 + 1):            s = " "            print("%-13s" % s, end="")    # 打印其他地方    for j in range(day1 + 1, day1 + day2 + 1):        if j % 7 == 0:            print("%-13d" % (j - day1))        else:            print("%-13d" % (j - day1), end="")year = int(input("请输入年份:"))month = int(input("请输入月份:"))printTitle(year, month)printMain(year, month)

 

 

 

转载地址:http://efykl.baihongyu.com/

你可能感兴趣的文章
解读tensorflow之rnn 的示例 ptb_word_lm.py
查看>>
Linux内核--并发【转】
查看>>
关于对FLASH开发,starling、starling feathers、starling MVC框架的理解
查看>>
【Python】京东商品价格监控
查看>>
Codeforces 10A-Power Consumption Calculation(模拟)
查看>>
Project Euler:Problem 42 Coded triangle numbers
查看>>
李洪强iOS开发之Block和协议
查看>>
Python 调用snmp自定义OID实现监控
查看>>
Spark Streaming概念学习系列之SparkStreaming性能调优
查看>>
hdu 5375 - Gray code(dp) 解题报告
查看>>
Android推送 百度云推送 入门篇
查看>>
Java正则表达式过滤出字母、数字和中文
查看>>
vector删除元素与清除内存空洞
查看>>
Activex感知网页刷新关闭事件
查看>>
Libvirt中windows虚拟机的动态内存管理
查看>>
Xamarin开发笔记—设备类&第三方弹窗的使用和注意事项
查看>>
用外部物理路由器时使用Neutron dhcp-agent提供的metadata服务(by quqi99)
查看>>
P2023 [AHOI2009]维护序列
查看>>
requireJS文件夹
查看>>
苹果电脑 剪切文件 文件夹 快捷键
查看>>