easy

Решаем как программисты: таракан на стене

Всё очевидно: мы смоделируем решение задачи в реальном мире.

У нас есть задача про таракана, как он ползает по стене и хочет забраться к соседям. Мы уже решали её обычным способом, теперь сделаем это на Python. Потому что Python — это круто, Python — это класс, не было бы Python — не было бы нас.

В ваш подъ­езд дву­мя эта­жа­ми ниже въе­ха­ли новые жиль­цы, кото­рые при­вез­ли с собой тара­ка­нов. Насе­ко­мые в поис­ках еды ста­ли полз­ти вверх по вен­ти­ля­ци­он­ной шах­те и ско­ро добе­рут­ся до вашей квар­ти­ры. Но караб­кать­ся вверх им неудоб­но: за час они под­ни­ма­ют­ся на 1 м, но сра­зу после это­го теря­ют рав­но­ве­сие и ска­ты­ва­ют­ся на ⅔ м вниз.

Вопрос: сколь­ко часов у вас есть на покуп­ку лову­шек для тара­ка­нов, если рас­сто­я­ние от вас до сосе­дей по вен­ти­ля­ци­он­ной шах­те — 7 м?

Задаём условия

У программистов считается правильным делать все значения не жёстко заданными числами в коде, а переменными. Это удобно, когда меняются исходные данные: достаточно пересмотреть значение переменной в одном месте, а не искать эти цифры по всему коду. Поэтому первое, что мы сделаем, — зададим начальные условия задачи:

# Высота вентиляционной шахты
mine = 7
# Сколько таракан проползает за час
speed = 1
# Расстояние, на которое сползает уставший таракан
slowdown = 2/3
# Сколько метров прополз таракан
done = 0
# Сколько часов он на это потратил
hours = 0

Если нам понадобится поменять высоту шахты или скорость сползания, мы сможем это сделать быстро, потому что все данные у нас записаны в одном месте.

Алгоритм для решения

Теперь напишем алгоритм, который будет считать часы, которые понадобятся таракану на движение по шахте. Основная мысль такая:

Каждый час таракан проползает определённое расстояние наверх и немного сползает вниз. При этом мы постоянно проверяем, достиг он края шахты или нет.

Запишем эту мысль в виде кода:

# Пока пройденное расстояние меньше длины шахты — ползём дальше
while done <= mine:
    # Прошёл час
    hours += 1
    # За этот час таракан прополз сколько-то метров 
    done += speed
    # Если он дополз до края — принудительно останавливаем цикл
    if done >= mine:
        break
    # Усталый таракан в конце часа скатывается вниз
    done -= slowdown

Здесь мы используем операторы += и -=. Они работают так: берут переменную и прибавляют или отнимают от неё то значение, которое стоит после оператора. Например, 3 += 2 будет 5, а 10 -= 4 будет 6. Последнее, что нам осталось, — вывести результат работы на экран:

# Выводим количество полученных часов print("Таракану понадобится" ,hours, "часов.")

Готовый код (вставьте в Jupyter и нажмите Shift + Enter):

# Высота вентиляционной шахты
mine = 7
# Сколько таракан проползает за час
speed = 1
# Расстояние, на которое сползает уставший таракан
slowdown = 2/3
# Сколько метров прополз таракан
done = 0
# Сколько часов он на это потратил
hours = 0
# Пока пройденное расстояние меньше длины шахты — ползём дальше
while done <= mine:
    # Прошёл час
    hours += 1
    # За этот час таракан прополз сколько-то метров 
    done += speed
    # Если он дополз до края — принудительно останавливаем цикл
    if done >= mine:
        break
    # Усталый таракан в конце часа скатывается вниз
    done -= slowdown
# Выводим количество полученных часов
print("Таракану понадобится" ,hours, "часов.")

Теперь с помощью этого кода мы можем решить любую задачу про таракана с разными начальными условиями. Чтобы их поменять, достаточно переделать нужную переменную в самом начале программы.

Например, попробуйте поменять код, чтобы он решал ту же задачу, но с новым условием: каждые два часа таракан отдыхает в течение часа и никуда при этом не ползёт.

Попробуйте бесплатное в «Яндекс Практикуме»
В «Яндекс Практикуме» есть бесплатные курсы, на которых можно получить полезные навыки для работы в ИТ: от Git и Excel до основ Python и облачных технологий.
Учиться бесплатно
Попробуйте бесплатное в «Яндекс Практикуме» Попробуйте бесплатное в «Яндекс Практикуме» Попробуйте бесплатное в «Яндекс Практикуме» Попробуйте бесплатное в «Яндекс Практикуме»
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy