#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 хороший момент, я это пропустил. И также это
3. Признаю, что это не было задумано как критика, только замечание в пользу ОП, поскольку мы, очевидно, помогаем новичку.
4. Большое спасибо. Что вы имеете в виду, говоря, что print был оператором, а не функцией? Я понимаю предложение, но вы ссылались на заголовок вопроса, где я упомянул «функцию»?
5. @EnthusiasticGerbil