python实现简易万年历_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)

效果截图

样例图

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

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值