У нас есть задача про таракана, как он ползает по стене и хочет забраться к соседям. Мы уже решали её обычным способом, теперь сделаем это на 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, "часов.")
Теперь с помощью этого кода мы можем решить любую задачу про таракана с разными начальными условиями. Чтобы их поменять, достаточно переделать нужную переменную в самом начале программы.
Например, попробуйте поменять код, чтобы он решал ту же задачу, но с новым условием: каждые два часа таракан отдыхает в течение часа и никуда при этом не ползёт.