J.Woods
J.Woods

Reputation: 25

Logic code in python giving the wrong answer

Given a day of the week encoded as 0=Sun, 1=Mon, 2=Tue, ...6=Sat, and a boolean indicating if we are on vacation, return a string of the form "7:00" indicating when the alarm clock should ring. Weekdays, the alarm should be "7:00" and on the weekend it should be "10:00". Unless we are on vacation -- then on weekdays it should be "10:00" and weekends it should be "off".

My code:

  def alarm_clock(day,vacation):
  if(vacation):
      if(day == 0 | day == 6):
          return "off"
      return "10:00"
  else:
      if(day == 0 | day == 6):
          return "10:00"
      return "7:00"

With input:

print(alarm_clock(0,True))

My code returns '10:00' when it should be 'off'

With input:

print(alarm_clock(0,False))

My code returns '7:00', it should be '10:00'

Where is the bug in my code?

Upvotes: 0

Views: 2451

Answers (3)

AzaDee
AzaDee

Reputation: 85

You are using a bitwise or "|". You need to use a logical or "or"

def alarm_clock(day,vacation):
  if(vacation):
      if(day == 0 or day == 6):
          return "off"
      return "10:00"
  else:
      if(day == 0 or day == 6):
          return "10:00"
      return "7:00"

Upvotes: 0

Hearner
Hearner

Reputation: 2729

As you can see in the official documentation, the logical "or" operator in Python is or, not | which is a bitwise operator

Upvotes: 0

sniperd
sniperd

Reputation: 5274

Change it like this:

def alarm_clock(day,vacation):
    if(vacation):
        if(day == 0 or day == 6):
            return "off"
        return "10:00"
    else:
        if(day == 0 or day == 6):
            return "10:00"
        return "7:00"

print(alarm_clock(0,True))

results:

off

The pipe isn't doing what you'd expect: Pipe character in Python it is in fact a bitwise operator. :)

Upvotes: 1

Related Questions