Професионална програма
Loading...
+ Нов въпрос
Grigcho avatar Grigcho 1 Точки

07.Working hours

Здравейте, нещо не ми става ясно защо се чупи при инпут - 19, Friday и печата open.

Диапазона не е ли зададен правилно if 10 <= time <= 18 Ето ми кода:

time = int(input())
weekday = input()

if 10 <= time <= 18 and weekday == "Monday" or \
    weekday == "Tuesday" or \
    weekday == "Wednesday" or \
    weekday == "Thursday" or \
    weekday == "Friday":
    print("open")
else:
    print("closed")
Тагове:
0
Programming Basics
MartinBG avatar MartinBG 2783 Точки

Проблемът е, че and оператора е с по-висок приоритет от or и съответно проверката за часа се изпълнява заедно с проверката за weekday == "Monday", а останалите проверки са независими.

При вход 19 Friday ще получим:

1. False and False or False or False or False or True

2. False or False or False or False or True

3. True (от weekday == "Friday")

За да решим проблема, трябва да променим израза на:

False and (False or False or False or False or True) = False and True = False

time = int(input())
weekday = input()

if 10 <= time <= 18 and (weekday == "Monday" or
                         weekday == "Tuesday" or
                         weekday == "Wednesday" or
                         weekday == "Thursday" or
                         weekday == "Friday"):
    print("open")
else:
    print("closed")

Има и по-кратък запис на горното:

time = int(input())
weekday = input()

if 10 <= time <= 18 and weekday in ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday"):
    print("open")
else:
    print("closed")

 

0
Grigcho avatar Grigcho 1 Точки

Здравейте,

Благодаря за отговора, директно плякнах в Джъдж вашият код и даде 71 точки,

В моят код добавих скоби, както ме посъветвахте, аз го разбирам, като приоритет или ДА, заради true, true, false, което трябва да се съобразява

но въпреки това ми даде 85 точки - и на моя код със скоби и на вашия съкратен!?!?!? Сега не мога да разбера какво иска, в конзолата изхода е ОК.

0
Katrin_Kolarska avatar Katrin_Kolarska 0 Точки

Здравейте,
на мен ми излиза 100 точки само с това изписване:

hour = int(input())
weekday = input()

if weekday == 'Sunday' or hour < 10 or hour > 18:
    print('closed')
else:
    print('open')

 

 

0