python做万年历,python万年历实验报告

  python做万年历,python万年历实验报告

  最近进行了python基础训练,课后做了万年历。以前没做过,感觉还有很多东西要学。下面这篇文章主要介绍python新手练习实例关于万年历的相关信息,有需要的朋友可以参考一下。

  00-1010一、标题描述二。分析一、分析二。职能三。源代码四。经验总结

  

目录

  A:首先输出提示语句,接受用户输入的年月。

  B:根据用户输入的年份,先判断是否是闰年。

  C:根据用户输入的月份判断一个月的天数。

  D:按周期计算用户输入的年份从1900年1月1日开始的总天数。

  E:通过循环计算用户输入的月份和输入年份的1月1日之间的总天数。

  F:将D和E的天数相加得到总天数。

  G:用总天数计算输入月份第一天的周数。

  H:根据G的值,打印本月的日历格式!

  

一、题目描述

  

二、解析

  根据题目的八个需求,我们可以看到有些功能是重复的或者需要相互调用的,所以可以用模块的思想把每个需求封装成一个功能;

  

1、分析

  确定是否是闰年函数。

  根据闰年的判断规则,如果年份是4的倍数,而不是100的倍数,则是闰年或者400的整数倍也是闰年,所以函数需要传入一个参数(year)。

  #判断闰年

  国防B(年):

  如果年份% 4==0且年份% 100!=0或年份% 400==0:

  返回True

  返回False

  判断输入月份的天数的功能

  每个月的天数已经确定,除了二月会根据平年和闰年变化;所以需要调用定义好的闰年判断函数来确定二月的天数;因此该函数需要传入两个参数(月和年)

  这时候有两个小技巧。一种是判断月份是那月,第一种是用等号或者判断条件是否满足。其实你可以把大月或者小月的月份写成一个列表,然后通过in来判断;第二种是在确定天数的时候,可以先定义一个常用值,然后根据月份修改它的值,最后返回这个常用值,省去了几行赋值和返回的代码。

  def C(年、月):

  天数=31 #31天最多,设置为默认值。

  如果month==2 : #2二月是闰年。

  如果B(年):

  天数=29天

  else:

  天数=28;

  Elimonthin [4,6,9,11] : #法官流产,只有30天。

  天数=30天

  返回天数

  计算从1900年开始的总天数的函数。

  因为平年和闰年的天数不同,所以要调用判断闰年的函数来确定一年的总天数。

  总天数相当于每年天数的总和;所以需要遍历每一年的天数,求它们之和作为结果;因此该函数需要传入一个参数(年份)

  #从某一年到1900年的天数

  def D(年度:int):

  日=0

  对于范围内的I(1900,年):

  如果B(i):

  天=366

  else:

  天=365

  返回日

  当月从1月1日开始的天数的函数。

  从1月1日开始的天数是每个月天数的总和。这时候你需要先确定每个月的天数,也就是需要调用之前定义的函数。您还需要知道它的年份是否是闰年,因此该函数需要传入两个参数(年份和月份)。

  遍历每个月的天数(通过调用函数),然后将它们相加得到想要的结果。

  #从某月到1月1日的天数

  def E(年:int,月:int):

  天数=0

  因为我我

  n range(1,month):

   days += C(year,i)

   return days

  

  ⑤确定星期几的函数

  首先通过调用求年份距离的天数和月份的天数得到其天数总和,所以函数需要传入两个参数(月份和年份)

  然后将总和加一(因为得到的是月份,而算天数时要奖当日计算再内),然后对7求余即为星期几

  

#确定星期几

  def G(year:int,month:int):

   total_day = D(year) + E(year,month) + 1

   week = total_day % 7

   return week

  

  ⑥格式化输出日历函数

  输出有两种格式,一种是星期日在第一天,一种是星期日在最后一天;

  第一种方式:星期日在第一天,根据得到的星期几函数(也就是当月1号的星期几函数),可以确定第一天的位置(也就是1的位置);

  日历也就是输出1到总天数(根据月份确定)在对应的位置(星期几),由于1号的位置已经确定,而一号前面的则为空,所以单独遍历输出空格,然后再输出日历;

  一周对应的是七天,也就是每七天进行一次换行,所以还需要定义一个计数器

  第二种方式:也就是星期日在最后一天,其他逻辑都是一样的,只是在确定1号的位置不一样;

  本来周日的位置为第一个,但是现在变成了最后一个,也就是位置向后移了6位,所以只需要计算位置的时候先将其加上,然后再求余即可

  

#格式化输出

  def my_print(total:int):

   # iCount = 0

   # print("日\t一\t二\t三\t四\t五\t六")

   # for i in range((G(year, month) % 7)):

   # print(end=\t)

   # iCount += 1

   # for i in range(1, C(year, month) + 1):

   # print(i, end=\t)

   # iCount += 1

   # if iCount % 7 == 0:

   # print()

   iCount = 0

   print(一\t二\t三\t四\t五\t六\t日\t)

   for i in range(((G(year,month) + 6) % 7)):

   print(end=\t)

   iCount +=1

   for i in range(1,C(year,month) + 1):

   print(i,end=\t)

   iCount +=1

   if iCount % 7 == 0:

   print()

  

  

  

三、源码

  

# -*- coding: utf-8 -*-

  from datetime import date

  import calendar

  # def B(year):

  # if year/4==0 and year/400 !=0:

  # return True

  # elif year/100 == 0 and year/400 ==0 :

  # return True

  # else:

  # return False

  #判断闰年

  def B(year):

   if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:

   return True

   return False

  # def C(year:int,month:int):

  # days = 30

  # if month in [1,3,5,7,8,10,12]:

  # days = 31

  # elif month == 2:

  # if B(year):

  # days = 29

  # else:

  # days = 28

  # return days

  #每月的天数

  def C(year,month):

   days = 31 #31天居多,设置为默认值

   if month == 2 : #2月份要判断是否是闰年

   if B(year):

   days=29

   else:

   days=28;

   elif month in [4,6,9,11]: #判断小月,只有30天

   days=30

   return days

  #某年到1900年的天数

  def D(year:int):

   day = 0

   for i in range(1900,year):

   if B(i):

   day +=366

   else:

   day +=365

   return day

  #某月到1月1号的天数

  def E(year:int,month:int):

   days = 0

   for i in range(1,month):

   days += C(year,i)

   return days

  #确定星期几

  def G(year:int,month:int):

   total_day = D(year) + E(year,month) + 1

   week = total_day % 7

   return week

  #格式化输出

  def my_print(total:int):

   # iCount = 0

   # print("日\t一\t二\t三\t四\t五\t六")

   # for i in range((G(year, month) % 7)):

   # print(end=\t)

   # iCount += 1

   # for i in range(1, C(year, month) + 1):

   # print(i, end=\t)

   # iCount += 1

   # if iCount % 7 == 0:

   # print()

   iCount = 0

   print(一\t二\t三\t四\t五\t六\t日\t)

   for i in range(((G(year,month) + 6) % 7)):

   print(end=\t)

   iCount +=1

   for i in range(1,C(year,month) + 1):

   print(i,end=\t)

   iCount +=1

   if iCount % 7 == 0:

   print()

  if __name__ == __main__:

   year = int(input(请输入年:))

   month = int(input(请输入月))

   my_print(G(year,month))

  

  

四、经验

  因为函数多,而且计算的结果不方便去口头的验算其结果,也就是说当结果不对时不知道是那出现的问题时,系统提供的

  

from datetime import date

  import calendar

  

  两个模块中有方法可以得出其天数以及星期几的结果,这样就可以查找到底是哪一步出现的问题了;也可以通过print去验证单个的函数是否正确;

  

  

总结

  到此这篇关于python新手练习实例之万年历的文章就介绍到这了,更多相关python实现万年历内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: