Vladej
py.user.next
Сначала делается полное словесное описание алгоритма
ну а что мы все делаем? предварительно “филология”, потом конкретика.
Словесное описание алгоритма - это не обсуждение и не размышления об алгоритме.
Вот пример словесного описания:
Алгоритм
Открыть дверь
1. Подойти к двери.
2. Вставить ключ в замок.
3. Повернуть ключ в сторону открытия.
4. Вытащить ключ из замка.
5. Потянуть дверь на себя.
Вот это алгоритм, он состоит из шагов. Каждый шаг завершён. И так по шагам ты движешься к конечному результату алгоритма.
По этому словесному описанию можно нарисовать блок-схему, которая изображает всё то же самое.
Так вот словесное описание можно менять.
Меняем описание алгоритма Открыть дверь.
Алгоритм
Открыть дверь
1. Подойти к двери.
2. Отпереть замок.
3. Потянуть дверь на себя.
Алгоритм
Отпереть замок
1. Вставить ключ в замок.
2. Повернуть ключ в сторону открытия.
3. Вытащить ключ из замка.
И вот у нас получилось два алгоритма. То есть это мы сделали ещё до построения блок-схемы. Теперь мы можем построить две блок-схемы: одну - для первого алгоритма; вторую - для второго алгоритма.
А если у тебя словесного описания алгоритма нет, то какой код ты собрался писать? Код чего?
Вот потом на блок-схемах тоже есть свои примочки. Там тоже их можно менять, потому что графический вид показывает какие-то перегруженные моменты, какие-то слишком запутанные моменты, какие-то скрытые ходы, о которых не было известно на этапе словесного описания алгоритма.
Например, если ключ в замке не поворачивается или, наоборот, поворачивается, но ничего не открывается при этом, куда алгоритм должен переходить при этом, на какой шаг? Вот в словесном описании этого нет, а на блок-схеме станет видно. И таким образом можно что-то уточнить, что дополнительно проработать, разработать какие-то разложения.
Потом когда всё ровно и так и так, и в словесном описании и в блок-схеме, тогда ты пишешь псевдокод. Это почти код, но ещё не код. Вот на этом почти коде тоже можно проводить изменения, там уже ты думаешь, что “о! вот здесь можно не четыре строки сделать, а одну только, вроде всё смотрится нормально с одной строкой и ”работает“ ”. Но бывает, что на псевдокоде тоже что-то переделывается, чтобы код выглядел хорошо и был ясен. Это переделывание может затронуть и блок-схему, что-то выявить на ней, что она могла бы быть по-другому нарисована и при этом оставалась эффективна. Так можно с этапа псевдокода вернуться на этап блок-схемы, а с этапа блок-схемы вернуться на этап словесного описания. Короче, с самой первой идеи всё может кардинально измениться. Главное, что оно всегда идёт в сторону улучшения. И вот когда ты всё это проделал, тогда ты уже прямо с псевдокода записываешь код и в коде ты уже ничего не трогаешь и не ищешь, потому что это всё уже проделано на предыдущих этапах сто раз.
Вот такой код получается сходу
>>> def open_door():
... print('подойти к двери...подошёл')
... print('вставить ключ...вставил')
... print('повернуть ключ...повернул')
... print('вытащить ключ...вытащил')
... print('потянуть дверь...потянул')
...
>>> open_door()
подойти к двери...подошёл
вставить ключ...вставил
повернуть ключ...повернул
вытащить ключ...вытащил
потянуть дверь...потянул
>>>
Вот такой код получается после изменения словесного описания
>>> def open_door():
... print('подойти к двери...подошёл')
... unlock()
... print('потянуть дверь...потянул')
...
>>> def unlock():
... print('вставить ключ...вставил')
... print('повернуть ключ...повернул')
... print('вытащить ключ...вытащил')
...
>>> open_door()
подойти к двери...подошёл
вставить ключ...вставил
повернуть ключ...повернул
вытащить ключ...вытащил
потянуть дверь...потянул
>>>
Коды делают одно и то же, но выглядят по-разному. Во втором коде я могу проверить, нужно ли мне процедуру отпирания двери делать или нет. Может, замок уже открыт. Для этого мне нужно добавить только одну строчку с проверкой. В первом же коде мне надо будет редактировать несколько строк, отделять их от других строк, чтобы отменились только они, а не ещё какие-то лишние строки. Но даже это всё делается на этапе словесного описания, а не на этапе написания кода.
tags: develop stages