#未优化的代码
1 #输出日历
def print_calendar(year,month,date = 1):
month_dict = {'':'January','':'February','':'March','':'April','':'May','':'June','':'July',
'':'August','':'September','':'October','':'November','':'December'} #数字月份转换为字符串,并判断月份和号数是否合法
if month in range(1,13) and date in range(1,31):
month_str = str(month)
if month_str in month_dict:
month_str = month_dict[month_str]
else:
print('月份或号数输入不合法')
return -1 #头部
print('%15s%8d'%(month_str,year))
print('-'*33)
print('Sun Mon Tue Wed Thu Fri Sat') #得到每月1号是星期几
first_day = get_start_day(year,month,1)
#得到此月有多少天
month_num = days_of_month(year,month) each_day = 0
#主体
for index in range(1,43): if index < first_day + 1:
print(' '*5,end = '')
else:
if (index - 1) % 7 == 0:
print('')
each_day += 1
if each_day > month_num:
return False
if each_day < 10:
if each_day == date:
print('%-5s'%('--'),end = '')
else:
print(' %-4d'%(each_day),end = '')
else:
if each_day == date:
print('%-5s'%('--'),end = '')
else:
print('%-5d'%(each_day),end = '') #输入一个年月日,判断是星期几
#需要一个比较标准:2010-1-1是星期五
#计算当前距离标准过了多少天(total_days % 7 + 5 -1)%7
#先遍历年份,是闰年+366,不是+365
#再遍历月份,31,30,29,28
def get_start_day(year,month,date):
total_days = 0
#遍历年份
for one_year in range(2010,year):
if is_leap_year(one_year):
total_days += 366
else:
total_days += 365
#print(total_days)
#遍历月份
for one_month in range(1,month):
total_days += days_of_month(year,one_month)
#print(total_days)
#加上当月号数,则求得总共过了多少天
total_days += date #求输入的年月日是星期几
day = (total_days % 7 + 5 - 1) % 7 #print(total_days)
#print(day)
return day #输入一个年份和月份,输出这月有多少天
#1,3,5,7,8,10,12--------31天
#4,6,9,11 --------------30天
#如果是闰年2------------29天
#不是闰年 2-------------28天
def days_of_month(year,month):
days = 0
if month in (1,3,5,7,8,10,12):
days = 31
elif month in (4,6,9,11):
days = 30
elif is_leap_year(year):
days = 29
else:
days = 28
return days def is_leap_year(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
return False def main():
print('*'*33)
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
date = int(input('请输入号数:'))
print('*'*33)
#某年某月有多少天
#days = days_of_month(year,month)
#print('{}年{}月有{}天'.format(year,month,days))
#某年某月某日是星期几
#day = get_start_day(year,month,date)
#print('{}年{}月{}日是星期{}'.format(year,month,date,day))
#打印日历
print_calendar(year,month,date) #执行
main()

python打印日历的更多相关文章

  1. python 打印日历

    import calendar as c'''x = c.monthcalendar(2017,11) 使用这个结果打印出日历 s = 1while s <= 7: print('周%d '%( ...

  2. Python学习实践-----打印日历

    使用python语言实现在控制台打印日历 输入年.月.日 输出对应日历,指定的日数输出为'--' 程序没有做严格的输入验证,故输入整数即可. 以下为没有优化的源码: print_calendar.py ...

  3. Python实战练习——打印日历教程

    很长一段时间没有接触过C语言了,想来做这一行当已经有三两年了. 今天突然想起来以前用C语言在VC6上写代码的日子,想了想以前的一些实战练习. 所以今天打算用Python来写一个C语言以前练习的题目-日 ...

  4. Python打印格式化与字符串

    关于Python打印格式化与字符串,比较全面的总结,希望对大家有帮助~ # -*- coding: cp936 -*- ''' 打印格式 ''' print "a" print & ...

  5. python打印表格式数据,留出正确的空格和段落星号或注释

    python打印表格式数据,留出正确的空格,格式化打出 代码如下: def printPicnic(itemsDict,leftWidth,rightWidth): print('PICNIC ITE ...

  6. python打印万年历

    1.输入年份,输入月份 2.格式化输出本月的日历 3.思路 输入年,月,打印对应年月的日历.1,首先1970年是Unix系统诞生的时间,1970年成为Unix的元年,1970年1月1号是星期四,现在大 ...

  7. Oracle打印日历功能

    Oracle用SQL打印日历 1.1  打印当月日历 , D, NULL)) SUN, , D, NULL)) MON, , D, NULL)) TUE, , D, NULL)) WED, , D,  ...

  8. 使用java 打印日历

    package hangshu; /* * 打印从1900年到2.year年的日历 */ import java.util.Scanner; public class Calender { publi ...

  9. python 打印 emoji

    python 打印 emoji 如需转发,请注明出处:小婷儿的python  https://www.cnblogs.com/xxtalhr/p/10486506.html 一.Unicode字符集: ...

随机推荐

  1. STL在迭代的过程中,删除指定的元素

    直接上Code,上 Picture #include <iostream> #include <list> using namespace std; // STL在迭代的过程中 ...

  2. @Repository @Service 和@Autowired 的使用

    解释: @Controller 声明Action组件 @Service   声明Service组件    @Service("myMovieLister")  @Repositor ...

  3. jenkins设置

    selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PAT ...

  4. linux下查看监听port相应的进程

    使用netstat查看进程PID [root@test ~]# netstat -anp|grep 5001 tcp 0 0 :::5001 :::* LISTEN 12886/java 之后各位看官 ...

  5. 创建虚拟机中的nova-scheduler 调度配置

    一个Openstack 系统中通常包括多个计算节点 root@controller:/etc/nova# nova hypervisor-list +----+-------------------- ...

  6. 从vs中删除自带的Microsoft Git Provider

    https://researchaholic.com/2015/02/02/remove-the-microsoft-gitprovider-from-visual-studio-2013/ vs自带 ...

  7. C#中数据库备份还原 精简

    C#中数据库备份还原 使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) ///     /// DbOper类,主要应用SQLD ...

  8. Django day08 多表操作 (二) 添加表记录

    一: 一对多 1. 一对多新增 两种方式:  publish = 对象    publish_id = id 1. publish_id 和 publish 的区别就是: 1)publish_id 可 ...

  9. HTML多媒体标记之字幕标记

    在HTML中,可以向页面中插入字幕,水平或垂直滚动显示文字信息,字幕标记的格式如下: <marquee 属性="值"...>滚动的文字信息</marquee> ...

  10. IE兼容性測試軟件

    对于前端开发工程师来说,确保代码在各种主流浏览器的各个版本中都能正常工作是件很费时的事情,幸运的是,有很多优秀的工具可以帮助测试浏览器的兼容性,让我们一起看看这些很棒的工具. Spoon Browse ...