Почему Python не читает мои логические каникулы? - PullRequest
0 голосов
/ 06 февраля 2019

Я пытался выполнить это упражнение на Codebat:
Учитывая день недели, закодированный как 0 = Солнце, 1 = Пн, 2 = Вт, ... 6 = Сб, и логическое значение, указывающее, находимся ли мы в отпуске, верните строку вида «7:00», указывающую, когда должен прозвучать будильник.В будние дни будильник должен быть «7:00», а в выходные - «10:00».Если мы не в отпуске - тогда в будние дни это должно быть "10:00", а в выходные дни оно должно быть "выключено".

def alarm_clock(day, vacation):
  vacation_weekday = vacation and day in range(1,6)
  vacation_weekend = day == 0 and day == 6 and vacation

  if day in range(1,6):
     return  "7:00"
  elif day == 0 or day == 6:
     return  "10:00"
  elif vacation_weekday:
     return "10:00"
  elif vacation_weekend:
     return "off"    

Если я запускаю print(alarm_clock(1,True)), он возвращает "7:00" вместо "10:00".Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вот как вы должны были переписать свой код, чтобы правильно его оценить:

def alarm_clock(day, vacation):
   weekday_alarm_clock = "7:00 AM"
   weekend_alarm_clock = "10:00 AM"

   if vacation:
      weekday_alarm_clock = "10:00 AM"
      weekend_alarm_clock = "off"
   if day > 0 and day < 6:
      return weekday_alarm_clock 
   else:
      return weekend_alarm_clock 

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

Теперь вывод, который я получаю при использовании print(alarm_clock(1,True)), равен 10:00 AM, как и ожидалось

0 голосов
/ 06 февраля 2019

Ваш первый if оператор проверяет if day in range(1, 6).Если day равно 1, это всегда будет правдой.Поскольку первое условие соответствует, ни одно из условий elif даже не выполняется.(Кроме того, поскольку вы return немедленно, после этой точки другой код в функции также не выполняется.)

Возможно, вы захотите переставить операторы if, чтобы сначала проверить специальные случаи, итогда общие случаи.Кроме того, можно предварительно вычислить логическое значение weekend и / или weekday, а затем явно выразить все условия:

def alarm_clock(day, vacation):
    weekday = 1 <= day <= 5
    weekend = not weekday

    if weekend and vacation:
        return "off"
    if weekend and not vacation:
        return "10:00"
    if weekday and vacation:
        return "10:00"
    if weekday and not vacation:
        return "7:00"

Или даже, используя троичное выражение:

def alarm_clock(day, vacation):
    weekday = 1 <= day <= 5

    if vacation:
        return "10:00" if weekday else "off"

    return "7:00" if weekday else "10:00"
...