Python реализует запрос вечного календаря

задняя часть Python

Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.

Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.

Сегодня я хочу сделать небольшую функцию с python, то есть реализовать запрос вечного календаря.

image.png

def is_leap_year(year):
   if year/4==0 and  year/400 !=0:
       return True
   elif year/100 == 0 and year/400 ==0 :
       return True
  else:
        return False

Сначала определите, високосный ли это год, потому что полезно вычислить, 29 ли дней в феврале. Високосными называются те, которые делятся на 4 и не делятся на 400. Високосный год, который делится на 100 и делится на 400, является невисокосным.

def getMonthDays(year,month):

    days = 31        #31天居多,设置为默认值
    if month == 2 :    #2月份要判断是否是闰年
        if is_leap_year(year):
            days=29
        else:
            days=28;
    elif month in [4,6,9,11]:     #判断小月,只有30天
        days=30
    return days

Получает количество дней в месяце указанного года и месяца за годом и месяцем. Здесь следует отметить, что февраль нужно рассчитать, является ли он високосным годом, если это високосный год, то в нем 29 дней, если нет, то в феврале всего 28 дней. Тогда [4,6,9,11] — это маленький месяц всего с 30 днями, а остальные — большие месяцы с 31 днем.

def getTotalDays(year,month):
 
    totalDays=0
    for i in range(1990,year):     #使用range来循环,算出多少年多少天
        if is_leap_year(i):        #判断是否是闰年
            totalDays += 366
        else:
            totalDays += 365
    for i in range(1,month):       #使用range循环,算出今年前面几个月过了多少天
        totalDays +=getMonthDays(year,i)
    return totalDays

1990-01-01 Получите месяц со времени общего количества дней. Во-первых, вы не можете войти здесь меньше, чем в январе 1990 года, в противном случае возвращаются 0 дней. Нам нужно использовать год, чтобы определить, сколько дней прошло в целом, если это скачок года, это было бы +366, +365, если это не выжимающий год. Все дни и, наконец, передний месяц плюс в этом месяце, так что вы можете получить количество дней с 1990-01-01.

if __name__ == '__main__':
    while True:                               
        print "××××××××××python实现万年历××××××××"
        year = raw_input("请输入年份(如:1990):")
        month = raw_input("请输入月份:如:1")
        try:                                   
            year = int(year)
            month = int(month)
            if month <1 or month >12:          
                print "年份或者月份输入错误,请重新输入!"
                continue
        except:                                
            print "年份或者月份输入错误,请重新输入!"    
            continue
        break   
        
    print "日\t一\t二\t三\t四\t五\t六"
    iCount = 0      #计数器来判断是否换行
    for i in range(getTotalDays(year,month)%7):
        print '\t',                 #输出空不换行
        iCount+=1
    for i in range(1,getMonthDays(year,month)):
        print i,
        print '\t',
        iCount +=1
        if iCount%7 == 0 :           #计数器取余为0,换行
            print ''

Наконец, вам нужно только ввести год и месяц, и вы можете ввести полный календарь всего месяца. Независимо от того, запрашиваете ли вы предыдущие календари или запрашиваете будущие календари, его можно рассчитать. Также необходимо сделать некоторую отказоустойчивую обработку, чтобы пользователи не вводили неверные данные. Здесь %7 используется для ветвления каждые 7 дней с понедельника по воскресенье. Это напечатано точно так же, как календарь.

Не стесняйтесь обсуждать со мной программу, а также отвечать на вопросы.Обратите внимание на общедоступный номер: Поэтический код, подружиться.