闲砍
小鹏今年刚经历2019考研,当然不是很理想,准备继续再来一年。由于平时工作繁忙,压力也比较大,每天仅有晚上的2个多小时的学习时间,自然做题熟练度欠佳不过这都是给自己的一些借口罢了,重要的还时学习方法和效率。下面就回忆一道北航911 专业试题,由于不熟,考试的时候只写了算法思想,并没有用代码写出来,最近趁着学习python 重新写一下,以缓解我心理的遗憾。
试题大概描述
假如公元1年1月1日是星期一,那么如果随意输入一个年月日,判断是星期几。
(为方便验证,我从1900年1月1日开始,因为万年历从1900年开始的...)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
闰年的计算方法
如果是世纪年,如1900,2000等可以被100整除的年份,只有可以被400整除的年份是闰年,其他年份是平年;
其他不是世纪年的年份可以被4整除的就是闰年,否则就是平年。
'''
def is_leap_year(year):
if year % 100 == 0:
if year % 400 == 0:
return True
else:
return False
else:
if year % 4 == 0:
return True
else:
return False
'''
算法思想:通过闰年、和每月天数的不同,计算出输入的日期和1900年1月1日相差多少天,然后取余就出来了。
难点在于判断闰年和月份的天数。
'''
def day_num(year,month,day):
#闰年、平年天数
lyear=0
cyear=0
#月天数
month_num=0
Lyear_month = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
Cyear_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
#计算相差多少年
if year>1900:
for i in range(1900,year):
if is_leap_year(i):
lyear+=1
else:
cyear+=1
#计算相差多少月
if month>1:
if is_leap_year(year):
for j in range(1,month):
month_num+=Lyear_month[j-1]
else:
for k in range(1,month):
month_num+=Cyear_month[k-1]
else:
month_num=0
return lyear*366+cyear*365+month_num+day-1
#定义星期
def is_week(day):
week=['星期一','星期二','星期三','星期四','星期五','星期六','星期日']
return week[day%7]
if __name__ == '__main__':
year=input("请输入年份:")
month = input("请输入月份:")
day = input("请输入日:")
num=day_num(year, month, day)
week=is_week(num)
print week
输出结果
请输入年份:2019
请输入月份:1
请输入日:6
星期日