Python
WtmelonPython: Привет, Мир!
Изучение нового языка программирования традиционно начинается с 'Hello, World!'. Это простая программа, которая выводит приветствие на экран и заодно знакомит с новым языком — его синтаксисом и структурой программы.
Hello, World!
Этой традиции уже больше сорока лет, поэтому и мы не будем нарушать ее. В первом уроке мы напишем программу Hello, World!
. Чтобы сделать это, нужно дать компьютеру специальную команду. В языке Python это — print()
.
Задание
Наберите в редакторе код из задания символ в символ и нажмите «Проверить».
print('Hello, World!')
Внимание: если вы напишете heLLo, woRld!
вместо Hello, World!
, то это будет считаться другим текстом, потому что заглавные и строчные буквы — это разные символы, отличающиеся регистром. В программировании регистр практически всегда имеет значение, поэтому привыкайте всегда обращать на него внимание!
——————————————————
Python: Комментарии
Практически все языки программирования позволяют оставлять в коде комментарии. Они никак не используются интерпретатором. Они нужны исключительно для людей, чтобы программист оставлял пометки для себя и для других программистов.
С их помощью добавляют пояснения, как работает код, какие ошибки нужно поправить или не забыть что-то добавить позже:
# Удалить строку ниже после реализации задачи по регистрации print(10)
Комментарии в Python начинаются со знака # и могут появляться в любом месте программы. Они могут занимать всю строку. Если одной строки мало, то создается несколько комментариев:
# For Winterfell! # For Lanisters!
Комментарий может находиться на строке после кода:
print('I am the King') # For Lannisters!
Задание
Создайте однострочный комментарий с текстом: You know nothing, Jon Snow!
Комментарий — текст в коде программы, который не влияет на функциональность и добавляется программистами для себя и своих коллег.
——————————————————
Python: Инструкции (Statements)
Когда мы готовим блюдо, то четко следуем рецепту. Иначе еда окажется не такой, как ожидали. Это же правило действует и в программировании.
Чтобы увидеть на экране ожидаемый результат, нужно дать компьютеру четкие и пошаговые указания. Это можно сделать с помощью инструкций. Инструкция — это команда для компьютера, единица выполнения. Код на Python в этом случае — это набор инструкций. Его можно представить в виде пошагового рецепта.
Код на Python запускает интерпретатор — программу, которая выполняет инструкции строго по очереди. Как и шаги в рецепте, набор инструкций для интерпретатора пишутся по порядку и отделяются друг от друга переходом на следующую строку.
Разработчики должны понимать порядок действий в коде и уметь мысленно разделять программу на независимые части, удобные для анализа.
Посмотрим на пример кода с двумя инструкциями. При его запуске на экран последовательно выводятся два предложения:
print('Mother of Dragons.') print('Dracarys!') # => Mother of Dragons. # => Dracarys!
https://replit.com/@hexlet/python-basics-instructions
Выше мы говорили, что инструкции отделяются друг от друга переходом на новую строку. Но есть и другой способ: их можно разделить точкой с запятой — ;
:
print('Mother of Dragons.'); print('Drakarys!')
Технической разницы между первым и вторым вариантом нет — интерпретатор поймет инструкции одинаково. Разница только в том, что человеку будет неудобно читать второй вариант.
Лучше инструкции располагать друг под другом. Так коллегам будет удобнее читать ваш код, обслуживать его и вносить изменения.
Задание
Выведите на экран друг за другом три имени: Robert, Stannis, Renly. В результате на экране должно отобразиться:
Robert Stannis Renly
Для каждого имени используйте свой собственный вызов print()
.
Интерпретатор — программа, выполняющая код на Python.
Инструкция (statement) — команда для компьютера, написанная на языке программирования. Код на Python — это набор инструкций, разделенных (чаще всего) переводом строки.
———————————————————
Python: Синтаксические ошибки
Если программа на Python написана синтаксически некорректно, то интерпретатор выводит на экран соответствующее сообщение. Также он указывает на файл и строчку, где произошла ошибка.
Синтаксическая ошибка возникает в том случае, когда код записали с нарушением грамматических правил. В естественных языках грамматика важна, но текст с ошибками обычно можно понять и прочитать. В программировании все строго. Мельчайшее нарушение — и программа даже не запустится. Примером может быть забытая ;
, неправильно расставленные скобки и другие детали.
Вот пример кода с синтаксической ошибкой:
print('Hodor)
https://replit.com/@hexlet/python-basics-syntax-errors
Если запустить код выше, то мы увидим следующее сообщение:
$ python index.py File "index.py", line 1 print('Hodor) ^ SyntaxError: EOL while scanning string literal
С одной стороны, ошибки синтаксиса — самые простые, потому что они связаны с грамматическими правилами написания кода, а не со смыслом кода. Их легко исправить: нужно лишь найти нарушение в записи. С другой стороны, интерпретатор не всегда может четко указать на это нарушение. Поэтому бывает, что забытую скобку нужно поставить не туда, куда указывает сообщение об ошибке.
Задание
Это задание не связано с уроком напрямую. Но будет полезным потренироваться с выводом на экран.
Выведите на экран:
What Is Dead May Never Die
———————————————————
Python: Арифметические операции
На базовом уровне компьютеры оперируют только числами. Даже в прикладных программах на высокоуровневых языках внутри много чисел и операций над ними. Но для старта достаточно знать обычную арифметику — с нее и начнем.
Например, для сложения двух чисел в математике мы пишем: 3 + 4
. В программировании — то же самое. Вот программа, которая складывает два числа:
3 + 4
Арифметика в программировании практически не отличается от школьной арифметики.
Строчка кода 3 + 4
заставит интерпретатор сложить числа и узнать результат. Эта программа будет работать, но в ней нет смысла. По сути, мы не даем команду интерпретатору, мы просто говорим ему: «смотри, сумма трех и четырех». В реальной работе недостаточно сообщать интерпретатору о математическом выражении.
Например, если создавать интернет-магазин, недостаточно просить интерпретатор посчитать стоимость товаров в корзине. Нужно просить посчитать стоимость И показать цену покупателю.
Нам нужно попросить интерпретатор сложить 3 + 4
И дать команду сделать что-то с результатом. Например, вывести его на экран:
# Сначала вычисляется сумма, # затем она передается в функцию печати print(3 + 4)
После запуска на экране появится результат:
7
Кроме сложения доступны следующие операции:
-
— вычитание*
— умножение**
— возведение в степень/
— деление//
— целочисленное деление%
— остаток от деления
Теперь выведем на экран результат деления, а потом результат возведения в степень:
print(8 / 2) # => 4.0 (При делении двух чисел получается тип данных float) print(3 ** 2) # => 9
https://replit.com/@hexlet/python-basics-arithmetics-basics
Иногда для удобства мы будем показывать в комментариях результат запуска строчек кода вот так: => РЕЗУЛЬТАТ
. Например, # => 4
.
Первая инструкция выведет на экран 4
(потому что 8 / 2 равно 4), а вторая инструкция выведет на экран 9 (потому что 32 равно 9).
Задание
Выведите на экран результат деления числа 81
на9
.
———————————————————
Python: Операторы
Знак операции, такой как +
, называют оператором. Операторы выполняют операции над определенными значениями, которые называются операндами. Сами операторы — это обычно один или несколько символов. Реже — слово. Подавляющее большинство операторов соответствуют математическим операциям.
print(8 + 2)
https://replit.com/@hexlet/python-basics-arithmetics-operators
В этом примере +
— это оператор, а числа 8
и 2
— это операнды.
Когда мы складываем, у нас есть два операнда: один слева, другой справа от знака +
. Операции, которые требуют наличия двух операндов, называются бинарными. Если пропустить хотя бы один операнд, например, 3 +
, то программа завершится с синтаксической ошибкой.
Операции бывают не только бинарными, но и унарными — с одним операндом, и тернарными — с тремя операндами. Причем операторы могут выглядеть одинаково, но обозначать разные операции. Символы +
и -
используются не только как операторы. Когда речь идет про отрицательные числа, то знак минуса становится частью числа:
print(-3) # => -3
Выше пример применения унарной операции к числу 3
. Оператор минус перед тройкой говорит интерпретатору взять число 3
и найти противоположное, то есть -3
. Это может сбить с толку, потому что -3
— это одновременно и число само по себе, и оператор с операндом. Но у языков программирования такая структура.
Задание
Напишите программу, которая посчитает разность между числами 6
и -81
и выведет ответ на экран.
Полезное
Всегда отбивайте арифметические операторы пробелами от своих операндов – это хороший стиль программирования.
Арифметическая операция — сложение, вычитание, умножение и деление.
Оператор — специальный символ, создающий операцию. Например, +
создает операцию сложения.
Операнд — объект, который участвует в операции. 3 * 6
: здесь 3 и 6 — операнды.
Унарная операция — операция с одним операндом. Например, -3
— унарная операция для получения числа, противоположного числу три.
Бинарная операция — операция с двумя операндами. Например, 3 + 9
.
———————————————————
Python: Композиция операций
Рассмотрим пример:
print(2 * 4 * 5 * 10)
https://replit.com/@hexlet/python-basics-arithmetics-composition
Операции можно соединять друг с другом и вычислять все более сложные составные выражения. Чтобы представить, как происходят вычисления внутри интерпретатора, разберем пример: 2 * 4 * 5 * 10
.
- Сначала вычисляется
2 * 4
и получается выражение8 * 5 * 10
- Затем
8 * 5
. В итоге имеем40 * 10
- В итоге происходит последнее умножение, и получается результат
400
Операции могут содержать разные операторы, из-за чего появляется вопрос об их приоритете.
Задание
Реализуйте программу, которая вычисляет и выводит на экран значение выражения:
8 / 2 + 5 - -3 / 2
Не вычисляйте ничего самостоятельно, ваша программа должна производить все вычисления сама.
Композиция — метод объединения нескольких простых операций в одну сложную.
———————————————————
Python: Приоритет
Представим, что нужно вычислить такое выражение: 2 + 2 * 2
. Именно так и запишем:
print(2 + 2 * 2) # => 6
В школьной математике есть понятие «приоритет операции». Приоритет определяет, в какой последовательности должны выполняться операции. Умножение и деление имеют больший приоритет, чем сложение и вычитание, а приоритет возведения в степень выше всех остальных арифметических операций. Например: 2 ** 3 * 2
вычислится в 16
.
Но нередко вычисления должны происходить в порядке, отличном от стандартного приоритета. Тогда приоритет нужно задавать круглыми скобками. Так было и в школе, например: (2 + 2) * 2
. Скобки можно ставить вокруг любой операции. Они могут вкладываться друг в друга сколько угодно раз. Вот примеры:
print(3 ** (4 - 2)) # => 9 print(7 * 3 + (4 / 2) - (8 + (2 - 1))) # => 14
Главное при этом соблюдать парность — закрывать скобки в правильном порядке. Это часто становится причиной ошибок не только у новичков, но и у опытных программистов. Для удобства ставьте сразу открывающую и закрывающую скобку, а потом пишите внутреннюю часть. Редактор на нашем сайте (и большинство других редакторов кода) делают это автоматически: вы пишете (
, а редактор сразу добавляет )
. Это касается и других парных символов, например, кавычек. О них поговорим в будущих уроках.
Иногда выражение сложно воспринимать визуально. Тогда можно расставить скобки, не повлияв на приоритет:
# Было print(8 / 2 + 5 - -3 / 2) # => 10.5 # Стало print(((8 / 2) + 5) - (-3 / 2)) # => 10.5
https://replit.com/@hexlet/python-basics-arithmetics-priority
Важно запомнить: код пишется для людей. Код будут читать люди, а машины будут только исполнять его. Для машин код — корректный или некорректный. Для них нет «более» понятного или «менее» понятного кода.
Задание
Дано вычисление 70 * 3 + 4 / 8 + 2
.
Расставьте скобки так, чтобы оба сложения (3 + 4
) и (8 + 2
) высчитывались в первую очередь. Выведите на экран результат.
Выражение — последовательность действий над данными, приводящая к каком-то результату, который можно использовать.
———————————————————
Python: Кавычки
В этом уроке мы разберемся, что такое строка и какую роль в коде играют кавычки.
Определить строку довольно просто — это некий набор символов. Представим, что у нас есть такие записи:
'Hello' 'Goodbye' 'G' ' ' ''
Какие из этих вариантов — строки? На самом деле, все пять вариантов подходят:
- С
'Hello'
и'Goodbye'
все очевидно — мы уже работали с подобными конструкциями и называли их строками 'G'
и' '
— тоже строки, просто в них всего по одному символу''
— это пустая строка, потому в ней ноль символов
Строкой мы считаем все, что находится внутри кавычек: даже если это пробел, один символ или вообще отсутствие символов.
Выше мы записывали строки в одинарных кавычках, но это не единственный способ. Можно использовать и двойные:
print("Dracarys!")
Теперь представьте, что вы хотите напечатать строчку Dragon's mother. Апостроф перед буквой s — это такой же символ, как одинарная кавычка. Попробуем:
print('Dragon's mother') # SyntaxError: invalid syntax
Такая программа не будет работать. С точки зрения Python строчка началась с одинарной кавычки, а потом закончилась после слова dragon. Дальше были символы s mother
без кавычек — значит, это не строка. А потом была одна открывающая строку кавычка, которая так и не закрылась: ')
. Этот код содержит синтаксическую ошибку — это видно даже по тому, как подсвечен код.
Чтобы избежать этой ошибки, мы используем двойные кавычки. Такой вариант программы сработает верно:
print("Dragon's mother")
Теперь интерпретатор знает, что строка началась с двойной кавычки и закончиться должна тоже на двойной кавычке. А одинарная кавычка внутри стала частью строки.
Верно и обратное. Если внутри строки мы хотим использовать двойные кавычки, то саму строку надо делать в одинарных. Причем количество кавычек внутри самой строки неважно.
Теперь представим, что мы хотим создать такую строку:
Dragon's mother said "No"
В ней есть и одинарные, и двойные кавычки. Нам нужно каким-то образом указать интерпретатору, что кавычки — это один из символов внутри строки, а не начало или конец строки.
Для этого используют символ экранирования: \
— обратный слэш. Если мы поставим \
перед кавычкой (одинарной или двойной), то интерпретатор распознает кавычку как обычный символ внутри строки, а не начало или конец строки:
# Экранируем кавычки вокруг No, чтобы интерпретатор # распознал их как часть строки print("Dragon's mother said \"No\"") # => Dragon's mother said "No"
Обратите внимание, что в примере выше нам не пришлось экранировать одинарную кавычку (апостроф 's), потому что сама строка создана с двойными кавычками. Если бы строка создавалась с одинарными кавычками, то символ экранирования нужен был бы перед апострофом, но не перед двойными кавычками.
Если нужно вывести сам обратный слеш, то работает такое же правило. Как и любой другой специальный символ, его надо экранировать:
print("\\") # => \
Задание
Напишите программу, которая выведет на экран:
"Khal Drogo's favorite word is "athjahakar""
Программа должна вывести на экран эту фразу в точности. Обратите внимание на кавычки в начале и в конце фразы:
"Khal Drogo's favorite word is "athjahakar""
———————————————————
Python: Экранированные последовательности
Мы хотим показать вот такой диалог:
- Are you hungry? - Aaaarrrgh!
Попробуем вывести на экран строку с таким текстом:
print("- Are you hungry?- Aaaarrrgh!") # => - Are you hungry?- Aaaarrrgh!
Как видите, результат получился не такой, как мы хотели. Строки расположились друг за другом, а не одна ниже другой. Нам нужно как-то сказать интерпретатору «нажать на Enter» — сделать перевод строки после вопросительного знака. Это можно сделать с помощью символа \n
:
print("- Are you hungry?\n- Aaaarrrgh!") # => - Are you hungry? # => - Aaaarrrgh!
\n
— это пример экранированной последовательности (escape sequence). Такие последовательности еще называют управляющими конструкциями. Их нельзя увидеть в том же виде, в котором их набрали.
Набирая текст в Word, вы нажимаете на Enter в конце строчки. Редактор при этом ставит в конец строчки специальный невидимый символ, который называется LINE FEED (LF, перевод строчки). В некоторых редакторах можно даже включить отображение невидимых символов. Тогда текст будет выглядеть примерно так:
- Привет!¶ - О, привет!¶ - Как дела?
Устройство, которое выводит соответствующий текст, учитывает этот символ. Например, принтер при встрече с LF протаскивает бумагу вверх на одну строку, а текстовый редактор переносит весь последующий текст ниже, также на одну строку.
Существует несколько десятков таких невидимых символов, но в программировании часто встречаются всего несколько. Кроме перевода строки, к таким символам относятся:
- табуляция
\t
— разрыв, который получается при нажатии на кнопку Tab - возврат каретки
\r
— работает только в Windows
Распознать такую управляющую конструкцию в тексте можно по символу \
. Программисты часто используют перевод строки \n
, чтобы правильно форматировать текст. Например, напишем такой код:
print("Gregor Clegane\nDunsen\nPolliver\nChiswyck")
Тогда на экран выведется:
Gregor Clegane Dunsen Polliver Chiswyck
Когда работаете с символом перевода, учитывайте следующие моменты:
- Не важно, что стоит перед или после
\n
: символ или пустая строка. Перевод обнаружится и выполнится в любом случае - Строка может содержать только
\n
:
print('Gregor Clegane') # Строка с текстом print("\n") # Строка с невидимым символом перевода строки print('Dunsen') # Строка с текстом
Программа выведет на экран:
Gregor Clegane Dunsen
- В коде последовательность
\n
выглядит как два символа, но с точки зрения интерпретатора — это один специальный символ - Если нужно вывести
\n
как текст (два отдельных печатных символа), то можно воспользоваться экранированием — добавить еще один\
в начале. Последовательность\\n
отобразится как символы\
иn
, которые идут друг за другом:
print("Joffrey loves using \\n") # => Joffrey loves using \n
В Windows для перевода строк по умолчанию используется \r\n
. Такая комбинация хорошо работает только в Windows, но создает проблемы при переносе в другие системы. Например, когда в команде разработчиков есть пользователи Linux.
Дело в том, что последовательность \r\n
имеет разную трактовку в зависимости от выбранной кодировки, о чем мы поговорим позже. По этой причине в среде разработчиков принято всегда использовать \n
без \r
.
В таком случае перевод строки всегда трактуется одинаково и отлично работает в любой системе. Не забудьте настроить ваш редактор на использование \n
.
Задание
Напишите программу, которая выводит на экран:
- Did Joffrey agree? - He did. He also said "I love using \n".
При этом программа использует только один print()
, но результат на экране должен выглядеть в точности, как показано выше.
Экранированная последовательность — специальная комбинация символов в тексте. Например, \n — это перевод строки.
———————————————————
Python: Конкатенация
В веб-разработке программы постоянно оперируют строками. Все, что мы видим на сайтах, так или иначе представлено в виде текста. Этот текст чаще всего динамический — то есть он получается из разных частей, которые соединяются вместе.
Чтобы соединить строки, нужно выполнить конкатенацию:
# Оператор такой же, как и при сложении чисел, # но здесь он имеет другой смысл (семантику) print('Dragon' + 'stone') # => Dragonstone
Склеивание строк всегда происходит в том же порядке, в котором записаны операнды. Левый операнд становится левой частью строки, а правый — правой. Вот еще несколько примеров:
print('Kings' + 'wood') # => Kingswood print('Kings' + 'road') # => Kingsroad print("King's" + 'Landing') # => King'sLanding
Как видите, строки можно склеивать, даже если их записали с разными кавычками.
Пробел — такой же символ, как и другие, поэтому сколько пробелов поставите в строке, столько и получится в итоговой строке:
# Ставим пробел в левой части print("King's " + 'Landing') # => King's Landing # Ставим пробел в правой части print("King's" + ' Landing') # => King's Landing
https://replit.com/@hexlet/python-basics-string-concatenation
Задание
Выведите на экран
Winter came for the House of Frey.
используя конкатенацию слов.
Если в редакторе есть запись# BEGIN
и# END
, то код нужно писать между этими строчками.
Конкатенация — операция соединения двух строк. Например, print("King's " + ' Landing')
———————————————————
Python: Что такое переменная
Представьте, что нам нужно напечатать на экран фразу Father! два раза. Эту задачу можно решить так:
print('Father!') print('Father!')
В простейшем случае так и стоит поступить. Но если фраза Father! будет использоваться чаще двух раз, да еще и в разных частях программы, то придется ее везде повторять — это неудобно. Проблемы с таким подходом начнутся, когда понадобится изменить фразу, а такое происходит довольно часто. Нам придется найти все места с этой фразой и выполнить необходимую замену.
А можно поступить по-другому. Чтобы не копировать выражение, достаточно создать с ней переменную:
# greeting - переводится как приветствие greeting = 'Father!' print(greeting) print(greeting) # => Father! # => Father!
В строчке greeting = 'Father!'
мы берем переменную с именем greeting
и присваиваем ей значение 'Father!'
. Переменная указывает на данные, которые в нее записали. Благодаря этому, данные можно использовать многократно и не дублировать их постоянно.
Когда переменная создана, можно ее использовать. Она подставляется в те места, где раньше стояла наша фраза. Когда код выполняется, интерпретатор доходит до строчки print(greeting)
и подставляет содержимое переменной, а затем выполняет код.
Для имени переменной используется любой набор допустимых символов, к которым относятся буквы английского алфавита, цифры и знак _
. При этом цифру нельзя ставить в начале. Имена переменных регистрозависимы, то есть имя hello
и имя HELLO
— это два разных имени для двух разных переменных. Регистр в Python имеет важное значение, никогда не забывайте про него.
Количество создаваемых переменных неограниченно. Большие программы содержат десятки и сотни тысяч имен переменных. Вот как выглядят две переменные внутри одной программы:
greeting1 = 'Father!' print(greeting1) print(greeting1) greeting2 = 'Mother!' print(greeting2) print(greeting2)
https://replit.com/@hexlet/python-basics-variables-definition
Чтобы программу было удобно читать, среди программистов принято создавать переменные как можно ближе к тому месту, где они используются. Теперь нужно разобраться, как их изменять.
Задание
Создайте переменную с именем motto
и содержимым What Is Dead May Never Die!
. Распечатайте содержимое переменной.
Переменная — способ сохранить информацию и дать ей имя для последующего использования в коде.
———————————————————
———————————————————
———————————————————
———————————————————
———————————————————
———————————————————
———————————————————
———————————————————
———————————————————