Към съдържанието
wannacode

Първата програма

Проблем

Компютърът прави точно каквото пише

Компютърът не се досеща какво искаш. Изпълнява команди, една след друга, точно както са написани. Поредицата от такива команди е програма.

Ето цяла програма. Тя отпечатва два реда на екрана:

hello.py
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("Доставка: утре")
Стъпка по стъпка, с думи
  1. print(…, end="") печата „Поръчка “ и курсорът остава на същия ред.
  2. print(…, end="") печата „№1024“ и курсорът остава на същия ред.
  3. print печата „ е приета.“ и курсорът минава на нов ред.
  4. print печата „Доставка: утре“ и курсорът минава на нов ред.
  5. Интервалите са вътре в кавичките: компютърът не слага интервал сам.

Пробвай

На колко реда?

Какво ще отпечата програмата?

print("Влак ", end="")
print("8:15")
print("Перон ", end="")
print("3", end="")
print()
Отговор

Идеята

Коментари: бележки за хората

Понякога искаш да оставиш бележка в кода: защо е така или какво предстои. Пишеш я като коментар. Компютърът пропуска коментарите.

  • # започва коментар до края на реда.
  • Коментар на няколко реда е няколко реда, всеки с #.
# Бележката на кафенето.
# Цените са в евро.
print("Кафе 2,50 €")
# print("Кроасан 1,80 €")
print("Общо 2,50 €") # кроасаните свършиха
Изход
Кафе 2,50 €
Общо 2,50 €

Редът с кроасана е код, но е зад #, затова не се изпълнява. Така временно изключваш ред, без да го триеш.

Добрият коментар казва защо, не какво. Кодът сам показва какво прави.

По-точно, за любопитните

В чужд код ще видиш текст в три кавички, """…""", на няколко реда. Той не е коментар, а текст, с който програмата нищо не прави. Ползва се за описание на функциите. За бележки пиши #.

Пробвай

Кое ще излезе?

Какво ще отпечата програмата?

print("9:00 Математика")
# print("10:00 Физика")
print("11:00 История") # после е обяд
Отговор

Проблем

Програмата не тръгва

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

welcome.py
print("Добре дошъл в курса!"
print("Започваме.")
Съобщение от Python
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 значи „( не е затворена“.

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

welcome.py
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 казва къде е забелязал проблема. Понякога грешката е малко по-нагоре.
  • Има и грешки, които никой не хваща: програмата тръгва, но прави друго, не каквото искаш. Тях ще ловим в почти всеки урок.

Пробвай

Намери грешката

Програмата трябва да отпечата разписанието на изпита. Тя не тръгва: не излиза дори първият ред. На кой ред е грешката?

Избери реда с грешката.

Упражнение

Първите ти програми

Реши задачите в редактора си. Всяка е отделна програма. Сравни изхода си с примерния, знак по знак.

1. Hello World. Традиционната първа програма. Отпечатай:

Изход
Hello, World!

2. Визитка. Отпечатай визитка от три реда: име, професия и имейл. Може и твоите.

Примерен изход
Мария Иванова
уеб разработчик
maria@example.com

3. Рамка. Отпечатай днешното меню на столовата в рамка от звездички. Внимавай с интервалите, за да излезе дясната страна права.

Изход
**************
* Днес: супа *
* 5,40 € *
**************

Още задачи

  • Едно изречение на три части. С три команди print(..., end="") и една print отпечатай на един ред „Магазинът работи от 9:00 до 19:00.“
  • Разписание с коментар. Отпечатай разписание от четири часа. После изключи третия ред с #, без да го триеш, и добави коментар защо.
  • Нарочна грешка. Махни затварящата скоба от някой ред в задача 1, после махни кавичка, после напиши Print с главна буква. Прочети какво казва Python всеки път.

Тест

Провери се

1. Откъде започва изпълнението на програмата?
2. Каква е разликата между print("а", end="") и print("а")?
3. Какво прави компютърът с коментара?
4. Python казва SyntaxError на ред 3. Какво значи това?
5. Кой ред ще отпечата Здравей?

Създаден от Иво Гергов като част от кампанията на Evo Tech за достъпно обучение по програмиране ·