Python编程——万年历

2017年五月份日历

万年历这个题目几乎是不论学哪种编程语言必要尝试的一个小知识,综合了循环,逻辑关系判断等各编程语言的基础知识。今天我们一起用Python实现简单的万年历功能(查看某年各个月份日历和查看确定月份日历)。
网上大概浏览了一部分代码,发现实现方法都是大同小异,本篇文章代码可能会略有不同,可供参考。
记得之前在学C语言的时候就去写过万年历,现在已经忘得一干二净了,用Python实现万年历主要参考了两篇文章,第一篇是向右奔跑老大之前写的java版万年历,还有一篇是在网上找的C语言实现万年历,大家也可以去参考这两篇文章的方法。

难点

万年历实现的难点自我感觉有以下几个:

  • 1.计算某年一月一日为周几
  • 2.计算某年确定月份的第一天为周几
  • 3.整个日历格式的设定(调试是真的烦)

万年历实现

1.计算某年一月一日为周几
这里我看到网上大部分都是写的1990年一月一日为周一这个点进行判断计算其他年份的一月一日,或者是确定月份的第一天。还有一种是计算从1——年份-1这一段时间的总天数,然后+1除以7去计算得到该年份的一月一日或者是确定月份的第一天为周几(这个应该是一种计算问题,具体更多实现方法可以自己去查),这里我采用的是计算从1——该年的上一年的总天数+1,计算该年份的一月一日的周几。
**2.计算某年确定月份的第一天为周几 **
同样的道理,计算总天数之后加上今年已经过去的月份的总天数再加1除以7取余得到
3.格式问题
这个没办法,只能自己去调试,调整到一个合适的输出格式即可

文字表述可能不清楚,可以参考代码+注释

实现代码

# -*-coding:utf-8 -*-
# @name :Python万年历
# @author :loading_miracle

class Calendar(object):

    days = [31,28,31,30,31,30,31,31,30,31,30,31]
    def __init__(self, year=2017):#初始化默认2017年
        self.year = year
        if self.yearDays(year) == 366:
            self.days[1] = 29
        self.totalDays = 0
        for i in range(1, self.year):
            self.totalDays += self.yearDays(i)
    #判断每年的天数
    def yearDays(self,year):
        return 366 if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0 else 365
    # 查看某个月的日历
    def months(self,month):
        totalDays = self.totalDays
        for i in range(1,month):
            totalDays+=self.days[i-1]
        #计算确定月份的第一天为周几
        self.week = (totalDays+1) % 7
        self.show(month)
    #查看全年日历
    def wholeYear(self):
        # 计算确定年份的一月一日为周几
        self.week = (self.totalDays+1) % 7
        for i in range(1,13):
            self.show(i)
    #显示输出函数
    def show(self,month):
        print '\t\t{}年{}月份日历'.format(self.year,month)
        print 'Sun  Mon  Tues  Web  Thur  Fri  Sat'
        print '-----------------------------------------'
        begin = 1
        for j in range(0, self.week):
            print '%4s' % '',
        while begin <= self.days[month - 1]:
            print '%4d' % begin,
            begin += 1
            self.week = (self.week + 1) % 7
            if self.week % 7 == 0:
                print
        print '\n\n'

if __name__ == "__main__":

    data = Calendar()
    data.wholeYear()
    data.months(5)

效果截图

样例图

有问题的可以在下方评论,重点还是理解这个逻辑

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容