Найти - Пользователи
Полная версия: Курс от ВШЭ. Простая задача. Помогите понять как она решается.
Начало » Python для новичков » Курс от ВШЭ. Простая задача. Помогите понять как она решается.
1
Vladimir_Galeta
Добрый день.
Все было хорошо, но встал с одной задачей.

Тема: Логический тип данных и логические связки

Задача: Вася не смог попасть в магазин в Италии. Несмотря на удачно подобранное время посещения магазина в этот день в городе праздновался день броколетти (цветной капусты) и магазин был закрыт по случаю праздника. Зато Вася смог купить билет до Испании за сущие копейки. В Испании есть магазин, который открыт с A до B часов включительно. Испания - жаркая страна, поэтому с C до D часов включительно наступает сиеста, когда все заведения, включая магазин, закрыты. При этом A < B, C < D. Обратите внимание, что время сиесты не обязательно полностью содержится в интервале работы магазина. Вася может прийти в испанский магазин в X часов. Выведите True если магазин открыт в это время и False, если он закрыт.

Числа A, B, C, D, X вводятся по одному в строке и находятся в пределах от 0 до 23.

Как я вижу решение:
A = int(input())
B = int(input())
C = int(input())
D = int(input())
X = int(input())

q1 = A <= X < C and X < C or X > D and X < B
print(q1)

При загрузке в тестировщик пишет, что “код” скрытые тесты не прошел.

Подскажите, пожалуйста, что мне нужно изучить что бы понимать как решаются подобные задачи? Учебник по логике, алгебра логики, таблицы истинности? Что нужно освоить?
py.user.next
Сначала нужно проверить, может ли он прийти в магазин вообще.
Если он не может прийти в магазин, то ответ уже известен и дальше проверять ничего не надо.
Если он может прийти в магазин, то нужно проверить, не находится ли он в паузе в этой.
Если он находится в паузе, то ответ известен.
Если он находится вне паузы, то ответ известен.

Сам сделаешь? Или тебе ещё подсказывать надо?

Vladimir_Galeta
Подскажите, пожалуйста, что мне нужно изучить что бы понимать как решаются подобные задачи? Учебник по логике, алгебра логики, таблицы истинности? Что нужно освоить?
Тебе надо освоить принцип “разделяй и властвуй”, который в программировании используется постоянно. В твоём решении видно, что ты всё смешал и делаешь всё сразу. А я предложил сначала проверить это, а потом проверить вот это, только если первая проверка оказалась недостаточной. Я разделил решение на отдельные этапы.
Vladimir_Galeta
Большое спасибо за совет. Склоняю голову)

Если я правильно понял, то нужно не все в одну строчку писать, а делить по этапам или действиям. При этом, после каждого действия необходимо проверять. Я правильно понял?

А как выражается, может ли он вообще придти в магазин?
Ocean
Vladimir_Galeta
может ли он вообще придти в магазин?
Если в эти часы магазин открыт, то может придти в него. Если магазин закрыт, то не может
py.user.next
Vladimir_Galeta
Если я правильно понял, то нужно не все в одну строчку писать, а делить по этапам или действиям.
Не, оно пишется в одну строчку, но думается оно в виде вот этих отдельных этапов. Это замаскированная задача на два отрезка в одномерном пространстве.

  
>>> a, b, c, d, x = 1, 5, 3, 6, 4
>>> a <= x <= b and not c <= x <= d
False
>>>

Теперь дальше “как научиться так думать?”, - это алгоритмическое мышление. Для этого ты изучаешь, что такое алгоритм, как он устроен, где там вход, где выход, как идёт разбиение на шаги, какое предусловие стоит перед каждым шагом и какое постусловие стоит после каждого шага.

Так ты будешь понимать, что “если я проверил, могу ли я прийти в магазин, и понял, что я не могу прийти в магазин, потому что он не работает, то мне дальше не надо проверять, идёт ли сиеста, так как для шага проверки сиесты должно соблюдаться предусловие <магазин работает>”.
Vladimir_Galeta
Большое спасибо за помощь. Получилось решить задачу. Много времени убил. Но благодаря вам решил. Еще раз спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB