很长一段时间没有接触过c语言了,想来做这一行当已经有三两年了。
今天突然想起来以前用c语言在vc6上写代码的日子,想了想以前的一些实战练习。
所以今天打算用python来写一个c语言以前练习的题目-日历打印器,并根据情况进行优化。
效果如上图所示
算法思路:
首先,关于日历的相关操作都离不开一个根本情况,1990年的1月1日是周一,所以日历的打印需要基于这一事实
想要打印日历需要解决的问题最主要便是一个——那就是本月1号是周几?
在没有更好的算法之前,最好用的方式就是根据接收的年月去累加,然后除七取余
各位也看到了,专门将“累加”与“除七取余”标红,(七是一周有七天)这是算法最核心部分。
以1991年2月为例子,(1990年的365天+1991年1月31天)%7 = 4
那么2月1日便是 周五。如果可以明白这一点,那么日历打印将会很好理解
开发思路:
首先接收到所需要的数据,也就是年(year)月(month)
天数累加:
以1992年10月为例,累加需要记录的便是1990年、1991年、1992年前9个月的日子
创建变量(sum)来统计累加天数
建立循环从1990年开始,一直到我们输入的年之前(year-1)为止,平年(sum+=365)闰年(sum+=366)
统计完年之后,统计月份,建立循环从一月开始,大月(sum+=31)小月(sum+=30)2月的话 多一个判断(平年28、闰年29)
打印日历
统计的天数除七取余之后可以得出1日在周几,之后根据月份信息输出从1开始到月末,每7个就换行一次。
显然这样一分析,我们便需要创建两个函数,一个calculation()来计算累加天数,一个display()来打印结果
我个人在此基础上多加了一个函数isleapyear()用来判断是否为平年、闰年,也算是一种优化吧。
开发教程及代码:
1.isleapyear()
创建这个函数的目的便是判断是否为闰年,输入判断函数
首先身为判断函数,最基础也要传入被判断的数据,isleapyear()就需要传入一个int类型的年数据
其次判断依据相比大家也很清楚,闰年为可以被4整除但不能被100整除,或者能被400整除
(year%4==0 and year%100!=0)or year%400==0
最后判断函数返回结果为真假,所以我在函数中创建flag,默认为false,当判定为真的时候改为true</