python打印万年历

1.输入年份,输入月份

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

3.思路输入年,月,打印对应年月的日历。

  3.1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大多的手机的日历功能只能显示到1970年1月1日这一天;

  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号是星期几;

  3.3, 判断本月的总天数;

  3.4, 打印日历;

4.运行效果图1:

运行效果图2:

5.代码实现

# 定义判断闰年的函数,是闰年返回True,不是返回False
def 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
    for i in range(1970, year):
        # 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)
    # 计算出来年天数和月天数的总和
    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
    # print("星期%d" % thisDay)
    return thisDay

# 定义打印顶部标题栏函数
def printTitle(year, month):
    print("-------------------------------------%s年%d月----------------------------------------" % (year, month))
    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)
时间: 2024-10-21 22:25:23

python打印万年历的相关文章

用python打印各种图形

#用python打印出直角三角形:   1 #!/usr/bin/env python   2 # coding=utf-8   3 i = 0   4 while i < 5:   5     j = 0   6     while j <= i:   7         print "*",   8         j+=1   9     print ""  10     i+=1                 输出效果如下: *  * *  *

python打印详细的异常信息

#!/usr/bin/env python #coding=utf-8 import traceback try: 1/0 except Exception, e: print e print traceback.format_exc() python打印详细的异常信息,布布扣,bubuko.com

python打印表格式数据,留出正确的空格和段落星号或注释

python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITEMS'.center(leftWidth + rightWidth,'-')) for k,v in itemsDict.items(): print(k.ljust(leftWidth,'.')+str(v).rjust(rightWidth)) picnicItems = {'sandwitch

?python打印列表的下标和值的例子:

python打印列表的下标和值的例子: In [1]: list01=[1,4,5] In [10]: def funct01(ll):   ....:     for index,value in enumerate(ll):   ....:         print index,value   ....: In [11]: funct01(list01)0 11 42 5

java实验之打印万年历

打印万年历(输入年份,月份,输出该月的日历,已知1900年1月1日是星期一),要求: (1)编写一个方法判断闰年: (2)编写一个方法判断某年某月有多少天: (3)编写一个方法计算某年某月前距离1900年1月1日的总天数:(4)编写一个输出某年某月日历的方法: (5)编写一个测试方法. package calendar;import java.util.Scanner;public class calendar { public static void main(String args[]){

python打印菱形

利用python打印菱形 for i in range(0,5): for y in range(0,5-i): w = ' ' print(w,end="") s = '* ' * i print(s) for i in range(0,5): for x in range(0,i): w = ' ' print(w, end="") t = '* ' * (5-i) print(t) 打印结果:     *     * *   * * *   * * * * *

python打印乘法法则

python打印乘法法则 for i in range(9,0,-1): for j in range(1,i+1): print(f"{j}*{i}={str(i*j).ljust(2)}",end=" ") print() 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*7=

算法,java代码实现打印万年历

万年历 以1900年1月1号星期一为时间原点 星期日 第一天 星期一 第二天 星期二 第三天 星期三 第四天 星期四 第五天 星期五 第六天 星期六 第七天 1.计算出当前日期距离原点的天数(例:2016/9/18) 2015到1900之间有多少个瑞年和平年-->count1 2016年一月到八月的总天数-->count2 本月的一号 count = count1+count2+1 2.计算出本月的一号是一周的第几天 k = count%7;(打印一号前面有多少空格) 3.计算出该月有多少天

Java实验项目二打印万年历

package _____;import java.util.Scanner;public class wnl//万年历主类{    public static void main(String[] args)    {                menu();        Scanner sc=new Scanner(System.in);        int menu=sc.nextInt();        if(menu==1)        {            Syste