移动应用开发项目实战-2017 基础语法 031-求月历开始打印位置.docxVIP

  • 0
  • 0
  • 约1.88千字
  • 约 8页
  • 2021-01-28 发布于北京
  • 举报

移动应用开发项目实战-2017 基础语法 031-求月历开始打印位置.docx

目录 20027_WPSOffice_Level1 求月历开始打印位置 2 24192_WPSOffice_Level1 运行结果: 2 6961_WPSOffice_Level1 模块代码: 5 求月历开始打印位置 在前面的基础上确定某月某一日与星期的对应关系后就能够输出正确的月历,所以我们可以把这个确定星期关系定为本节的目标,面对一个月历分析一下,每月从最左端开始(日期的1号对应星期日)可以方便地控制以7个日期加入一个回车的形式输出该月的天数,但是实际的月历并不都是从最左边开始的,怎么办呢?观察得知,若开始打印位置不是周日,那么打印结束的位置就会延展相应的天数。举个例子,若某月的1日是周3,那么开始和结束打印的位置将都向后3个打印位置。那么将每月1日对应的星期设为wd,其中周日对应wd=0,周六对应wd=6。那么把打印的范围修改成: range(print_days+wd) 运行结果: 这样就可以向后拓展打印范围了但是会有个小问题,修改的代码和运行结果: 上面代码在15行确定了wd=3,第19行拓展了打印范围,从结果看有些奇怪,输入的是2015年4月,但是日期从1打印到33了,而且打印开始的位置也不正确,对此程序需要修补一下,第20行是需要打印的日期的数字,将它改成: pd=i+1-wd,代码和结果为: 观察结果,只需控制打印0以上的数字照原样打印,其他数字打印占位符,就可以了: 以上程序的22-31行,在原有的if结构中嵌入了判断数字是否大于0的结构。至此确定星期关系目标完成。 模块代码: 模块代码如下: # can_2_3_tools tu_days_in_month = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 def is_leap_year(y): if y % 4 == 0 and y % 100 != 0 or y % 400 == 0: return True else: return False def days_in_month(y, m): if is_leap_year(y) and m == 2: return 29 else: return tu_days_in_month[m] def days_before_month(y,m): sum = 0 i = 0 while im: sum+=days_in_month(y,i) i+=1 return sum def week_day(y,m): sum = days_before_month(y,m) return (sum + 4) % 7 完整代码如下: from can_2_3_tools import * year = input(pis input year:) month = input(pis input month:) out_str = SUN MON TUE WEN THU FRI SAT i = 0 wd = week_day(year,month) print_days = days_in_month(year, month) for i in range(print_days+wd): pd = i+1-wd if i % 7 == 0: if pd 0: # ^ 分别是居中、左对齐、右对齐,后面带宽度(整个字符串的宽度) bl_str = \n{:^7d}.format(pd) else: bl_str = \n else: if pd 0: bl_str = {:^7d}.format(pd) else: bl_str = out_str = out_str + bl_str print out_str

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档