Първата програма
Проблем
Компютърът прави точно каквото пише
Компютърът не се досеща какво искаш. Изпълнява команди, една след друга, точно както са написани. Поредицата от такива команди е програма.
Ето цяла програма. Тя отпечатва два реда на екрана:
print("Добре дошъл!")print("Това е първата ти програма.")Добре дошъл!Това е първата ти програма.Това е цялата програма: два реда, по една команда на ред. Няма обвивка около тях. Записваш ги във файл hello.py и го пускаш.
Идеята
Какво има в програмата
- Програмата е самият файл. Python изпълнява редовете му отгоре надолу, от първия до последния.
print(...)отпечатва текста в скобите и минава на нов ред.- Текстът е в двойни кавички:
"Добре дошъл!". Кавичките не се печатат. - Всяка команда е на свой ред. Знак в края на реда не трябва.
- Редът започва от самото начало, без интервали отпред. В Python интервалите в началото на реда имат значение. Ще ги ползваме в урока за условията.
Програмата се пуска от терминала, в папката на файла:
python hello.pyНа macOS и Linux командата често е python3. Python чете файла и изпълнява командите в него. Няма отделна стъпка, в която кодът се превежда предварително: пишеш и пускаш.
По-точно, за любопитните
- Главните и малките букви имат значение.
Printне е същото катоprintи програмата спира с грешка, когато стигне до този ред.
- Текстът може да е и в единични кавички:
print('Добре дошъл!')печата същото. В курса пишем двойни. - В чужд код ще видиш най-отдолу ред
if __name__ == "__main__":. Той е за файлове, които се ползват и като част от други програми. Засега не ти трябва. - Python не е само в терминала. Има и редактори, които пускат файла с бутон, но отдолу правят същото:
python hello.py.
Идеята
Печат с нов ред и без
Понякога искаш няколко парчета текст на един ред. Тогава казваш на print с какво да завърши: end="" значи „с нищо“. Текстът се отпечатва и курсорът остава на същия ред.
print("Поръчка ", end="")print("№1024", end="")print(" е приета.")print("Доставка: утре")Поръчка №1024 е приета.Доставка: утреПървите два реда в кода са с end="", затова „Поръчка“, „№1024“ и „е приета.“ излизат заедно. След print без end="" следващият текст започва на нов ред.
Обърни внимание на интервалите. Те са вътре в кавичките, защото компютърът не слага интервал сам.
Следи курсора: текстът излиза винаги там, където е той.
print("Поръчка ", end="")print("№1024", end="")print(" е приета.")print("Доставка: утре")Стъпка по стъпка, с думи
- print(…, end="") печата „Поръчка “ и курсорът остава на същия ред.
- print(…, end="") печата „№1024“ и курсорът остава на същия ред.
- print печата „ е приета.“ и курсорът минава на нов ред.
- print печата „Доставка: утре“ и курсорът минава на нов ред.
- Интервалите са вътре в кавичките: компютърът не слага интервал сам.
Пробвай
На колко реда?
Какво ще отпечата програмата?
print("Влак ", end="")print("8:15")print("Перон ", end="")print("3", end="")print()След „8:15“ има print без end="", затова „Перон“ е на нов ред. Последният ред print() не печата текст, а само минава на нов ред.
Идеята
Коментари: бележки за хората
Понякога искаш да оставиш бележка в кода: защо е така или какво предстои. Пишеш я като коментар. Компютърът пропуска коментарите.
#започва коментар до края на реда.- Коментар на няколко реда е няколко реда, всеки с
#.
# Бележката на кафенето.# Цените са в евро.print("Кафе 2,50 €")# print("Кроасан 1,80 €")print("Общо 2,50 €") # кроасаните свършихаКафе 2,50 €Общо 2,50 €Редът с кроасана е код, но е зад #, затова не се изпълнява. Така временно изключваш ред, без да го триеш.
Добрият коментар казва защо, не какво. Кодът сам показва какво прави.
По-точно, за любопитните
В чужд код ще видиш текст в три кавички, """…""", на няколко реда. Той не е коментар, а текст, с който програмата нищо не прави. Ползва се за описание на функциите. За бележки пиши #.
Пробвай
Кое ще излезе?
Какво ще отпечата програмата?
print("9:00 Математика")# print("10:00 Физика")print("11:00 История") # после е обядВторият ред е коментар целият, затова „Физика“ не се печата. На третия ред коментарът започва след командата: командата се изпълнява, а бележката след # се пропуска.
Проблем
Програмата не тръгва
Написал си програмата, пускаш я, а тя дори не започва. Не излиза нито един ред. Вместо изход получаваш съобщение:
print("Добре дошъл в курса!"print("Започваме.") File "/home/student/welcome.py", line 1 print("Добре дошъл в курса!" ^SyntaxError: '(' was never closedТук на първия ред липсва затварящата скоба. Преди да изпълни първия ред, Python прочита целия файл и проверява дали е написан по правилата на езика. Ако не е, спира и не изпълнява нищо, дори редовете преди грешката. Това се казва синтактична грешка (SyntaxError).
Идеята
Как се чете съобщението
Съобщението казва три неща: файла, реда и какво не е наред.
File "/home/student/welcome.py", line 1 значи файлът welcome.py (с пълния път до него), ред 1. Под него е самият ред, а знакът ^ сочи мястото, където Python е забелязал проблема. Последният ред е най-важният: видът на грешката и какво не е наред. '(' was never closed значи „( не е затворена“.
Има и втори вид грешка. Програмата тръгва, изпълнява редовете един след друг и спира чак на реда, който не може да изпълни:
print("Добре дошъл в курса!")Print("Започваме.")Добре дошъл в курса!Traceback (most recent call last): File "/home/student/welcome.py", line 2, in <module> Print("Започваме.") ^^^^^NameError: name 'Print' is not defined. Did you mean: 'print'?Print с главна буква е име, което Python не познава (NameError). Той го разбира едва когато стигне до този ред, затова първият ред вече е отпечатан. Отново пише файла и реда, а най-отдолу е видът на грешката. Did you mean: 'print'? е подсказка: „Това ли имаше предвид?“Най-честите грешки в началото:
- кавичка или скоба е отворена, но не е затворена (SyntaxError);
- интервали в началото на реда (IndentationError: unexpected indent);
- главна буква вместо малка:
Print(NameError, когато програмата стигне до реда).
Python показва само една синтактична грешка наведнъж. Поправяш я, пускаш пак и чак тогава виждаш следващата, ако има.
По-точно, за любопитните
- Python казва къде е забелязал проблема. Понякога грешката е малко по-нагоре.
- Има и грешки, които никой не хваща: програмата тръгва, но прави друго, не каквото искаш. Тях ще ловим в почти всеки урок.
Пробвай
Намери грешката
Програмата трябва да отпечата разписанието на изпита. Тя не тръгва: не излиза дори първият ред. На кой ред е грешката?
Избери реда с грешката.
) за част от текста и стига до края на реда без затваряща кавичка: SyntaxError: unterminated string literal („незатворен текст“). Затова не излиза дори „Час: 10:30“ от ред 1. Поправката е print("Зала: 204").Упражнение
Първите ти програми
Реши задачите в редактора си. Всяка е отделна програма. Сравни изхода си с примерния, знак по знак.
1. Hello World. Традиционната първа програма. Отпечатай:
Hello, World!2. Визитка. Отпечатай визитка от три реда: име, професия и имейл. Може и твоите.
Мария Ивановауеб разработчикmaria@example.com3. Рамка. Отпечатай днешното меню на столовата в рамка от звездички. Внимавай с интервалите, за да излезе дясната страна права.
*************** Днес: супа ** 5,40 € ***************Още задачи
- Едно изречение на три части. С три команди
print(..., end="")и еднаprintотпечатай на един ред „Магазинът работи от 9:00 до 19:00.“ - Разписание с коментар. Отпечатай разписание от четири часа. После изключи третия ред с
#, без да го триеш, и добави коментар защо.
- Нарочна грешка. Махни затварящата скоба от някой ред в задача 1, после махни кавичка, после напиши
Printс главна буква. Прочети какво казва Python всеки път.
Тест