Python 2: почему эта функция следует с логическим значением без условий if/else?

#python #if-statement #boolean #boolean-logic

Вопрос:

Вот пример кода, который мне дали для заполнения:

 def is_leap(year):
leap = False

year = int(raw_input())
print is_leap(year)
 

Мне удалось решить эту проблему с помощью всех примеров тестов, но я не понимаю, почему leap присваивается значение False, когда нет никаких условий. Какой смысл это делать, если мне снова придется переопределить переход на Истину или Ложь в зависимости от условий?

Условия: Год считается високосным годом, когда:

Год можно равномерно разделить на 4, это високосный год, если только:

Год можно равномерно разделить на 100, это НЕ високосный год, если только:

Год также равномерно делится на 400. Тогда это високосный год.

Мой код:

 def is_leap(year):
    leap = False

    if (year % 4 == 0):
       leap = True
    if year % 100 == 0:
        if year % 400 == 0:
            leap = True
        else:
            leap = False
    return leap
year = int(raw_input())
print is_leap(year)
 

Комментарии:

1. Что не так с вашим кодом, пожалуйста, объясните.

2. пожалуйста, исправьте отступ!

3. Есть ли какая-либо конкретная причина для использования python 2.x

4. why leap is assigned False when there are no conditions.? потому leap что это значение, для которого мы решаем, поэтому нам нужно объявить его в python, чтобы использовать его, и оно может быть только двоичным — истинным или ложным. Но чтобы ответить на ваш вопрос напрямую, если мы не присвоим leap начальное значение, которое мы получим UnboundLocalError: local variable 'leap' referenced before assignment. в противном случае, решение присвоить leap false является произвольным, автор мог бы также изначально присвоить ему значение true и изменить решение.

Ответ №1:

У вас есть два if оператора, которые могут задать leap переменную. Но вполне возможно, что ни одно из условий не будет выполнено и leap в этом случае должно иметь значение, иначе вы получите исключение в return заявлении.

P.S. Не нужно делать вопрос специфичным для Python 2, то же самое и в Python 3.

Комментарии:

1. Помимо того факта, что в Python 3 функция input() не вызывается raw_input() .

2. @BoarGules хороший момент, я это пропустил. И также это print было утверждение, а не функция. Но на самом деле это не часть вопроса, просто поддержка примера кода.

3. Признаю, что это не было задумано как критика, только замечание в пользу ОП, поскольку мы, очевидно, помогаем новичку.

4. Большое спасибо. Что вы имеете в виду, говоря, что print был оператором, а не функцией? Я понимаю предложение, но вы ссылались на заголовок вопроса, где я упомянул «функцию»?

5. @EnthusiasticGerbil print -одно из самых больших различий между Python 2 и 3. В Python 2 это утверждение, и вы просто перечисляете элементы, которые хотите распечатать, как вы это сделали в своем коде вопроса. В Python 3 это функция, поэтому вы должны передать то, что хотите распечатать, в качестве параметров в круглых скобках. Это один из самых простых способов узнать, на какую версию Python вы ориентируетесь. Я вообще не ссылался на название вашего вопроса.