Найти - Пользователи
Полная версия: Алгоритм для любителя "кодировать".
Начало » Python для новичков » Алгоритм для любителя "кодировать".
1 2 3
Vladej
py.user.next
Это не моя формула, это общеизвестная формула, которую ты прочитал бы в книжках
хорошо, пусть так. А теперь представьте, все книги сгорели. Пепел. Да и память ни к чёрту. На днях выхожу из своего подъезда на улицу, и меня сразу “встречают” два авто. Оба едут друг за другом. Один - мицубиси, другой - тойота. У первого номер 518, у второго - 950. Оба едут в одном направлении - из дворов на трассу.
Наберите мне, пожалуйста:
>>> a = мицубиси
>>> b = тойота
как найти и определить, что у них есть общего, уж коли друг за другом погнались? Хотя, вы в чём-то правы…

https://youtu.be/DXPlDlv2Dpo?t=844

заметьте, окно меняет
ZerG
Vladej
А теперь представьте, все книги сгорели
А теперь представьте - все олигофрены разучились писать на форумах по программированию?
Вы думаете вы тут первый кто решил что тысячи программистов неправы а вы щас чик чик и в дамках по новым современным технологиям?
это до первого поворота как говориться..
Vladej
ZerG
Вы думаете вы тут первый кто решил что тысячи программистов неправы
я должен на это отвечать?
py.user.next
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
py.user.next
Vladej
Есть подозрение, что прежде, чем делать обрезку участка, делается клон экрана монитора.
Vladej
Последний в видео вариант - это клавиша PrntScr.
Там у тебя работа с окном идёт, а PrintScreen делает снимок экрана, а не окна. Конечно, они по-разному работают. У окна можно получить координаты и размеры, а у контекстного меню размеры не получишь. Поэтому окно можно снять по его координатам и размерам, в то время как контекстное меню как бы не существует. Сначала просто на окне всё отладь, чтобы для окна всё правильно снимало и вырезало.
Vladej
я таки проглотил слона. Получилось! В отпуске занялся ремонтом кухни, голова остыла. Посмотрел по-новому на код. В итоге кухня отремонтирована, код заработал как надо, и в понедельник на работу. Обожаю вас. Спасибо китайцу https://github.com/SeptemberHX/screenshot
добавил import keyboard, отсёк ненужное (как советовал py.user.next), добавил несколько строк от себя, сделал пару-тройку перестановок в коде, и по-не-слась… все модальные окна фотографируются, раз за разом, не перезапуская код. Теперь можно со спокойной душой приступать к работе после трёхнедельного отпуска. Все задачи выполнены. Двигаемся дальше, космос большой.
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