Глава 1. Първи стъпки в програмирането
В тази глава ще разберем какво е програмирането в неговата същина. Ще се запознаем с идеята за програмни езици и ще разгледаме средите за разработка на софтуер (Integrated Development Environment - накратко IDE) и как да работим с тях, в частност с PyCharm. Ще напишем и изпълним първата си програма на програмния език Python, а след това ще се упражним с няколко задачи: ще създадем конзолна програма, графично приложение и уеб приложение. Ще се научим как да проверяваме за коректност решенията на задачите от тази книга в Judge системата на СофтУни и накрая ще се запознаем с типичните грешки, които често се допускат при писането на код и как да се предпазим от тях.
Видео
Какво означава "да програмираме"?
Да програмираме означава да даваме команди на компютъра какво да прави, например "да изсвири някакъв звук", "да отпечата нещо на екрана" или "да умножи две числа". Когато командите са няколко една след друга, те се наричат компютърна програма (или скрипт). Текстът на компютърните програми се нарича програмен код (или сорс код, или за по-кратко код).
Компютърни програми
Компютърните програми представляват поредица от команди, които се изписват на предварително избран език за програмиране, например Python, C#, Java, JavaScript, Ruby, PHP, C, C++, Swift, Go или друг. За да пишем команди, трябва да знаем синтаксиса и семантиката на езика, с който ще работим, в нашия случай Python. Затова ще се запознаем със синтаксиса и семантиката на езика Python, и с програмирането като цяло в настоящата книга, изучавайки стъпка по стъпка писането на код, от по-простите към по-сложните програмни конструкции.
Алгоритми
Компютърните програми обикновено изпълняват някакъв алгоритъм. Алгоритмите са последователност от стъпки, необходими за да се свърши определена работа и да се постигне някакъв очакван резултат, нещо като "рецепта". Например, ако пържим яйца, ние изпълняваме някаква рецепта (алгоритъм): загряваме мазнина в някакъв съд, чупим яйцата, изчакваме докато се изпържат, отместваме от огъня. Аналогично, в програмирането компютърните програми изпълняват алгоритми - поредица от команди, необходими, за да се свърши определена работа. Например, за да се подредят поредица от числа в нарастващ ред, е необходим алгоритъм, примерно да се намери най-малкото число и да се отпечата, от останалите числа да се намери отново най-малкото число и да се отпечата, и това се повтаря докато числата свършат.
За удобство при създаването на програми, за писане на програмен код (команди), за изпълнение на програмите и за други операции, свързани с програмирането, ни е необходима и среда за разработка (IDE), например PyCharm.
Езици за програмиране, компилатори, интерпретатори и среди за разработка
Езикът за програмиране е изкуствен език (синтаксис за изразяване), предназначен за задаване на команди, които искаме компютъра да прочете, обработи и изпълни. Чрез езиците за програмиране пишем поредици от команди (програми), които задават какво да прави компютъра. Изпълнението на компютърните програми може да се реализира с компилатор или с интерпретатор.
Компилаторът превежда кода от програмен език на машинен код, като за всяка от конструкциите (командите) в кода избира подходящ, предварително подготвен фрагмент от машинен код и междувременно проверява за грешки в текста на програмата. Заедно компилираните фрагменти съставят програмата в машинен код, както я очаква микропроцесора на компютъра. След като е компилирана програмата, тя може да бъде директно изпълнена от микропроцесора в кооперация с операционната система. При компилируемите езици за програмиране компилирането на програмата се извършва задължително преди нейното изпълнение и по време на компилация се откриват синтактичните грешки (грешно зададени команди). С компилатор работят езици като C++, C#, Java, Swift и Go.
Някои езици за програмиране не използват компилатор, а се интерпретират директно от специализиран софтуер, наречен "интерпретатор". Интерпретаторът е "програма за изпълняване на програми", написани на някакъв програмен език. Той изпълнява командите на програмата една след друга, като разбира не само от единични команди и поредици от команди, но и от другите езикови конструкции (проверки, повторения, функции и т.н.). Езици като PHP, Python и JavaScript работят с интерпретатор и се изпълняват без да се компилират. Поради липса на предварителна компилация, при интерпретеруемите езици грешките се откриват по време на изпълнение, след като програмата започне да работи, а не предварително.
Като цяло компилируемите езици работят по-бързо от интерпретеруемите. Разликата в скоростта на изпълнение на програмите понякога е минимална, а понякога е огромна. При интерпретеруемите езици за програмиране по-бързо можем да променяме кода и да го изпълняваме отново (например за да отстраним грешка), докато компилируемите езици са по-бавни след промяна на кода заради нуждата от компилация.
Средата за програмиране (Integrated Development Environment - IDE, интегрирана среда за разработка) е съвкупност от традиционни инструменти за разработване на софтуерни приложения. В средата за разработка пишем код, компилираме и изпълняваме програмите. Средите за разработка интегрират в себе си текстов редактор за писане на кода, език за програмиране, компилатор или интерпретатор и среда за изпълнение за изпълнение на програмите, дебъгер за проследяване на програмата и търсене на грешки, инструменти за дизайн на потребителски интерфейс и други инструменти и добавки.
Средите за програмиране са удобни, защото интегрират всичко необходимо за разработката на програмата, без да се напуска средата. Ако не ползваме среда за разработка, ще трябва да пишем кода в текстов редактор, да го компилираме с команда от конзолата, да го изпълняваме с друга команда от конзолата и да пишем още допълнителни команди, когато се налага, и това ще ни губи време. Затова повечето програмисти ползват IDE в ежедневната си работа.
За програмиране на езика Python най-често се ползва средата за разработка PyCharm, която се разработва и разпространява от JetBrains, и може да се изтегли от: https://www.jetbrains.com/pycharm. Ето как изглежда средата PyCharm в действие:
Алтернативи на PyCharm за писане на Python са Visual Studio Code (https://code.visualstudio.com), Atom (https://atom.io), Eclipse for Python (https://www.eclipse.org) заедно с приставката PyDev (https://pydev.org) и други. В настоящата книга ще използваме средата за разработка PyCharm.
Алтернатива на настолните среди за разработка (IDE) са онлайн средите за Python програмиране като Repl.it и PythonAnywhere. Те вършат отлична работа за тестване на кратки примери или когато нямаме възможност да инсталираме локално среда за разработка и Python интерпретатор или когато искаме лесно да споделим кода си с колеги. Ето пример как се изпълнява Python код в Repl.it:
Езици от ниско и високо ниво, среди за изпълнение (Runtime Environments)
Програмата в своята същност е набор от инструкции, които карат компютъра да свърши определена задача. Те се въвеждат от програмиста и се изпълняват безусловно от машината.
Съществуват различни видове езици за програмиране. С езиците от най-ниско ниво могат да бъдат написани самите инструкции, които управляват процесора, например с езика "assembler". С езици от малко по-високо ниво като C и C++ могат да бъдат създадени операционна система, драйвери за управление на хардуера (например драйвер за видеокарта), уеб браузъри, компилатори, двигатели за графика и игри (game engines) и други системни компоненти и програми. С езици от още по-високо ниво като C#, Python и JavaScript се създават приложни програми, например програма за четене на поща или чат програма.
Езиците от ниско ниво управляват директно хардуера и изискват много усилия и огромен брой команди, за да свършат единица работа. Езиците от по-високо ниво изискват по-малко код за единица работа, но нямат директен достъп до хардуера. На тях се разработва приложен софтуер, например уеб приложения и мобилни приложения.
Болшинството софтуер, който използваме ежедневно, като музикален плеър, видеоплеър, GPS програма и т.н., се пише на езици за приложно програмиране, които са от високо ниво, като Python, JavaScript, C#, Java, C++, PHP и др.
Python е интерпретеруем език, а това означава, че пишем команди, които се изпълняват директно след стартиране на програмата. Това означава, че ако сме допуснали грешка при писането на код, ще разберем едва след стартиране на програмата и достигането до грешната команда. Тук на помощ идват IDE-тата, като PyCharm, които проверяват кода ни, още докато пишем и ни алармират за евентуални проблеми. Когато сме написали кода си и искаме да го тестваме, можем да го запаметим във файл с разширение .py
, примерно example.py
.
Python интерпретатор: инсталация и използване
За да програмираме на езика Python, първо трябва да си инсталираме Python интерпретатор. Той изпълнява Python командите и програмите и е абсолютно необходим, ако ще пишем на езика Python на нашия компютър.
Инсталация на Python интерпретатора
Инсталацията на Python е много лесна. Отиваме на https://python.org/downloads и изтегляме последната версия за нашата платформа:
В Windows среда инсталацията е стандартната с [Next], [Next] и [Finish]. В Linux се използва пакетния инсталатор, примерно sudo apt-get install python3
.
Използвайте Python версия 3.x или по-висока. Python 2 е остаряла технология и макар и да е достъпен по подразбиране в много системи, той е проблемен и много от примерите от тази книга няма да работят. |
Стартиране на Python интерпретатора
След като Python интерпретаторът е вече инсталиран, можем да го стартираме и да си поиграем с него. В Windows среда използвайте [Start] менюто и намерете току-що инсталираното приложение примерно “Python 3.7 (64-bit)”. В Linux / MacOS среда напишете на конзолата командата python3
. Ето как би могъл да изглежда Python интрепретаторът в Windows среда:
Работа с Python интерпретатора
Python е интерпретатор и с него може се работи в команден режим: пишем команда и той я изпълнява и връща отговора. Най-простата команда е да накараме Python да пресметне числен израз, примерно 2+3
:
Виждаме, че отговорът е правилен: 5
.
Нека пробваме още няколко команди: да запишем стойност 5
в променлива с име a
и да отпечатаме след това стойността 2 * a
:
Поиграйте си сами с Python интерпретатора. Опитайте да изчислите 1234567890 234567890 34567890. Успяхте ли? Опитайте с грешна команда (например напишете си името). Опитайте да пресметнете 2 ** 20
и помислете какво ли е това. Опитайте да отпечатате текста “Здравей питоне, как си?” с командата print("some text")
. Получава ли се?
Компютърни програми
Както вече споменахме, програмата е последователност от команди, иначе казано тя описва поредица от пресмятания, проверки, повторения и всякакви подобни операции, които целят постигане на някакъв резултат.
Програмата се пише в текстов формат, а самият текст на програмата се нарича сорс код (source code). Той се запазва във файл с разширение .py
(например main.py
), след което може да се изпълни през вашия браузър или през конзолата с помощта на Python Shell. При скриптови и интерпретеруеми езици, като JavaScript, Python и PHP, сорс кода се изпълнява постъпково от интерпретатор.
Пример: програма, която печата "Hello"
Да започнем с много прост пример за кратка Python програма. Нашата първа програма ще отпечата думата “Hello” ето така:
print("Hello")
Можем да я изпълним като я напишем в Python интерпретатора:
Пример: програма, която свири музикалната нота "ла"
Нашата следваща програма ще се състои от единична Python команда, която свири музикалната нота "ла" (432 херца) с продължителност половин секунда (500 милисекунди):
import winsound
winsound.Beep(432, 500)
В Windows среда ще чуем звук. Уверете се, че звукът на компютъра ви е пуснат. В Linux и macOS примерът няма да проработи.
Пример: програма, която свири поредица от музикални ноти
Можем да усложним предходната програма, като зададем за изпълнение повтарящи се в цикъл команди за свирене на поредица от ноти с нарастваща височина:
import winsound
for i in range(200, 4000, 200):
winsound.Beep(i, 300)
В горния пример караме компютъра да свири една след друга за много кратко (по 300 милисекунди) всички ноти с височина 200, 400, 600 и т.н. херца до достигане на 4000 херца. Резултатът от програмата е свирене на нещо като мелодия.
Как работят повторенията (циклите) в програмирането ще научим в главата "Цикли", но засега приемете, че просто повтаряме някаква команда много пъти.
Пример: програма, която конвертира от левове в евро
Да разгледаме още една проста програма, която прочита от потребителя някаква сума в лева (цяло число), конвертира я в евро (като я разделя на курса на еврото) и отпечатва получения резултат. Това е програма от три поредни команди. Въведете ги и ги изпълнете една след друга:
leva = int(input())
euro = leva / 1.95583
print(euro)
Ето как би могъл да изглежда резултатът от горната серия команди:
Разгледахме три примера за компютърни програми: единична команда, серия команди в цикъл и поредица от три команди. Нека сега преминем към по-интересното: как можем да пишем собствени програми на Python и как можем да ги изпълняваме?
Как да напишем конзолна програма?
Нека преминем през стъпките за създаване и изпълнение на компютърна програма, която чете и пише своите данни от и на текстова конзола (прозорец за въвеждане и извеждане на текст). Такива програми се наричат "конзолни". Преди това, обаче, трябва първо да си инсталираме и подготвим средата за разработка, в която ще пишем и изпълняваме Python програмите от тази книга и упражненията към нея.
Среда за разработка (IDE)
Както вече стана дума, за да програмираме ни е нужна среда за разработка - Integrated Development Environment (IDE). Това всъщност е редактор за програми, в който пишем програмния код и можем да го изпълняваме, да виждаме грешките, да ги поправяме и да стартираме програмата отново.
- За програмиране на Python използваме средата PyCharm за операционните системи Windows, Linux или macOS.
- Ако програмираме на Java, подходящи са средите IntelliJ IDEA, Eclipse или NetBeans.
- Ако ще пишем на C#, можем да използваме средата Visual Studio.
Инсталация на PyCharm Community
Започваме с инсталацията на интегрираната среда PyCharm Community (в нашия пример ще използваме версия 2018, актуална към октомври 2018 г.).
Community версията на PyCharm се разпространява безплатно от JetBrains и може да бъде изтеглена от: https://www.jetbrains.com/pycharm/download. Инсталацията е типичната за Windows с [Next], [Next] и [Finish]. Има и Linux версия.
В следващите редове подробно са описани стъпките за инсталация на PyCharm (версия Community 2018). След като свалим инсталационния файл и го стартираме, се появява следния екран:
Натискаме бутона [Next], след което ще видим прозореца долу:
Зарежда се прозорец с инсталационния панел на PyCharm:
Слагаме отметка на пряк път в зависимост от нашата операционна система, [.py] и [Download and install JRE x86 by JetBrains], след което натискаме бутона [Next]:
Натискаме бутона [Install].
След като PyCharm се инсталира, ще се появи информативен екран, където можем да сложим отметка ([Run PyCharm ...]), за да го стартираме. След старта на PyCharm излиза екран като този по-долу:
Това е всичко. Готови сме за работа с PyCharm.
По-стари версии на PyCharm
Можем да използваме и по-стари версии на PyCharm (например версия 2016 или 2012), но не е препоръчително, тъй като в тях не се съдържат някои от по-новите възможности за разработка и не всички примери от книгата ще тръгнат.
Онлайн среди за разработка
Съществуват и алтернативни среди за разработка онлайн, директно в нашия уеб браузър. Тези среди не са много удобни, но ако нямате друга възможност, може да стартирате обучението си с тях и да си инсталирате PyCharm по-късно. Ето някои линкове:
- За езика Python сайтът Tutorials Point позволява писане на код и изпълнението му онлайн: https://www.tutorialspoint.com/online_python_ide.php.
- Друга добра онлайн среда за писане и изпълнение на Python код е Repl.it: https://repl.it/languages/python3.
- За Java можем да използваме следното онлайн Java IDE: https://www.compilejava.net.
- За JavaScript можем да пишем JS код директно в конзолата на даден браузър с натискане на [F12].
Проекти в PyCharm
Преди да започнем да работим с PyCharm, нека се запознаем с понятието PyCharm Project.
PyCharm Project представлява "проекта", върху който работим. В началото това ще са нашите конзолни програми, които ще се научим да пишем с помощта на настоящата книга, ресурсите към нея и в курса Programming Basics в SoftUni. При по-задълбочено изучаване и с времето и практиката, тези проекти ще преминат в апликации, уеб приложения и други разработки. Проектът в PyCharm логически групира множество файлове, изграждащи дадено приложение или компонент.
Един Python проект съдържа един или няколко Python сорс файла (.py), конфигурационни файлове и други ресурси. Във всеки Python сорс файл може да има един или повече класове и функции. В класовете има функции (действия), а те се състоят от поредици от команди. Изглежда сложно, но при големи проекти такава структура е много удобна и позволява добра организация на работните файлове.
Пример: създаване на конзолна програма "Hello Python"
Да се върнем на нашата конзолна програма. Вече имаме PyCharm и можем да го стартираме. След това създаваме нов проект: [Create New Project].
Задаваме смислено име на проекта с нашата програма, например FirstStepsInProgramming
:
PyCharm ще създаде за нас празен проект, в който може да добавяме Python файлове. Добавяме нов Python файл ([File] или десен бутон на проекта ни -> [New] -> [Python File]) и му задаваме смислено име, например HelloPython.py
.
Можем да настроим версията и местоположението на Python интерпретатора, който ще бъде използван. Задължително е да имаме Python интерпретатор, ако ще изпълняваме написаните Python програми. Можем да имаме повече от един Python версии на един и същ компютър. За леснота, в началото, най-добре е да имате само един Python, последна версия, и да ползвате само него навсякъде. Ако нямате инсталиран Python, инсталирайте го преди да продължите.
Писане на програмен код
Писането на Python код не изисква никаква допълнителна подготовка от това, което вече направихме - да си създадем файл с разширение .py
. Затова директно пристъпваме към изписването на първия ред код. Изписваме следната команда:
print('Hello Python')
Ето как би могла да изглежда нашата програма в PyCharm:
Командата print('Hello Python')
на езика Python означава да изпълним отпечатване (print(…)
) върху конзолата и да отпечатаме текстово съобщение Hello Python
, което трябва да оградим с кавички, за да поясним, че това е текст.
Тази команда е много типична за програмирането: извикваме функцията print(…)
и ѝ подаваме като параметър текстов литерал 'Hello Python'
.
Стартиране на програмата
За стартиране на програмата натискаме [Ctrl + Shift + F10] или десен бутон - [Run]. Ако няма грешки, програмата ще се изпълни. Резултатът ще се изпише на конзолата:
Всъщност, изхода от програмата е следното текстово съобщение:
Hello Python
Съобщението "Process finished with exit code 0" се изписва допълнително на най-долния ред на конзолата на PyCharm след като програмата завърши, за да ни покаже, че програмата се е изпълнила без грешки.
Тестване на програмата в Judge системата
Тестването на задачите от тази книга е автоматизирано и се осъществява през Интернет, от сайта на Judge системата: https://judge.softuni.org. Оценяването на задачите се извършва на момента от системата. Всяка задача минава поредица от тестове, като всеки успешно преминат тест дава предвидените за него точки. Тестовете, които се подават на задачите, са скрити.
Горната програма може да тестваме тук: https://judge.softuni.org/Contests/Practice/Index/1046#0. За целта поставяме целия сорс код на програмата в черното поле и избираме Python code, както е показано тук:
Изпращаме решението за оценяване с бутона [Изпрати] (или [Submit]). Системата връща резултат след няколко секунди в таблицата с изпратени решения. При необходимост може да натиснем бутона за обновяване на резултатите [Refresh], който се намира в горната дясна част на таблицата с изпратени за проверка решения:
В таблицата с изпратените решения Judge системата ще покаже един от следните възможни резултати:
- Брой точки (между 0 и 100), когато предаденият код се компилира успешно (няма синтактични грешки) и може да бъде тестван.
- При вярно решение всички тестове са маркирани в зелено и получаваме 100 точки.
- При грешно решение някои от тестовете са маркирани в червено и получаваме непълен брой точки или 0 точки.
- При грешна програма ще получим съобщение за грешка по време на компилация.
Как да се регистрирам в SoftUni Judge?
Използваме идентификацията си (Username + Password) от сайта softuni.bg. Ако нямате СофтУни регистрация, направете си. Отнема само минутка - стандартна регистрация в Интернет сайт.
Тествайте програмите за свирене на ноти
Сега, след като вече знаете как да изпълнявате програми, можете да тествате примерните програми по-горе, които свирят музикални ноти. Позабавлявайте се, пробвайте тези програми. Пробвайте да ги промените и да си поиграете с тях. Заменете командата print('Hello Python')
с команда winsound.Beep(432, 500)
, като най-отгоре добавите import winsound
, и стартирайте програмата. Проверете дали ви е включен звука на компютъра и дали е усилен. Ако работите в онлайн среда за разработка, няма да чуете звук, защото програмата не се изпълнява на вашия компютър, а някъде другаде. Пакетът winsound
може да не работи под някои операционни системи като Linux и macOS.
Типични грешки в Python програмите
Една от често срещаните грешки при начинаещите е бъркането на главни и малки букви, а те имат значение при извикване на командите и тяхното правилно функциониране. Ето пример за такава грешка:
Print('Hello Python')
В горния пример Print
е изписано грешно и трябва да се поправи на print
.
В езика Python не се слага точка и запетая (;) в края на командите. Командите се разделят една от друга чрез нов ред или индентация (отстъп). |
Липсваща кавичка или липса на отваряща или затваряща скоба също може да се окажат проблеми. Проблемът води до неправилно функциониране на програмата или въобще до нейното неизпълнение. Този пропуск трудно се забелязва при по-обемен код. Ето пример за грешна програма:
print('Hello Python)
Тази програма ще даде грешка и кода ще бъде подчертан, за да се насочи вниманието на програмиста към грешката, която е допуснал (пропуснатата затваряща кавичка):
Какво научихме от тази глава?
На първо място научихме какво е програмирането - задаване на команди, изписани на компютърен език, които машината разбира и може да изпълни. Разбрахме още какво е компютърната програма - тя представлява поредица от команди, подредени една след друга. Запознахме се с езика за програмиране Python на базисно ниво и как да създаваме прости конзолни програми с PyCharm. Проследихме и структурата на програмния код в езика Python. Видяхме как да печатаме с функцията print(…)
и как да стартираме програмата си с [Ctrl + Shift + F10]. Научихме се да тестваме кода си в SoftUni Judge системата.
Добра работа! Да се захващаме с упражненията. Нали не сте забравили, че програмиране се учи с много писане на код и решаване на задачи? Да решим няколко задачи, за да затвърдим наученото.
Упражнения: първи стъпки в програмирането
Добре дошли в упражненията. Сега ще напишем няколко конзолни програми, с които ще направим още няколко първи стъпки в програмирането, след което ще покажем как можем да програмираме нещо по-сложно - програми с графичен и уеб потребителски интерфейс.
Задача: конзолна програма “Expression”
Да се напише конзолна Python програма, която пресмята и отпечатва стойността на следния числен израз:
(3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3
Забележка: не е разрешено да се пресметне стойността предварително (например с Windows Calculator).
Насоки и подсказки
Създаваме нов Python файл с име expression. След това трябва да напишем кода, който да изчисли горния числен израз и да отпечата на конзолата стойността му. Подаваме горния числен израз в скобите на командата print(…)
:
Стартираме програмата с [Ctrl + Shift + F10] и проверяваме дали резултата е същия като на картинката:
Тестване в Judge системата
Тествайте решението си тук: https://judge.softuni.org/Contests/Practice/Index/1046#1.
Задача: числата от 1 до 20
Да се напише Python конзолна програма, която отпечатва числата от 1 до 20 на отделни редове на конзолата.
Насоки и подсказки
Създаваме Python файл с име nums_1_to_20.py:
Във файла изписваме 20 команди print(…)
, всяка на отделен ред, за да отпечатаме числата от 1 до 20 едно след друго. По-досетливите от вас, сигурно се питат дали няма по-умен начин. Спокойно, има, но за него по-късно.
Сега стартираме програмата и поверяваме дали резултатът е какъвто се очаква да бъде:
1
2
…
20
Тестване в Judge системата
Тествайте решението си тук: https://judge.softuni.org/Contests/Practice/Index/1046#2.
Сега помислете дали може да напишем програмата по по-умен начин, така че да не повтаряме 20 пъти една и съща команда. Потърсете в Интернет информация за "for loop Python".
Задача: триъгълник от 55 звездички
Да се напише Python конзолна програма, която отпечатва триъгълник от 55 звездички, разположени на 10 реда:
*
**
***
****
*****
******
*******
********
*********
**********
Насоки и подсказки
Създаваме нов Python файл с име triangle_of_55_stars.py. В него трябва да напишем код, който печата триъгълника от звездички, например чрез 10 команди, като посочените по-долу:
print('*')
print('**')
…
Тестване в Judge системата
Тествайте решението си тук: https://judge.softuni.org/Contests/Practice/Index/1046#3.
Опитайте да подобрите решението, така че да няма много повтарящи се команди. Може ли това да стане с for
цикъл? Успяхте ли да намерите умно решение (например с цикъл) на предната задача? При тази задача може да се ползва нещо подобно, но малко по-сложно (два цикъла един в друг). Ако не успеете, няма проблем, ще учим цикли след няколко глави и ще си спомните за тази задача тогава.
Задача: лице на правоъгълник
Да се напише Python програма, която получава две числа a и b, пресмята и отпечатва лицето на правоъгълник със страни a и b.
Примерен вход и изход
a | b | area |
---|---|---|
2 | 7 | 14 |
7 | 8 | 56 |
12 | 5 | 60 |
Насоки и подсказки
Създаваме нов Python файл. За да прочетем двете числа, използваме следните две команди:
Остава да се допише програмата по-горе, за да пресмята лицето на правоъгълника и да го отпечата. Използвайте познатата ни вече команда print(…)
и ѝ подайте в скобите произведението на числата a и b. В програмирането умножението се извършва с оператора *
.
Тествайте решението си
Тествайте решението си с няколко примера. Трябва да получите резултат, подобен на този (въвеждаме 2 и 7 като вход и програмата отпечатва като резултат 14 - тяхното произведение):
2
7
14
Тестване в Judge системата
Тествайте решението си тук: https://judge.softuni.org/Contests/Practice/Index/1046#4.
* Задача: квадрат от звездички
Да се напише Python конзолна програма, която прочита от конзолата цяло положително число N и отпечатва на конзолата квадрат от N звездички, като в примерите по-долу.
Примерен вход и изход
Вход | Изход | Вход | Изход | Вход | Изход |
---|---|---|---|---|---|
3 | *** * * *** |
4 | **** * * * * **** |
5 | ***** * * * * * * ***** |
Насоки и подсказки
Създаваме нов Python файл. За да прочетем числото N (2 ≤ N ≤100), използваме следния код:
Да се допише програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да се използват for
цикли. Потърсете информация в Интернет.
Внимание: тази задача е по-трудна от останалите и нарочно е дадена сега и е обозначена със звездичка, за да ви провокира да потърсите информация в Интернет. Това е едно от най-важните умения, което трябва да развивате докато учите програмирането: да търсите информация в Интернет. Това ще правите всеки ден, ако работите като програмисти, така че не се плашете, а се опитайте. Ако имате трудности, можете да потърсите помощ и в СофтУни форума: https://softuni.bg/forum.
Тестване в Judge системата
Тествайте решението си тук: https://judge.softuni.org/Contests/Practice/Index/1046#5.
Конзолни, графични и уеб приложения
При конзолните приложения, както и сами можете да се досетите, всички операции за четене на вход и печатане на изход се извършват през конзолата. Там се въвеждат входните данни, които се прочитат от приложението, там се отпечатват и изходните данни след или по време на изпълнение на програмата.
Докато конзолните приложения ползват текстовата конзола, уеб приложенията използват уеб-базиран потребителски интерфейс. За да се постигне тяхното изпълнение, са необходими две неща - уеб сървър и уеб браузър, като браузърът играе главната роля по визуализация на данните и взаимодействието с потребителя. Уеб приложенията са много по-приятни за потребителя, изглеждат визуално много по-добре, използват се мишка и докосване с пръст (при таблети и телефони), но зад всичко това стои програмирането. И затова трябва да се научим да програмираме, и вече направихме първите си съвсем малки стъпки.
Графичните (GUI) приложения имат визуален потребителски интерфейс, директно върху нашия компютър или мобилно устройство, без да е необходим уеб браузър. Графичните приложения (настолни приложения или, иначе казано, desktop apps) се състоят от един или повече графични прозореца, в които се намират определени контроли (текстови полета, бутони, картинки, таблици и други), служещи за диалог с потребителя по по-интуитивен начин. Подобни са и мобилните приложения в нашия телефон и таблет: ползваме форми, текстови полета, бутони и други контроли и ги управляване чрез програмен код. Нали затова се учим сега да пишем код: кодът е навсякъде в разработката на софтуер.
Упражнения: графични и уеб приложения
Сега предстои да направим едно графично приложение (GUI application) и едно уеб приложение (Web application), за да надникнем в това, какво ще можем да създаваме някой ден като напреднем с програмирането и разработката на софтуер. Няма да разглеждаме детайлите по използваните техники и конструкции из основи, а само ще хвърлим поглед върху подредбата и функционалността на създаденото от нас. След като напреднем със знанията си, ще бъдем способни да правим големи и сложни софтуерни приложения и системи. Надяваме се примерите по-долу да ви запалят интереса, а не да ви откажат.
Графично приложение: “Суматор за числа”
Да се напише графично (GUI) приложение, което изчислява сумата на две числа. След въвеждане на числата в първите две текстови полета и натискане на бутона [Calculate] се изчислява тяхната сума и резултатът се показва в третото текстово поле в (зелен цвят):
За нашето приложение ще използваме стандартната Python графична библиотека ТkInter (https://wiki.python.org/moin/TkInter), която позволява създаване на графични (GUI) приложения с езика за програмиране Python.
Празен Python проект
В PyCharm създаваме нов Python проект с име "Summator-GUI":
Добавяме в проекта нов Python файл с име sumator.py. Добавяме и tkinter:
Създаване основата на GUI проекта
Следва да напишем кода на нашето графично приложение. Започваме с основата:
Ще са ни нужни следните компоненти (контроли):
- Entry – ще въвежда числата за пресмятане.
- Label – ще ни служи за статично изобразяване на текст и резултата от пресмятането.
- Button – ще изчислява сумата на числата.
Инициализираме и визуализираме нашите контроли (widgets):
Опитваме да пуснем приложението с [Ctrl + Shift + F10] или с десен бутон на мишката + [Run]. То би трябвало да стартира, но да не функционира напълно, защото не сме написали какво се случва при натискане на бутона:
Логика на приложението
Сега е време да напишем кода, който сумира числата от първите две полета и показва резултата в третото поле. За целта при инициализирането на бутона, добавяме команда calculate
:
Написваме кода на функцията calculate
:
Този код взима първото число от полето firstNumberEntry
и го запазва в променливата first_value
, запазва второто число от полето secondNumberEntry
в променливата second_value
, след това сумира first_value
и second_value
в променливата result
и накрая извежда текстовата стойност на променливата result
в полето resultLabel
.
Стартираме отново програмата с [Ctrl + Shift + F10] или с десен бутон + [Run], и проверяваме дали работи коректно. Правим опит да сметнете 4 + 5, а след това -25 + 1.5:
Обработка на невалидни числа
Пробваме и с невалидни числа, напр. "a" и "b". Изглежда има проблем:
Проблемът идва от прехвърлянето на текстово поле в число. Ако стойността в полето не е число, програмата дава грешка. Можем да поправим кода, за да коригираме този проблем:
Горният код прихваща грешките при работа с числа (хваща изключенията) и в случай на грешка извежда стойност Not number/s.
в полето с резултата. Стартираме отново програмата с [Ctrl + Shift + F10] или с десен бутон - [Run], и я пробваме дали работи. Този път при грешно число резултата е Not number/s.
и програмата не се чупи:
Сложно ли е? Нормално е да е сложно, разбира се. Тъкмо започваме да навлизаме в програмирането. Примерът по-горе изисква още много знания и умения, които ще развиваме в тази книга и даже и след нея. Просто си позволете да се позабавлявате с desktop програмирането. Ако не тръгва нещо, винаги може да питате във форума на СофтУни: https://softuni.bg/forum. Или продължете смело напред към следващия пример или към следващата глава от книгата. Ще дойде време, когато ще ви е лесно, но наистина трябва да вложите усърдие и постоянство. Програмирането се учи бавно и с много, много практика.
Уеб приложение: “Суматор за числа”
Сега ще напишем нещо още по-сложно, но и по-интересно: уеб приложение, което изчислява сумата на две числа. При въвеждане на две числа в първите две текстови полета и натискане на бутона [Calculate] се изчислява тяхната сума и резултата се показва в третото текстово поле.
Обърнете внимание, че ще създадем уеб-базирано приложение. Това е приложение, което е достъпно през уеб браузър, точно както любимата ви уеб поща или новинарски сайт. Уеб приложението ще има сървърна част (back-end), която е написана на езика Python с технологията Flask (https://flask.palletsprojects.com) и клиентска част (front-end), която е написана на езика HTML (това е език за визуализация на информация в уеб браузър). Уеб приложението се очаква да изглежда приблизително по следния начин:
За разлика от конзолните приложения, които четат и пишат данните си във вид на текст на конзолата, уеб приложенията имат уеб базиран потребителски интерфейс. Уеб приложенията се зареждат от някакъв Интернет адрес (URL) чрез стандартен уеб браузър. Потребителите пишат входните данни в страница, визуализирана от уеб браузъра, данните се обработват на уеб сървър и резултатите се показват отново в страницата в уеб браузъра. За нашето уеб приложение ще използваме Flask, лека Python библиотека, която позволява създаване на уеб приложения с езика за програмиране Python.
Следват стъпките за имплементация на уеб приложението "Суматор за числа".
Празно Python решение
В PyCharm създаваме нов Python проект, за да организираме кода от приложението:
След това, задаваме смислено име на проекта, например "Sumator-Web". Също така, задаваме Python интерпретатора на този по подразбиране:
Инсталиране на Flask
Преди да започнем да пишем код, трябва да инсталираме Flask. Отиваме в настройките на PyCharm [File] -> [Settings] и след това в [Project: Sumator-Web] -> [Project Interpreter]. Там кликаме върху бутона +
:
Търсим Flask в прозореца, който излиза и кликаме върху [Install Package]:
Ако всичко мине успешно, ще получим следното съобщение в същия екран:
Създаване структурата на проекта
Нека да създадем структурата на нашия проект. За целта създаваме Python файл с име app.py, който ще съдържа нашия програмен код. Създаваме папка с име templates и в нея HTML файл с име index.html, който ще ни помага за изобразяването в браузъра.
Съставяне логиката на приложението
Сега създаваме контролите на приложението. Целта е да добавим полета за въвеждане на числа, бутон за сумирането им и място, където ще се изобрази резултата. Затова трябва да напишем следния код в templates/index.html:
Този код създава уеб форма <form>
с поле и бутон [Calculate] за изпращане на данните от формата към сървъра. Обработването на данните ще се случва в нашия Python файл app.py. Обърнете внимание на къдравите скоби – те служат за превключване между езика HTML и езика Python и идват от Jinja2 синтаксиса за рисуване на динамични уеб страници.
След като напишем следния код в app.py, може да тестваме програмата дали работи като я стартираме с [Ctrl + Shift + F10] или с десен бутон - [Run]:
Следва да напишем кода, който ще обработва нашата заявка:
Вече при кликане на бутона за пресмятане, нашата програма ще може да събере двете числа от формата. Нека пуснем програмата отново и да тестваме дали работи коректно. При въвеждане на числата 9 и 11 ще получим верен резултат:
Обработка на невалидни числа
Ако пробваме с невалидни данни, ще получим грешка:
За да се справим с грешката, е нужно да напишем следния код:
Това не е най-доброто решение за управление на грешки, но ще работи.
Ако пуснем отново програмата и тестваме с невалидни данни, ще получим съобщение - Not number/s.:
Страшно ли изглежда? Не се плашете! Имаме да учим още много, за да достигнем ниво на знания и умения, за да пишем свободно уеб-базирани приложения, като в примера по-горе и много по-големи и по-сложни. Ако не успеете да се справите, продължете спокойно напред. След време ще си спомняте с усмивка колко непонятен и вълнуващ е бил първият ви сблъсък с уеб програмирането. Ако имате проблеми с примера по-горе, питайте във форума на СофтУни: https://softuni.bg/forum.
Целта на горните два примера (графично desktop приложение и уеб приложение) не е да се научите, а да се докоснете по-надълбоко до програмирането, да разпалите интереса си към разработката на софтуер и да се вдъхновите да учите здраво. Имате да учите още много, но пък е интересно, нали?