Автоматизирай Това Начало на книгата

Въведение

"За два часа свърши работа, която на трима от нас ни отнема два дни!" Съквартирантът ми работеше в магазин за електроника. От време на време в магазина получавали електронна таблица с цените на продуктите в други магазини. Екип от три служителя принтирали таблицата и разделяли листовете хартия. След това сравнявали всяка цена и отбелязвали кои продукти се продавали за по-малко при конкуренцията. Обикновено това отнемало няколко дни.

Съквартирантът ми ги видял с разпръснатите по пода листове хартия и казал "Знаете ли, че ако имате таблицата в електронен вид, мога да напиша програма, която да свърши тази работа ?"

След няколко часа той имал кратка програма, която чете цената на конкуренцията от файл, намира продукта в собствената база от данни, и записва коя цена е по-ниска. Все още беше начинаещ в програмирането, така че повечето от това време е прекарал в четене на документцията от книга. Самата програма се изпълнила за няколко секунди. В този ден съквартирантът ми и неговите колеги обядвали по-продължително от обикновено.

Това демонстрира мощта на компютърното програмиране. Комютърът е швейцарско ножче, което може да се използва за безброй задачи. Много хора прекарват часове използвайки мишката и клавиатурата за изпълняване на повтарящи се задачи, в неведение че техният компютър може да свърши тяхната работа за секунди, ако се подадат точните инструкции.

За кого се отнася написаното тук ?

Софтуерът е в основата на много инструменти, които използваме - почти всеки използва социални мрежи, смартфони, работа с офис приложения. Това доведе до нарастващо търсене на хора, които могат да пишат програмен код. Появиха се безброй книги, онлайн помагала и училища за разработчици.

Написаното тук не е за подобни хора. То е за всички останали.

С написаното в този уебсайт няма да станете професионален софтуерен разработчик. Но всеки служител в офис, организатор, преподавател, или който и да е, може да научи основите на програмирането и да автоматизира прости задачи като :

  • Преместване и преименуване на хиляди файлове и разпределянето им по папки
  • Попълване на онлайн формуляри без писане
  • Сваляне на файлове или копиране на информация от Интернет
  • Изпращане на уведомления
  • Попълване и форматиране на Excel таблици
  • Проверяване на имейл и изпращане на подготвени отговори

Тези задачи са прости, но отнемат много време. За тях няма готово софтуерно решение, защото често задачите са тривиални или специфични. От друга страна са необходими малко знания в програмирането, за да накарате компютър да ги върши.

Стил на програмиране

Това не е учебник по програмиране или ръководство. Стилът на написания код понякога не следва добрите практики(например използване на глобални променливи), но това е с цел опростяване на кода. Хората пишат код, който е за еднократна употреба, така че няма смисъл да се отделя време на стила. Много концепции са пропсунати, за да не се усложнява кода. Опитните програмисти могат да посочат много начини за оптимизиране на кода, но целта е да се напише работеща програма с минимални усилия.

Какво е програмиране ?

Филмите и сериалите често представят програмисти, които ожесточено пишат мистериозни поредици от единици и нули. Програмирането обаче е само въвеждане на инструкции, които компютърът да изпълни. Тези инструкции пресмятат числа, променят текст, търсят информация във файлове или комуникират с други компютри.

Всички програми използват няколко основни инструкции. От тях се правят по-сложните. Някои от най-често използваните са(на български) :

  • "Направи това, после направи онова."
  • "Ако това условие е изпълнено - изпълни това действие; иначе - изпълни онова действие."
  • "Направи това точно 27 пъти."
  • "Изпълнявай това действие, докато това условие е изпълнено."

Тези основни инструкции се комбинират за постигане на по-заплетена логика. По-надолу са представени инструкции, наричани програмен код, съставящи проста програма, написана на езика за програмиране Python. Изпълнението започва от най-горе, минава през всеки ред(някои редове се изпълняват само ако дадено условие е изпълнено), докато не се стигне до края(последния ред).

passwordFile = open('SecretPasswordFile.txt')
secretPassword = passwordFile.read()
print('Въведете парола.')
   typedPassword = input()
if typedPassword == secretPassword:
    print('Достъп разрешен')
    if typedPassword == '12345':
        print('Много лесна за отгатване парола.')
  else:
    print('Отказан достъп')

Може да се направи предположение за действието на програмата, дори без никакви познания по програмиране, само с четене на кода. Първо се отваря файлът SecretPasswordFile.txt и от него се прочита тайната парола . След това потребителят се подканя да въведе(с клавиатурата) парола . Паролите се сравняват . Ако те съвпадат на екрана се изписва Достъп разрешен . След това програмата проверява дали паролата е 12345 и подсказва, че тази парола не е добра . Ако паролите не съвпадат се изписва Отказан достъп .

Какво е Python ?

Python е език за програмиране и интерпретатор, който чете код(написан на езика Pyhton) и изпълнява инструкциите. Сваля се безплтано от https://python.org/ и работи на всякакви платформи(Linux, macOS, Windows).

Името Python идва от британската комедийна група Монти Пайтън(Monty Python), а не от змията.

Програмистите не трябва да са много добри в математиката

Най-честата спирачка за започване с програмирането е мисълта, че се изисква много математика. Реалността е друга - голяма част от програмирането не изисква нищо повече от проста аритметика. Всъщност програмирането повече прилича на решаване на Судоку.

За решаване на Судоку трябва да се намерят местата на цифрите от 1 до 9, така че да се срещат по веднъж във всеки ред, колона и вътрешен 3x3 квадрат. В началото няколко цифри са попълнени, а останалите се намират след разсъждения. Отдолу е показано примерно Судоку. Цифрата 5 я има в първия и втория ред, така че не може да се повтаря там. Следователно, ако разгледаме квадратчето в горния десен ъгъл, може да е само на третия ред. Последната колона вече съдържа 5, така че 5 не може да е отдясно на цифрата 6, остава да е отляво. Попълването на един ред, колона или квадратче добавя нови следи за решаването на останалата част на Судоку.

Судоку и решение
Начално положение(отляво) и решението(вдясно). Судоку използва цифри, но няма нужда от математика (Изображение © Wikimedia Commons)

Судоку използва числа, но за решаването му не трябва да се използва математика. Същото важи за програмирането. Писането на програми включва разбиването на проблем на малки едностъпкови операции, точно като решаването на Судоку. По подобен начин се дебъгва програма(тоест - намиране и премахване на грешки) - внимателно се наблюдава какво върши програмата на всяка стъпка и се открива причината за грешката. Колкото повече човек програмира, толкова по-добър става, както при всички останали умения.

С програмирането може да се започне на всяка възраст

Често хората си мислят, че са прекалено стари, за да се научат да програмират. В интернет могат да се срещнат коментари от хора, които мислят, че са закъснели, защото вече са на ... 23 години ! Очевидно това не е "прекалено стар" за изучаване на програмиране. Много хора се научават на много по-късен етап от живота си.

Не е необходимо с програмирането да се започва от дете. Често по медиите се показват програмисти - изключително надарени деца. И аз започнах с програмирането още в училище.

Но в наши дни е много по-лесно да се започне с програмирането, отколкото преди години. Днес има повече книги, по-добри търсачки и много повече онлайн уебсайтове с помагала. Освен това езиците за програмиране се развиват и стават все по-удобни за използване. Поради тези причини сега за няколко седмици може да се научи всичко, което при мен отне години.

По-важна е нагласата на човек - уменията за програмиране се развиват с практика. Никой не е роден като завършен програмист. Начинаещ в програмирането може да стане експерт след достатъчно практикуване.

Програмирането е творчески процес

Програмирането е творческа, съзидателна задача. По това прилича на рисуване, писането, плетене или строене с LEGO. Подобно на започване от бяло платно, програмирането има много ограничения и безкрайни възможности.

Разликата между програмирането и други креативини дейности се крие в ресурсите. Всичко необходимо за програмиране се намира в компютъра, не трябва да се купуват платно, боя, лента, LEGO или други компоненти. Достатъчен е десетгодишен компютър. След написването на програмата тя може да бъде копирана безкрайно много пъти. Изплетен пуловер може да се носи само от един човек едновременно, а полезна програма може да се сподели лесно с целия свят.

Относно съдържанието

Първите глави покриват основите на програмирането с Python. Втората част съдържа различни задачи, които могат да се автоматизират с компютър. Всяка глава от втората част има програми за изучаване. Ето и резюме на всяка глава

Част I : Основи на програмирането с Python

Глава 1 : Основи на Python Въвежда в изразите, основните типове данни и как да се експериментира с код интерактивно.

Глава 2 : Управление на изпълнението Обяснява как програмите решават кои инструкции да изпълнят

Глава 3 : Функции Описва как се дефинират функции, с които кодът се организира и става по-лесен за модифициране

Глава 4 : Списъци Представя Списък като тип данни и обяснява как да се организират данните.

Глава 5 : Речници и структуриране на данните Представя Речник като тип данни и показва по-мощни начини за организиране на данните.

Глава 6 : Работа със символни низове Въвежда в работaта с текстови данни, наричани в Python символни низове(стринг)

Част II : Автоматизиране на задачи

Глава 7 : Регулярни изрази Показва как Python може да променя низове и как да се търси в текст по шаблон

Глава 8 : Валидация на данните Обяснява как програмата може да проверява данните, които потребителят ѝ подава. Данните трябва да са в подходящ формат, за да няма грешки.

Глава 9 : Четене и записване на файлове Обяснява как програма може да прочете съдържанието на файл и да записва информация.

Глава 10 : Организиране на файлове Показва как Python Може да копира, мести, преименува и изтрива голям брой файлове. Архивиране и разархивиране на файлове.

Глава 11 : Дебъгване Показва наличните инструменти за намиране и отстраняване на грешки.

Глава 12 : Извличане на данни от интернет Показва как програма може автоматично да сваля уеб страници и да проверява съдържанието им. Това се нарича извличане на данни.

Глава 13 : Работа с електронни таблици Обяснява програмната обработка на Excel таблции, за да не се налага да се отварят ръчно. Това е полезно при анализиране на стотици или хиляди документи.

Глава 14 : Работа с Google Spreadsheets Показва как да се прочетат и редактират Google Sheets, популярно онлайн приложение

Глава 15 : Работа с PDF и Word документи Програмно прочитане на Word и PDF документи.

Глава 16 : Работа с данни в CSV и JSON формат Продължение на обработката на документи, този път CSV и JSON файлове.

Глава 17 : Стартиране на програми и планиране на задачи Обяснява как Python програмите работят с часове и дати. Също така как компютърът да изпълни определени задачи в зададен час. Показва как Python програма може да стартира други програми.

Глава 18 : Изпращане на имейли и текстови съобщения Обяснява как програма може да изпрати имейли или текстови съобщения.

Глава 19 : Обработка на изображения Обяснява как могат да се обработват изображения, например JPEG или PNG файлове.

Глава 20 : Контролиране на мишката и клавиатурата Обяснява как могат да се контролират мишката и клавиатурата, за да се автоматизират кликанията и натискането на клавишите.

Допълнение А : Инсталиране на допълнителни модули Показва как към Python може да се добавят допълнителни модули и възможности.

Допълнение Б : Стартиране на програми Показва как да се пускат Python програми без редактор.

Допълнение В : Отговори на упражненията Отговори и допълнения към упражненията, които са в края на всяка глава.

Сваляне и инсталиране на Pyhton

Python може да се свали от https://python.org/downloads/. Примерите в книгата са предвидени да работят с последната версия на Python.

ВНИМАНИЕ

Необходима е версия на Python 3(например 3.8.1). Програмите тук са написани за Python 3 и може да не работят правилно на Python 2!

На посочената страница могат да се намерят инсталации на Python за всякакви операционни системи, във варианти за 32 и 64 битови компютри. Ако компютърът е от 2007 година или по-нов най-вероятно е 64 битов. Ето как може да се провери със сигурност :

  • При използване на Windows - StartControl PanelSystem и се проверява дали System Type е 64 или 32 бита
  • При macOS - отваря се Apple менюто, оттам се избира About This MacMore InfoSystem ReportHardware. Там се проверява полето Processor Name. Стойности Intel Core Solo или Intel Core Duo означават 32 битова машина. Всичко останало(включително Intel Core 2 Duo) означава 64 бита.
  • При Linux(Ubuntu) - в Терминал се изпълнява командата uname -m. Командата принтира i686 за 32 бита или x86_64 за 64 бита.

За Windows се сваля инсталационен файл(името завършва с .msi или .exe) и се отваря с двоен клик. Следват се показаните на екрана инструкции :

  1. Избира се Install for All Users(Инсталирай за всички потребители) и се клика на Next
  2. На следващите екрани се избира директно Next

За macOS се сваля инсталационен файл(името завършва с .dmg или .pkg) за съответната версия и се отваря с двоен клик. Следват се показаните на екрана инструкции :

  1. DMG пакета се отваря в нов прозорец, в него се прави двоен клик на файла Python.mpkg. Може да се наложи въвеждането на паролата на акаунта.
  2. На следващите екрани се избира директно Continue и Agree за приемане на лиценза.
  3. На последния прозорец се избира Install

За Linux(Ubuntu) Python се инсталира от терминала със следните стъпки:

  1. Стартира се терминал.
  2. Въвежда се командата sudo apt-get install python3 .
  3. Въвежда се командата sudo apt-get install idle3 .
  4. Въвежда се командата sudo apt-get install python3-pip .

Сваляне и инсталиране на Mu

Python програмите се изпълняват от Python интерпретатора. Самото писане на програмите става в редактори, например Mu editor. Той може да се свали от https://codewith.mu/

На Windows и macOS сваления инсталатор се стартира с двоен клик. При macOS това отваря прозорец, в който трябва да се премести иконата на Mu в папката Application. На Ubuntu Linux Mu се инсталира като отделен Python пакет. Повече подробности има в страницата за сваляне, секцията Python Package, след кликане на бутона Instruction.

Стартиране на Mu

След инсталиране, Mu може да се стартира по следния начин :

  • На Windows 7 или по-нов - клик на Start менюто, въвеждане на Mu в полето за търсене и избирането му.
  • На macOS се отваря Finder, кликва се на Applications и от там се избира mu-editor.
  • На Ubuntu Linux се избира ApplicationsAccessoriesTerminal и там се въвежда python3 -m mu .

При първото стартиране на Mu се показва Select Mode прозорец, в който да се избере режим за работа. В него има изредени опции като BBC micro:bit, CircuitPython, ESP MicroPython, Pygame Zero, Python 3 и Web. Избира се Python 3. Този режим винаги може да се смени по-късно с натискане на бутона Mode, който се намира в горната част на прозореца на Mu.

БЕЛЕЖКА

Необходима е версия 1.1.0 или по-нова на Mu, за да могат да се инсталират допълнителни модули, които са използвани в примерите. По време на писането версия 1.1.0 е все още в разработка и се сваля от отделен линк на страницата за сваляне.

Стартиране на IDLE

Примерите са писани и изпълнявани с Mu. Това не означава, че не може да се използва всеки друг редактор за писане на Python код. Инсталирането на Python добавя и IDLE (Integrated Development and Learning Environment). IDLE може да се използва за редактор, ако има проблем с инсталирането или стартирането на Mu. Стартирането на IDLE става по следния начин:

  • На Windows 7 или по-нов - клик на Start менюто, въвеждане на IDLE в полето за търсене и избирането на IDLE (Python GUI).
  • На macOS се отваря Finder, кликва се на Applications, избира се Python 3.8 и след това се клика на иконата на IDLE.
  • На Ubuntu Linux се избира ApplicationsAccessoriesTerminal и там се въвежда idle3. (Може да има и друга възможност - клик на Applications в горната част на дисплея, от там се избира Programming и след това се клика на IDLE 3)

Интерактивна конзола(Shell)

Основният прозорец на Mu се нарича файлов редактор. Интерактивната конзола(наричана още обвивка или shell) се отваря с натиксане на бутона REPL. Конзолата е програма, която позволява въвеждане на инструкции, подобно на Terminal или Command Prompt на macOS и Windows. Конзолата на Python позволява въвеждането на инструкции, които се изпълняват от интерпретатора на Python. Компютърът прочита въведените инструкции и веднага ги изпълнява.

В Mu интерактивната конзола се намира в долната част на прозореца, в която пише следното :

Jupyter QtConsole 4.4.3
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.6.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

При стартиране на IDLE интерактивната конзола е първият прозорец, който се появява. Прозорецът е почти празен, с изключение на текста, който изглежда нещо като :

Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>

In [1]: и >>> са символи, подканящи потребителят да въведе текст(prompt). На практика потребителят може да пише веднага след тях. Примерите използват >>> текст, защото е по-често срещан. При използване на Python през Terminal или Command Prompt се показва >>>. Вариантът In [1]: е измислен от Jupiter Notebook, друг разпространен редактор на Python Код

Например след въвеждане на следното в интерактивната конзола:

>>> print('Hello, world!')

След написването на този ред се натиска ENTER и интерактивната конзола показва следния отговор:

>>> print('Hello, world!')
Hello, world!

Току-що компютърът получи инструкция и направи точно каквото му беше казано !

Инсталиране на допълнителни външни модули

Някои Python програми изискват използването на модули. Някои от тези модули идват с инсталирането на Python, но други модули са създадени от външни разработчици. Допъление А съдържа подробни инструкции за инсталиране на външни модули чрез използване на pip(при Windows) или pip3(при Linux или macOS).

Къде да потърсим помощ

Програмистите предпочитат да се учат чрез търсене на отговори в интернет. Това е доста по-различно от начина на учене на повечето хора - преподавател, който изнася лекции на живо и може да отговаря на въпроси. Най-хубавото на използването на интернет е, че там има много хора, които могат да отговорят на въпрос. Всъщност има отговори на много от въпросите, които само чакат да бъдат намерени. При наличие на съобщение за грешка или проблем с кода намирането на решение е по-лесно, отколкото хората си мислят, защото други хора са имали същия проблем.

Например, нека нарочно предизвикаме грешка, като въведем '42' + 3 в интерактивната конзола. Няма значение какво точно означава тази инструкция, важен е резултатът, който трябва да изглежда по подобен начин :

>>> '42' + 3
Traceback (most recent call last):
   File "<pyshell#0>", line 1, in <module>
      '42' + 3
TypeError: can only concatenate str (not "int") to str
>>>

Python не може да разбере инструкцията и показва съобщение за грешка ➋. Над нея има изписани ➊ точната инструкция и номер на ред, които объркват Python. Търсенето в интернет помага за разбирането на грешката. При написването на “TypeError: Can’t convert ‘int’ object to str implicitly” в интернет търсачка веднага излизат много линкове, които описват какво означава грешката и какво я причинява.

Търсене в интернет на грешката
Резултатите при търсенето на грешката могат да са много полезни

Често се намира някой, който вече е имал точно същия проблем или въпрос, а някой вече е отговорил. Няма човек, който да знае всичко за програмирането, така че е нормално всеки софтуерен разработчик да търси отговори на технически въпроси.

Задаване на интелигентни въпроси

Понякога търсенето онлайн не намира отговор. В такива случаи може да се зададе нов въпрос в подходящ уеб форум като Stack Overflow или в "learn programming" subreddit, а също така из групите за програмиране във Фейсбук. Трябва да се има предвид, че добре формулираните въпроси спомагат за получването на качествен отговор. При задаване на програмистки въпроси е добре да се спазват следните съвети :

  • Включване на обяснение какво се цели, не само какво е направено до момента. Така помагащият може да посочи дали насоката е правилна.
  • Обяснение кога се получава грешката. Дали е веднага при пускане на програмата или след някое специфично действие ?
  • Целият текст на грешката може да се копира и сложи в https://pastebin.com или https://gist.github.com/

    В тези сайтове е много лесно да се сподели голямо количество код, без да се загуби форматирането. Те генерират URL, който може лесно да се сложи в имейл или форумен пост. Ето примерни части от код https://pastebin.com/SzP2DbFx/ и https://gist.github.com/asweigart/6912168/

  • Описание на опитите за решаване на проблема. Това показва на хората, че е отделено време в обмисляне и решаване на проблема.
  • Споменаване на точната версия на Python, който се използва.(Има някои много важни разлики между версия 2 и версия 3 на Python интерпретатора). Също така е от значение операционната система и версията ѝ.
  • Обяснение на промяната в кода, която води до грешката, ако има такава.
  • Дали грешката се появява всеки път или само при специфични обстоятелства.

Важно е винаги да се спазва добрия етикет при общуване онлайн. Без излишно използване на главни букви или грубо отношение към помагащите.

Повече информация относно начина на търсене на помощ има на https://autbor.com/help/(на английски). Много от често задаваните въпроси за програмирането имат отговори на адрес https://www.reddit.com/r/learnprogramming/wiki/faq/. Подобен списък с въпроси относно кариерата като софтуерен разработчик има на https://www.reddit.com/r/cscareerquestions/wiki/index/

Авторът на оригиналната книга на английски също обича да помага на хората. Той пише помагала в неговия блог https://inventwithpython.com/blog/, също така приема въпроси на al@inventwithpython.com. За връзка с екипа на българската адаптация може да се използва avtomatizirane@gmail.com. Все пак най-бързо отговор може да се получи след задаване на въпроса в подходящ интернет форум.

Обобщение

За повечето хора компютърът е просто уред, а не инструмент. Всъщност той е един от най-мощните инструменти в модерния свят, който се управлява с програмиране. Програмирането не е като хирургията - нормално е начинаещите да експериментират и да допускат грешки. Това прави ученето на програмирането забавно.

Съдържанието е предназначено за хора, които нямат никакви познания за програмиране. Показани са много неща, но винаги има неотговорени въпроси. Умението за задаване на въпроси и как да се търсят отговори е безценно по време на пътешествието с програмирането.

Започваме !

Подкрепете автора чрез покупка на оригиналната книга от No Starch Press или Amazon.