Arhn - архитектура программирования

Печать количества дней в заданном месяце и году [Python]

Я пытался найти способ выполнить то, что указано в заголовке, без использования каких-либо импортированных библиотек календаря/даты и времени из Python. Вверху есть небольшая функция для проверки того, является ли год високосным, на что я хочу иметь возможность ссылаться при печати количества дней в данном феврале, однако я не слишком уверен, как это сделать. (Я догадался с чем-то вроде вывода. бла-бла)

До сих пор я придумал что-то вроде этого, что должно прояснить, что я хочу сделать, но я все еще немного новичок в Python, поэтому мне бы хотелось получить несколько советов/помощь по исправлению моего кода для задачи. .

# A function to determine if a year is a leap year.
# Do not change this function.
def is_leap_year (year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

# You should complete the definition of this function:

 def days_in_month(month, year):

    if month == 'September' or month == 'April' or month == 'June' or month == 'November'
    print 30

    elseif month == 'January' or month == 'March' or month == 'May' or month== 'July' or month == 'August' or month == 'October'\
    or month== 'December'
     print 31

    elseif month == 'February' and output.is_leap_year = True
    print 29

    elseif month == 'February' and output.is_leap_year = False
    print 28

    else print 'Blank'

Хорошо, я исправил свой код, и, похоже, он выводит правильные данные за каждый месяц, кроме февраля:

# A function to determine if a year is a leap year.
# Do not change this function.
def is_leap_year (year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

# You should complete the definition of this function:

def days_in_month(month, year):

    if month in ['September', 'April', 'June', 'November']:
        print 30

    elif month in ['January', 'March', 'May', 'July', 'August','October','December']:
        print 31        

    elif month == 'February' and is_leap_year == True:
        print 29

    elif month == 'February' and is_leap_year == False:
        print 28

Какие-нибудь подсказки, чтобы исправить вывод на февраль?

РЕДАКТИРОВАТЬ: просто нужно добавить год аргумента при ссылке на первую функцию. Вот 100% рабочий код для дальнейшего использования:

# A function to determine if a year is a leap year.
# Do not change this function.
def is_leap_year(year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

# You should complete the definition of this function:

def days_in_month(month, year):

    if month in ['September', 'April', 'June', 'November']:
        print 30

    elif month in ['January', 'March', 'May', 'July', 'August','October','December']:
        print 31        

    elif month == 'February' and is_leap_year(year) == True:
        print 29

    elif month == 'February' and is_leap_year(year) == False:
        print 28

    else:
        return None


  • elseif должно быть elif 20.08.2013
  • Райто, исправил это. Кроме того, это код ошибки, который я получаю при запуске кода, но я предполагаю, что после сортировки этого кода будет больше: def days_in_month(month, year): ^ IndentationError: unindent не соответствует ни одному внешнему уровень отступа .... ^ должен быть в двоеточии, просто не знаю, как отформатировать этот комментарий. 20.08.2013
  • Вы можете немного сократить его, написав if month in ('September', 'April', 'June', 'November'):, а поскольку оно находится в функции, вы можете захотеть return вычислить значение, а не print его. 20.08.2013
  • Я немного укоротил его и исправил несколько вещей, не могли бы вы проверить мой второй пакет кода в ОП? Не могу заставить анализы за февраль работать.. 20.08.2013
  • функции is_leap_year нужен аргумент year, вы его пропустили 20.08.2013
  • О, красота, все исправлено. Огромное спасибо за помощь! 20.08.2013

Ответы:


1

Некоторая синтаксическая ошибка в вашем коде:

  1. Перед def days_in_month(month,year) не должно быть пробела. Python использует отступы для разделения блоков кода. Это ошибка, которую вы указали в комментарии.
  2. В питоне нет elseif, должно быть elif
  3. output.is_leap_year = True, должно быть is_leap_year(year) == True. Часть False также должна быть изменена.
  4. после оператора if и else должно быть :, например

    if month == 'September' or month == 'April' or month == 'June' or month == 'November':
        print 30
    elif month == 'January' or month == 'March' or month == 'May' or month== 'July' or month == 'August' or month == 'October' or month== 'December':
        print 31
    elif month == 'February' and is_leap_year(year) == True:
        print 29
    elif month == 'February' and is_leap_year(year) == False:
        print 28
    else:
        print 'Blank'
    
20.08.2013
  • Хорошо, я все исправил, благодарю за помощь. Теперь я получаю синтаксическую ошибку, возвращающуюся в строке 10, в кавычках справа от строки «Ноябрь». Что может быть причиной? 20.08.2013

  • 2

    Более питонический подход состоял бы в том, чтобы определить отображение в словаре, а затем просто получить значения из словаря.

    Попробуйте:

    days_in_month_dict = {"January": 31, "February": 28, 
                          "March": 31, "April": 30,
                          "May": 31, "June": 30, 
                          "July": 31, "August": 31,
                          "September": 30, "October": 31,
                          "November": 30, "December": 31}
    
    def is_leap_year(year):
        return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)
    
    def days_in_month(year, month):
        if is_leap_year(year) and month == "February":
            return 28
    
        try: 
            #attempt to get value from dictionary 
            return days_in_month_dict[month]
        except KeyError:
            #key does not exist, so we caught the error
            return None
    
    20.08.2013

    3
  • Хотя этот код может решить проблему, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщение и, вероятно, приведет к большему количеству голосов. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для того, кто задает сейчас. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются. Из обзора 27.05.2020

  • 4
  • Пожалуйста, не публикуйте только код в качестве ответа, но также объясните, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением, как правило, более полезны и качественны, и с большей вероятностью привлекут положительные голоса. 28.07.2020
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..