Предыдущий урок: Try…Except
Этот материал посвящен инструкциям и выражениям в Python, а также отличиям между ними. Также речь пойдет об инструкциях, занимающих несколько строк, и отступах в Python. Попробуем ответить на вопрос: «Почему отступы так важны в Python?»
Что такое инструкция?
Инструкция в Python — это логическая инструкция, которую интерпретатор Python может прочесть и выполнить. Она может являться выражением или оператором присваивания в Python.
Присваивание — фундаментальный элемент этого языка. Он определяет способ создания и сохранения объектов с помощью выражений.
Что такое выражение?
Выражение — один из типов инструкции, который содержит логическую последовательность чисел, строк, объектов и операторов python. Значение и переменная являются выражениями сами по себе.
С помощью выражений можно выполнять такие операции, как сложение, вычитание, конкатенация и другие. Они также могут представлять собой вызовы функций, которые возвращают результат.
# Использование арифметических выражений
>>> ((20 + 2) * 10 / 5 - 20)
24.0
# Использование функций в выражении
>>> pow(2, 10)
1024
# Использование eval в выражении
>>> eval("2.5+2.5")
5.0
Простая операция присваивания
В случае простого присваивания создаются новые переменные, которым присваиваются значения. Их можно менять. Инструкция предоставляет выражение и имя переменной в качестве метки для сохранения значения выражения.
# Синтаксис
variable = expression
Рассмотрим типы выражений присваивания в Python и посмотрим, как они работают внутри.
Пример 1. С правой стороны — выражение со значением
Это базовая форма присваивания в Python.
>>> test = "Изучение python"
Python создаст в памяти строку "Изучение python" и присвоит ей имя test. Узнать адрес в памяти можно с помощью встроенной функции id().
>>> test = "Изучение python"
>>> id(test)
6589040
Номер — это адрес места, где значение хранится в памяти. Дальше несколько интересных вещей, о которых нужно помнить.
- Если создать другую строку с тем же значением, Python создаст новый объект и присвоит его другому местоположению в памяти. Это работает в большинстве случаев.
- Однако в двух следующих случаях он использует то же место в памяти:
- Строки без пробелов с менее чем 20 символами;
- Целые числа от -5 до 255.
Это называется интернированием и делается для сохранения памяти.
Пример 2. С правой стороны — существующая переменная Python
Теперь другой пример инструкции присваивания. С правой стороны находится ранее объявленная переменная python.
Инструкция выше не приведет к выделению нового места в памяти. Обе переменных будут ссылаться на один и тот же объект в памяти. Это как создание псевдонима для существующего объекта. Убедиться в этом можно с помощью все той же функции id().
>>> test = "Изучение python"
>>> id(test)
6589424
>>> another_test = test
>>> id(another_test)
6589424
Пример 3. С правой стороны — операция
В случае такой инструкции результат зависит от исхода операции. Возьмем такой пример.
>>> test = 2 * 2 / 4
>>> print(test)
1.0
>>> type(test)
В примере выше присваивание приведет к созданию переменной типа float. А в этом — к появлению переменной типа int.
>>> test = 3 * 3
>>> print(test)
9
>>> type(test)
Дополненная инструкция присваивания
Арифметические операторы можно объединять для формирования инструкций дополненного присваивания.
Рассмотрим такой пример: x += y. Он является аналогичным этой инструкции — x = x + y.
Следующий пример с добавлением новых элементов в кортеж чуть яснее демонстрирует принцип.
>>> my_tuple = (5, 10, 20)
>>> my_tuple += (40, 80,)
>>> print(my_tuple)
(5, 10, 20, 40, 80)
Следующий пример — список гласных. В нем в список добавляются недостающие значения.
>>> list_vowels = ['a','e','i']
>>> list_vowels += ['o', 'u',]
>>> print(list_vowels)
['a', 'e', 'i', 'o', 'u']
Инструкция в несколько строк
Каждая инструкция в Python заканчивается символом новой строки. Но это поведение можно расширить на несколько строк с помощью символа продолжения строки \.
В Python есть два варианта работы с инструкциями, занимающими несколько строк.
1. Явное продолжение строки
Когда сразу используется символ продолжения строки \ для разбития инструкции на несколько строчек.
# Инициализация списка с помощью многострочной инструкции
>>> my_list = [1, \
... 2, 3\
... ,4,5 \
... ]
>>> print(my_list)
[1, 2, 3, 4, 5]
# Вычислить выражение, используя многострочную инструкцию
>>> eval ( \
... " 2.5 \
... + \
... 3.5")
6.0
2. Неявное продолжение строки
Неявное продолжение строки работает в тех случаях, когда инструкция разбивается с помощью круглых (), квадратных [] или фигурных {} скобок. В таком случае инструкцию нужно заключить внутрь скобок для переноса.
>>> result = (10 + 100
... * 5 - 5
... / 100 + 10
... )
>>> print(result)
519.95
>>> subjects = [
... 'Метематика',
... 'Английский',
... 'Химия'
... ]
>>> print(subjects)
['Метематика', 'Английский', 'Химия']
>>> type(subjects)
Отступы в Python
Большая часть высокоуровневых языков программирования, таких как C, C++, C# используют фигурные скобки для выделения блоков кода. Python делает это с помощью отступов.
Блок кода, представляющий тело функции или цикл, начинается с отступа и заканчивается первой строкой без отступа.
Сколько места занимает один отступ
Согласно правилам стиля Python (PEP8), размер отступа — 4 символа. Однако у Google есть собственные правила, ограничивающие этот размер 2 символами. Так что можно руководствоваться и собственным стилем, но лучше следовать PEP8.
Почему отступы так важны в Python?
В большинстве языков программирования отступы используются для улучшения читабельности, но добавлять их необязательно. Но в Python их обязательно нужно использовать. Обычно каждую строку предваряет отступ в 4 символа для одного блока кода.
В примерах прошлых разделов были блоки без отступов. Однако в более сложных выражениях без них не обойтись.
def demo_routine(num):
print('Демо функция')
if num % 2 == 0:
return True
else:
return False
num = int(input('Введи число:'))
if demo_routine(num) is True:
print(num, 'четное число')
else:
print(num, 'нечетное число')
Также стоит рассмотреть пример, когда ненужный отступ вызывает ошибку.
>>> 6*5-10
File "", line 1
6*5-10
^
IndentationError: unexpected indent
Выводы
Если вы планируете стать профессиональным программистом, который верит в понятие чистого кода, тогда важно знать о выражениях, инструкциях и отступах в Python. Чтобы получить максимум от этого урока, повторите все представленные примеры в консоли. Для работы с ранее введенными командами можно использовать стрелку вверх на клавиатуре.
Далее: Комментарии
Инструкции в Python
Для того, чтобы наша программа могла делать что-то полезное, мы должны предоставить интерпретатору Python верные инструкции, т.е. посредством кода
сообщить ему логическую последовательность действий, выполнение которой и приведет к желаемому результату. Если более строго, то.
Инструкция языка программирования
(от англ. statement) – это команда на языке программирования,
посредством которой компьютеру сообщается о необходимости выполнения одного определенного шага по обработке порции информации.
По сути, любой python-скрипт представляет собой не что иное, как некоторую последовательность инструкций, которая может состоять из десятков, сотен,
тысяч или даже сотен тысяч и миллионов инструкций (см. пример №1). Все зависит от того, сколько инструкций потребуется для того, чтобы описать все шаги,
необходимые для достижения целей программы.
Код
Результат

# Инструкция импортирует переменную pi из модуля math.
from math import pi
# Позиционное присваивание значений глобальным переменным.
x, y, z = [1, 2, 3]
# Эта инструкция объявляет функцию со значением по умолчанию.
def ex_func(z=0):
# Будут использоваться глобальные переменные.
global x, y
# Комбинированные инструкции присваивания.
# Теперь глобальная x == 10.
x *= 10
# Теперь глобальная y == 20.
y += 18
# Глобальная z не изменилась, а локальная z == z*z.
z **= 2
# Инструкция объявляет вложенную функцию.
def in_func():
# Будет использоваться переменная z из области видимости
# объемлющей функции, т.е. ex_func.
nonlocal z
# Инструкция запускает цикл.
for i in range(25):
# Условная инструкция.
if i<5:
# Инструкция перехода в начало цикла.
continue
# От 5 до 9.
elif i>=5 and i<10:
# Увеличиваем z из обл. видимости ex_func.
z += i
# При i == 10.
else:
# Инструкция прерывания цикла.
break
# Инструкция возврата значения функцией in_func.
return z
# Инструкция возврата значения функцией ex_func.
return x + y + in_func()
# Инструкция будет отлавливать и обрабатывать исключения.
try:
# Инструкция присваивает переменной рез-т вычисления выражения.
res = int(pi)*10 + ex_func(30) + int(input('Введите число: '))
# Инструкция выводит результат на экран.
print(res, end='\n\n')
# Блок выполняется, когда возбуждается исключение.
except Exception as err:
# Выводим сообщение об ошибке.
print(err)
# Если ошибок нет.
else:
# Ничего не делаем (пустая инструкция-заполнитель).
pass
# Этот блок выполняется всегда, даже при наличии исключения.
finally:
# Запрашиваем ввод, чтобы окно не закрылось.
input()
Введите число: число
invalid literal for int() with base 10: 'число'
Пример №1. Виды и формы инструкций в Python.
Как видим, к инструкциям можно отнести практически все команды, которые мы пишем в коде программы: импорт модулей, присваивание или удаление ссылок на объекты, определение функций,
циклы, условные конструкции, обработка исключений и т.д. При этом, в случае необходимости, все эти инструкции могут быть объединены посредством отступов в целые блоки инструкций, каждый из
которых может содержать собственные вложенные блоки инструкций (в нашем примере уровень вложенности достигает четырех).
В последующих параграфах мы обязательно рассмотрим все виды инструкций и их особенности более подробно. Сейчас же, для более полного представления о наборе инструкций, использующихся в
Python, мы просто перечислим основные из них, дав краткие пояснения (в процессе чтения обязательно еще раз посматривайте в пример
№1).
-
a = b – это инструкция присваивания (например, a = 5**2 — 3 или
b = len([1, 2, 3])). Помимо этого имеются и другие формы присваивания: комбинированные инструкции присваивания (например,
a += 5 или b **= 7), позиционное присваивание (например, a, b = 5, 7 или
[a, b] = ‘AB’), операция распаковывания последовательностей (например, a, *b = 1, 2, 3 или
a, *b, c = ‘ABCDEF’), а также групповое присваивание одного значения (например, a = b = c = 5). Алгоритм присваивания
у всех этих форм несколько отличается, но главная цель у них одна – это создание ссылок на объекты и сохранение их в переменных. При этом стоит добавить, что присваивание может
быть и неявным, например, в вызовах функций или в заголовках циклов, но в любом случае результатом будут ссылки на объекты, сохраненные в переменных. -
def – определение функций и методов. Например,
def my_func(a, b, c=0, *d): return a + b + c + d[0]. - return – возврат результата из функций и методов.
-
yield – инструкция возврата результата из функции-генератора с сохранением состояния ее
локальных переменных. При повторном вызове такой функции выполнение, в отличие от инструкции return, продолжается с ключевого слова
yield, на котором ее работа была прервана ранее. - class – определение классов. Например, class MyСlass: pass.
- pass – пустая инструкция-заполнитель.
-
global – инструкция объявления используемых переменных глобальными (если переменных несколько, то они
перечисляются через запятую). -
nonlocal – инструкция используется во вложенных функциях и объявляет переменные нелокальными. В результате
интерпретатор будет использовать переменные с указанными именами из ближайшей области видимости (т.е. объемлющей функции), исключая глобальную. - if/elif/else – условная инструкция.
- for/else – инструкция обхода последовательности в цикле.
- while/else – цикл общего назначения.
- break – инструкция выхода из цикла.
- continue – инструкция перехода в начало цикла.
-
import – инструкция импорта всех доступных имен из указанных модулей (модули
присваиваются по одному за одну инструкцию, хотя допускается и по несколько за раз, но тогда они перечисляются через запятую). -
from/import – инструкция импорта из модуля только указанных имен
(имена перечисляются через запятую). Например, from math import pi as p, tau as t. - try/except/finally – инструкция обработки исключений.
- raise – инструкция возбуждения исключений.
-
assert – инструкция отладки, которая позволяет производить проверку
истинности утверждений и выводить сообщение об ошибке. Например, assert x > y, ‘Значение x недопустимо мало!’. - with/as – менеджер контекста.
-
del – инструкция удаления ссылок на объекты (если ссылок несколько, то они перечисляются через запятую). Например,
del a, b[0], c[‘car’] .
Отметим, что список инструкций языка Python постоянно изменяется. Происходит это не сразу, но после выхода очередных версий языка регулярно появляются новые
виды инструкций, а некоторые старые виды постепенно обновляются или вообще удаляются.
Что касается вызовов функций, генераторов и других выражений, то они тоже являются инструкциями, но при этом их выделяются в особую группу за счет следующих особенностей:
-
могут объединяться операторами в сколь угодно длинные конструкции, которые в итоге последовательных операций вычисляются интерпретатором и возвращаются в виде одного
единственного значения (объекта некоторого типа); - могут использоваться внутри других инструкций, являясь их составной частью.
Например, инструкция присваивания res = 5 + my_func(1, 2) содержит в правой части выражение, включающее вызов функции. Однако в
результате вычислений в переменной сохранится ссылка лишь на один итоговый объект.
В отличие от выражений обычные инструкции в Python не могут использоваться там, где ожидается значение. Поэтому их нельзя использовать в качестве
аргументов функций, правой части присваиваний, в качестве операций или возвращаемых значений. Например, если в инструкции выше заменить вызов функции ее определением в виде
res = 5 + (def my_func(a, b): return a + b), интерпретатор возбудит исключение.
По умолчанию интерпретатор Python выполняет инструкции последовательно одна за другой в порядке их следования в коде. Однако ряд специальных
инструкций, называемых управляющими конструкциями, позволяют изменять ход выполнения программы по умолчанию. К ним
относятся:
-
условные инструкции, такие как if/else или
if/elif/else, которые указывают интерпретатору Python на выполнение или пропуск других
инструкций в зависимости от значения условного выражения; -
инструкции циклов, такие как for/in или
while, которые указывают интерпретатору на многократное выполнение других инструкций; -
инструкции переходов, такие как break,
continue или return, которые указывают интерпретатору на выполнение перехода в другую
часть программы; -
инструкции обработки исключений, такие как try/except/else
или try/except/finally, которые указывают интерпретатору на выполнение перехода в другую часть программы в случае возникновения
ошибок.
Выражения в Python
Выражения являются не менее важными строительными элементами в Python, чем другие инструкции. Ведь большая часть того, что пишется в коде, является
выражениями.
Выражение (от
англ. expression) – это любая единица исходного кода Python,
которая может быть вычислена интерпретатором для получения значения. При этом литералы и переменные считаются выражениями сами по себе, а вызовы функций и некоторые другие конструкции
вроде генераторов следует относить к выражениям из-за того, что они явно или неявно, но дают результат.
Выражения делятся на простые (первичные) и сложные. Простые выражения не могут быть разделены на еще более простые выражения. К ним относятся, например, литералы, инициализированные
переменные, вызовы функций. Сложные выражения составляются из более простых при помощи различных операторов, которые позволяют выполнять такие операции, как сложение, вычитание,
конкатенация и другие (см. пример №2).
Код
Результат

# Присваивается смешанное выражение, включающее
# генератор списка, арифметические выражения,
# выражения сравнения и логическое выражение.
li = [x*10 for x in (0, 1, 2, 3) if x > 0 and x != 3]
# Анонимная функция и ее вызов в арифметическом выражении.
res = (lambda a, b: a + b)(li[0], li[1])**2
# Выражения с операторами идентичности и членства,
# выражения вызовов функций.
if res in [900, 1000] and type(res) is int:
print(res)
900
Пример №2. Использование выражений в Python.
В примере выше простые выражения литерального значения (например, 10, (0, 1, 2, 3), int),
выражения переменных (например, x или res) и выражения вызовов функций (например,
type(res) или более сложный вызов анонимной функции (lambda a, b: a + b)(li[0], li[1])) посредством операторов объединяются
в более длинные смешанные выражения. Однако все эти примеры далеко не предел, т.к. выражения могут использоваться везде, где интерпретатор ожидает получить значение. Да, порой выражения могут
выглядеть довольно длинными и сложными, но в результате вычислений на выходе интерпретатор все равно будет оперировать каким-то одним результирующим значением.
Опять же, в последующих параграфах мы обязательно рассмотрим все виды выражений и особенности их использования более подробно. Сейчас же, просто перечислим основные из них для
ознакомления, дав краткие пояснения (в процессе чтения обязательно еще раз посматривайте в пример №2).
-
Выражения литерального значения – это литералы в коде программы, например, ‘ten’ (строка),
10 (число), [‘ten’, 10] (список) или list (объект). -
Выражения переменных – обычные инициализированные переменные, например, res в выражении
res in [900, 1000] (здесь переменная уже инициализирована, а значит обращение к ней возвращает значение, сохраненное в памяти под данным именем). - Арифметические выражения – используются привычные нам математические операторы, например, a + b**3.
- Условные выражения или выражения сравнения – используются операторы сравнения, например, a <= b.
- Выражения с логическими операторами – используются логические операторы, например, a > b and a < c.
- Выражения с побитовыми операторами – используются побитовые операторы, например, a&b.
-
Выражения с операторами принадлежности – используются операторы принадлежности (членства) in и
not in, например, 5 in [1, 2, 3]. -
Выражения с операторами идентичности – используются операторы идентичности is и
is not, например, 5 is not ‘5’. - Вызовы функций и методов – это тоже выражения, т.к. они явно или неявно возвращают результат, например, f(3, 5).
-
Генераторы – генераторы выражений, списков, словарей, множеств. Например,
{simb for simb in ‘123’}. -
lambda-выражения или анонимные функции – это специальные конструкции, которые позволяют встраивать определения функций в программный код
выражений. Например, 5**2 + (lambda x, y: x — y)(5, 2). -
Выражения присваивания – используется моржовый оператор
:=, который позволяет присваивать значения непосредственно в выражении. Например, x = 5 + (y:=5). -
Трехместные выражения if/else – эти конструкции позволяют использовать в выражениях
условную инструкцию if/else в ее простейшей форме. Например, x = True if y > 0 else False.
Да, разделение по категориям получилось несколько условным, но вполне наглядным для того, чтобы отличать в коде выражения от инструкций. Это внешне. Логически выражения также несколько
отличаются по своему использованию и смысловому содержанию. Ведь выражения – это все, что состоит из объектов (ну, или ссылок на них) и операторов и может быть вычислено интерпретатором
для получения значения, а инструкции – это указания на выполнение программой каких-либо действий (необязательно вычислений). Да, выражения вполне обоснованно можно считать особым видом
инструкций, результатом исполнения которых являются значения. Но при этом не стоит забывать, что на практике выражения практически всегда входят в состав каких-либо инструкций и других более
сложных смешанных выражений, а вот использование инструкций в выражениях недопустимо (например, инструкция d = 5 + (def my_func(): return 3) однозначно вызовет
сбой скрипта).
Операторы в Python
Как было сказано выше, для составления более сложных выражений используются операторы, которые позволяют выполнять над объектами этих выражений некоторые операции. Но
что мы имеем в виду, когда говорим, что хотим выполнить над объектами некоторую операцию при помощи соответствующего оператора?
Операции (от
англ. operations) – это те действия, которые мы выполняем над переменными и объектами.
Некоторые операции нам уже известны (например, сложение, умножение, присваивание или сравнение), знакомство с другими еще только предстоит. Но в любом случае, чтобы
интерпретатор понял, какую операцию над объектами мы хотим выполнить, нужно использовать не слова, а соответствующие им операторы.
Операторы (от
англ. operators) – это элементы программного кода, которые используются для указаний
программе на выполнение определенных действий в выражении. Проще говоря, операторы – это символьные обозначения команд, с помощью которых мы выполняем операции.
Примерами выражений с использованием операторов могут служить
a + b, a != b, -b,
a > b, (b + 7)/(5 — 3**2) и др. Здесь символы и комбинации символов
+, !=, **, —,
/, > и есть операторы. Кстати, выражения или значения, расположенные по сторонам операторов,
называют операндами.
Большинство операторов обрабатывают свои операнды в определенном направлении. Это свойство принято называть ассоциативностью. Одни
операторы выполняют обработку своих операндов слева направо, обладая левой ассоциативностью, другие обладают правой ассоциативностью, выполняя обработку в обратном
направлении, т.е. справа налево. Также существуют операторы не имеющие ассоциативности.
Кроме того, операторы могут отличаться своим приоритетом, который определяет порядок (очередность) их выполнения в ходе вычисления
значения выражения. Первыми обрабатываются операторы с более высоким приоритетом, затем операторы с более низким приоритетом и так далее по мере убывания их приоритетности.
Если приоритет операторов одинаков, они группируются и обрабатываются либо согласно их ассоциативности, либо в соответствии с установленным для них порядком (это
касается операторов, у которых ассоциативность отсутствует). Также отметим, что для принудительного указания порядка выполнения операторов используются круглые скобки
(см. пример №3).
Код
Результат

# Теперь a==19, т.к. приоритет оператора * выше, чем у +.
a = 5 + 7*2
print('5 + 7*2 ->', a)
# Теперь b==24, т.к. порядок был указан при помощи скобок.
b = (5 + 7)*2
print('(5 + 7)*2 ->', b, end='\n\n')
c = 2
# Вернет True, т.к. согласно принятому порядку
# это тоже самое, что и a < b and b > c.
print(a < b > c)
# Вернет False, т.к. скобки явно указывают порядок выполнения.
print('a < (b > c) ->', a < (b > c), end='\n\n')
# Согласно принятому порядку это тоже самое, что и c = (a = b).
# А вот использование инструкции c = a += b вызовет ошибку.
c = a = b
# Теперь d == -8, т.к. операторы - и - имеют равный приоритет и
# левую ассоциативность, поэтому 5 - 6 - 7 == (5 - 6) - 7.
d = 5 - 6 - 7
print('5 - 6 - 7 ->', d, end='\n\n')
# Теперь d == 1, т.к. (0 and 0 or 1) == (0 and 0) or 1.
d = 0 and 0 or 1
print('0 and 0 or 1 ->', d)
# Теперь d == 0, т.к. операция в скобках выполняется первой.
d = 0 and (0 or 1)
print('0 and (0 or 1) ->', d)
5 + 7*2 -> 19
(5 + 7)*2 -> 24
True
a < (b > c) -> False
5 - 6 - 7 -> -8
0 and 0 or 1 -> 1
0 and (1 or 0) -> 0
Пример №3. Использование операторов в Python.
Для большей наглядности мы перечислили основные операторы языка Python, использующиеся в выражениях, в порядке убывания их приоритетов
в таблице №4. Чем ниже приоритет, тем ниже находится строка с соответствующими операторами. Если операторы имеют одинаковый приоритет,
они перечисляются в одной и той же строке таблицы.
| Оператор | Описание | Ассоциативность |
|---|---|---|
| ** | Возведение в степень | Справа налево |
|
~ + — |
Побитовое отрицание (инверсия битов) Унарный плюс Унарный минус |
Справа налево |
|
* / % // |
Умножение Деление Деление по модулю Целочисленное деление |
Слева направо |
|
+ — |
Сложение Вычитание |
Слева направо |
|
<< >> |
Побитовый сдвиг влево Побитовый сдвиг вправо |
Слева направо |
| & | Побитовое and (И) | Слева направо |
| ^ | Побитовое xor (исключающее ИЛИ) | Слева направо |
| | | Побитовое or (ИЛИ) | Слева направо |
|
< <= > >= == != is, is not in, not in |
Меньше Меньше или равно Больше Больше или равно Равно Не равно Операторы тождественности Операторы членства |
Отсутствует |
| not | Логическое отрицание (НЕ) | Справа налево |
| and | Логическое И | Слева направо |
| or | Логическое ИЛИ | Слева направо |
| := | Моржовый оператор (выражение присваивания) | Справа налево |
Таблица №4. Основные операторы языка Python.
Старайтесь всегда использовать скобки, непосредственно определяя порядок группировки и не полагаясь на приоритет или ассоциативность операторов, поскольку это
облегчит сопровождение кода и поиск ошибок как при наличии сложных выражений, так и в случае изменения поведения операторов при переходе от одной версии
Python к другой.
Большинство операторов, приведенных в таблице, являются бинарными, т.е. используются с двумя операндами (например,
+, —, !=). Есть также операторы, которые
работают только с одним операндом, их называют унарными. Примером может служить —
(оператор отрицания или унарный минус), который применяется для смены знака числа на противоположный.
В конце параграфа хотелось бы еще раз отметить, что фрагменты кода с присваиванием значений переменным в Python принято
считать инструкциями присваивания. Это связано с тем, что такие фрагменты внутри обычных выражений не разрешены, а в документации все операторы присваивания
объединены в одну группу и перечислены в отдельном пункте 2.6 «Delimiters» вместе
с другими разделителями (хотя и с оговоркой, что они могут выступать в роли операторов). Например, фрагменты кода d = 5,
s += 7**2 или li[0] += 3 — f мы будем называть инструкциями присваивания. Тем не
менее одна форма выражения присваивания в языке все таки имеется. Формируется она при помощи недавно введенного моржового оператора
:=, который может использоваться не только в инструкциях, но и внутри обычных выражений. Например, инструкция присваивания
li = [a := 1, b := 2] включает также и два выражения присваивания.
Краткие итоги параграфа
-
Инструкции – это команды на языке Python, которые сообщают интерпретатору последовательность
действий, необходимых для достижения поставленных целей. По умолчанию интерпретатор выполняет инструкции последовательно одна за другой в порядке их следования
в коде. Если нужно изменить выполнение хода программы по умолчанию, используются управляющие конструкции: условные инструкции, циклы, инструкции переходов или
инструкции обработки исключений. -
Выражение – это любая единица исходного кода Python, которая может быть вычислена
интерпретатором для получения значения. Сложные выражения составляются из более простых при помощи различных операторов, которые позволяют выполнять над объектами
такие операции как сложение, вычитание, сравнение и т.д. Но каким бы сложным не было выражение, в результате последовательных вычислений на выходе интерпретатор
все равно будет оперировать каким-то одним результирующим значением. -
Важно помнить, что на практике выражения практически всегда входят в состав каких-либо инструкций, а вот использование последних в выражениях недопустимо
(например, попытка выполнения инструкции d = if 3>k: k=3 приведет к ошибке). -
Операторы представляют собой символьные обозначения команд, с помощью которых мы выполняем операции над объектами. Выражения или значения, расположенные по сторонам
операторов, называют операндами. Если оператор используется с двумя операндами, его называют бинарным. Если же оператор работает только с одним операндом, его
называют унарным. Так в выражении -3 + (2 — 5)*7 операторы + и *
представляют собой бинарные операторы, а вот оператор — используется и как бинарный оператор вычитания, и как унарный минус. -
Большинство операторов обрабатывают свои операнды в определенном направлении. Это свойство принято называть ассоциативностью. Одни операторы выполняют обработку
своих операндов слева направо, обладая левой ассоциативностью, другие обладают правой ассоциативностью, выполняя обработку в обратном направлении, т.е. справа налево.
Кроме того, существуют операторы не имеющие ассоциативности. Так левой ассоциативностью, в основном обладают бинарные операторы, правая ассоциативность
присуща унарным операторам, а операторы сравнения вообще не обладают ассоциативностью. -
Важным является и приоритет операторов, т.к. операторы с большим приоритетом обрабатываются первыми. Например, значением выражения
2*7 + 4 будет 18, а не 22, т.к. приоритет оператора умножения
выше приоритета оператора сложения. -
Если приоритет операторов одинаков, они группируются и обрабатываются либо согласно их ассоциативности, либо в соответствии с установленным для них порядком (это
касается операторов, у которых ассоциативность отсутствует). В любом случае лучше всегда использовать скобки, непосредственно определяя порядок группировки и не
полагаясь на приоритет или ассоциативность операторов.
Помогите проекту, подпишитесь!
Подписка на учебные материалы сайта оформляется сроком на один год и стоит около
5 у.е.
После подписки вам станут доступны следующие возможности.
- Доступ ко всем ответам тестов и решениям задач.
- Возможность загрузки учебных кодов и программ на свой компьютер.
- Практически полное отключение рекламы.
-
Возможность внести свой скромный вклад в развитие проекта и мира во всем мире, а также выразить свою благодарить автору за его труд.
Нам очень нужна ваша поддержка!
На страницу подписки
Вопросы и задания для самоконтроля
1. Что такое инструкция? А что такое выражение? Можно ли считать любое выражение инструкцией и наоборот?
Показать решение.
Ответ. Инструкция в Python – это команда интерпретатору на выполнение
какого-либо действия по обработке порции информации. А выражение – это любая единица исходного кода Python, которая может
быть вычислена интерпретатором для получения значения.
В принципе любое выражение можно считать особым видом инструкций, которые указывают интерпретатору на вычисление какого-либо фрагмента кода и в результате выполнения
приводят к какому-то значению. Но не любая инструкция может считаться выражением, т.к. инструкции могут указывать не только на вычисления, но и, например, на простой
переход в другую часть программы или выполнение кода определенное число раз. Более того, в Python инструкции могут содержать выражения,
а вот использовать инструкции в составе выражений нельзя (если, конечно, инструкция сама не является выражением).
2. Какие из представленных фрагментов кода относятся к инструкциям, а какие к выражениям:
2**3 + my_func(a),
if a > 2**3: print(a),
s = 2**3,
a < 2**3 and a > 5? Будем считать, что переменные уже инициализированны, а функция определена.
Показать решение.
Ответ. if a > 2**3: print(a) – условная инструкция, хотя в ней и
содержится выражение a > 2**3; s = 2**3 – инструкция присваивания;
2**3 + my_func(a) и a < 2**3 and a > 5 – выражения, т.к. оба фрагмента кода
содержат только операторы и объекты и могут быть вычислены.
3. Какие значения будут присвоены переменным в результате вычисления выражений
a = 5 + 10*5,
b = 5/10*5,
a = True in [True] is True? Выведите их на экран.
Показать решение.
Решение
Результат

# Приоритет оператора умножения выше.
# 5 + 10*5 == 5 + (10*5).
a = 5+10*5
# Выведет 55.
print('5 + 10*5 =', a, end='\n\n')
# Приоритет одинаков, ассоциативность левая.
# 5/10*5 == (5/10)*5.
b = 5/10*5
# Выведет 2.5.
print('5/10*5 =', b, end='\n\n')
# Приоритет оператора is выше.
# True in [True] is True == True in ([True] is True).
res = True in [True] is True
# Выведет False.
print('True in [True] is True ->', res)
5 + 10*5 = 55
5/10*5 = 2.5
True in [True] is True -> False
4. Какие из представленных фрагментов кода содержат ошибки:
a = 7 *= 3,
c = [8, (b = True) or (g = False)],
a = 7 + (b = 5*2),
a = 7 + (b := 5*2)? Объясните ответ.
Показать решение.
Ответ. Все фрагменты кода, кроме последнего, содержат ошибки, т.к. использование инструкций присваивания внутри
обычных выражений недопустимо. А вот в состав последнего примера входит именно выражение присваивания, поскольку вместо обычного оператора присваивания был
использован моржовый оператор присваивания :=.
Быстрый переход к другим страницам
Чтобы успешно использовать любой язык программирования, нам необходимо освоить два навыка:
-
прежде всего, вам необходимо изучить язык программирования — вам необходимо изучать словарь и грамматику. После этого, необходимо научиться правильно произносить слова на новом языке и знать, как строить грамотные «предложения» на этом языке;
-
после этого, вам необходимо «рассказать историю». При написании истории, вы комбинируете слова и предложения, чтобы донести до читателя некоторые идеи. В программировании, наша программа будет «историей», а задача, которую нужно решить будет «идеей».
Как только вы изучите Python, вы обнаружите, что изучить другие языки будет гораздо легче. Новый язык программирования будет иметь другой словарь и грамматику, но навыки решения поставленных задач пригодятся вам вне зависимости от используемого языка программирования.
Вы быстро выучите «словарь» и научитесь составлять «предложения» на языке Python. Для получения навыка написания грамотных программ понадобится гораздо больше времени. Изучение программирования похоже на изучения письма. Мы начнем с чтения и объяснения программ, потом мы попытаемся писать простые программы, потом мы начнем писать все более сложные программы. В какой-то момент мы увидите шаблоны и приемы для создания программ, после чего вы сможете самостоятельно решать поставленные перед вами задачи путем написания программ на языке программирования. Как только вы научитесь решать поставленные задачи, программирования превратится в очень занимательный и творческий процесс.
Мы начнем изучать Python со словаря и базовой структуры программы. Будьте терпеливы, так как простые примеры будут напоминать вам о тех временах, когда вы только учились читать.
В отличие от человеческого языка, словарь Python очень мал. В языках программирования словарь называют «зарезервированными словами» или «ключевыми словами» (reserved words или keywords). Когда Python видит эти слова, для него они имеют только одно значение. Позже, когда вы будете писать программы, вы будете создавать свои слова, которые будут называться переменными (variables). Правильно подобрать название переменной — не такая простая задача как кажется, но вы не сможете использовать зарезервированные слова в качестве названия переменных.
Список зарезервированных слов в Python выглядит следующим образом:
|
|
|
|
|
|
False |
class |
from |
or |
|
None |
continue |
global |
pass |
|
True |
def |
if |
raise |
|
and |
del |
import |
return |
|
as |
elif |
in |
try |
|
assert |
else |
is |
while |
|
async |
except |
lambda |
with |
|
await |
finally |
nonlocal |
yield |
|
break |
for |
not |
|
Мы постепенно будем изучать, что значат те или иные слова, но сейчас мы сосредоточимся на возможности «разговаривать»
Итак, мы написали наше первое корректное предложение на языке Python. Наше предложение начинается со слова print, после которого идет строка текста в кавычках, заключенная в скобки.
Значения (values) являются одними из базовых вещей, с которыми работает программа. Значения — это данные, которыми оперирует программа. Например, это цифры 1, 2 или текстовая строка "Hello, world!".
Значения принадлежат к разным типам данных (data type): 2 — это целое число (integer), «Hello, world!» это строка (string). Python понимает что это текстовая строка, потому что она заключена в кавычки.
Python может выполнить команду print и с целым числом.
Если вы не уверены, какой тип имеет значение, вы можете вызвать команду type, чтобы Python вам подсказал
Мы уже знакомы с типом string и с типом integer, но новым типом для нас является тип float — сокращение от floating point (число с плавающей точкой).
А что, если мы попробуем узнать тип следующих значений «17» или «3.2» ?
Они являются строками, так как заключены в кавычки.
Одной из самых мощных «фишек» языков программирования является возможность манипулировать переменными (variable). Переменная ссылается на определенное значение в памяти.
Когда вы только начинаете изучать программирование, думайте о переменной как о контейнере. Переменная хранит значения, чтобы вы потом могли их повторно использовать в программе. Это сокращает избыточность, улучшает производительность и делает код более читабельным.
Для того, чтобы использовать переменную, вы сначала должны присвоить значение переменной. Позже, вы можете получить доступ к значению через переменную. Вы можете присваивать переменным другие значения.
Для задания переменной значения используется инструкция присвоения = (assignment statement). Используем инструкцию присвоения для создания новой переменной и присвоения ей значения:
При попытке создать переменную с именем class, Python выдаст ошибку.
SyntaxError: invalid syntax
Мы попытались использовать зарезервированное слово class для имени переменной, чего делать нельзя — когда Python видит слово class — он ожидает определенный код и, не находя его, выдает ошибку синтаксиса.
Мы можем вывести на экран значения созданных нами переменных с помощью функцииprint()
С помощью команды type мы можем вывести на экран тип переменной. В Python тип переменной зависит от того, на данные какого типа переменная ссылается.
Как правило, программисты выбирают осмысленные имена переменных. Хорошее название переменной должно «документировать себя» — отражать содержимое и назначение переменной.
Имя переменной может быть сколь угодно длинным, оно может содержать буквы и цифры, но оно не может начинаться с цифры. Вы можете использовать заглавные буквы для имен переменных, но это является плохой практикой в Python и желательно избегать этого.
Если переменная состоит из нескольких слов, в Python принято каждое слово отделять нижним подчеркиванием (_), например: max_speed или word_length. Имена переменной может начинаться с нижнего подчеркивания, но такие переменные имеют специальное предназначение и мы рассмотрим это позже.
SyntaxError: invalid syntax
SyntaxError: invalid syntax
Из примера мы видим, что переменная 4dudes является некорректной, так как она начинается с цифры, переменная var@ также является некорректной, так как содержит символ @, который не является символом алфавита или цифрой.
Инструкция (statement) — это часть кода, которую Python может выполнить. Код на Python представляет из себя последовательность инструкций.
Python выполняет программу путем выполнения инструкций друг за другом, пока все инструкции не будут выполнены. В общем случае, Python выполняет инструкции сверху вниз.
Python выполняет инструкции путем вычисления выражений одно за одним, после чего Python применяет операции к этим выражениям.
Присвоение значения переменной является инструкцией!
Выражение (expression) — это комбинация из значений, переменных и операторов.
В языках программирования, значение само по себе является выражением, поэтому нижеприведенные примеры являются корректными выражениями
>>> x = 20 # Это statement
>>> x # Это тоже выражение
>>> x + 17 # Вычисляется значение выражения
Если вы напечатаете выражения в интерактивном режиме, Python вычислит значение выражения и выведет значение в качестве результата. Однако, в коде программы выражение само по себе ничего не делает.
Python вычисляет значение выражения путем вычисления значений под-выражений, а потом применяет операции к этим под-выражениям.
Вызов функции в Python является выражением. Результатом выражения является возвращаемое значение функции. Если функция не предусматривает зн
Вызов функции в Python является выражением.
Операторы (operator) — специальные символы, которые выполняют вычисления, например, сложение или умножение. Значения, к которым применяется оператор называются операндами.
Давайте рассмотрим арифметические операторы в Python и какие вычисления они выполняют
|
Оператор |
Значение |
|
+ |
сложение |
|
— |
вычитание |
|
* |
умножение |
|
/ |
деление |
|
// |
целочисленное деление |
|
** |
возведение в степень |
|
% |
деление по модулю (взятие остатка от деления) |
Нам следует остановиться на операциях деления и целочисленного деления. Зачем нужны две операции деления?
Дело в том, что в различных языках программирования операция деления может вести себя по-разному. Например, в языке программирования C результатом деления целого числа на целое число будет целое число. Если при делении возникнет остаток, он будет отброшен — число округлится до ближайшего меньшего целого. Например
Выдаст результат равный 0. Из общего понимания математики мы ожидали увидеть ответ равным 0.5, но это дробное число — тип float. Так как в языке C деление целого числа на целое число даст целое число, дробная часть будет отброшена и в результате мы получим 0.
Если мы хотим получить корректный ответ, мы должны один из операндов сделать числом с плавающей точкой. Тогда, по правилам языка C, если один из операндов будет float, то результат операции также будет float. Код
В языке Python дело обстоит иначе — при использовании обычного деления Python правильно поймет наши намерения и результатом деления целого числа на целое число будет число с плавающей точкой.
Если же мы хотим, чтобы Python повел себя как язык C, мы можем воспользоваться оператором целочисленного деления. Тогда результатом деления одного целого числа на второе целое число будет целое число.
Порядок операций в выражении
Порядок операций в выражении
Когда в выражении присутствуете более одного оператора, порядок вычисления зависит от приоритета операции. Для арифметических операторов, Python соблюдает общепринятую математическую конвенцию. Для того, чтобы запомнить приоритет операторов, запомните акроним PEMDAS:
-
Parentheses (скобки) имеют наивысший приоритет, с помощью скобок вы можете точно выстроить нужный порядок вычисления выражений;
-
Exponentiation (возведение в степень) имеет следующий по приоритету порядок. Например, выражение
2**1+1будет равно3, а не4; -
Multiplication (умножение) и Division (деление) имеют одинаковый приоритет. Такой же приоритет имеет операция деления по модулю (Modulo);
-
Наименьший приоритет имеют Addition (сложение) и Subtraction (вычитание);
-
операторы с одинаковым приоритетом выполняются слева направо.
Оператор деления по модулю (Modulo)
Оператор деления по модулю (Modulo)
Оператор деления по модулю используются с двумя целочисленными операндами и возвращает остаток от деления первого операнда на второй.
Оператор деления по модулю бывает очень полезен в некоторых ситуациях. Например, вы можете узнать — делится ли одно число нацело на второе (остаток от деления будет 0) или получить крайне правые цифры в числе (например, выражение x % 10 вернет единицы, выражение x % 100 вернет две правые цифры числа).
Арифметические операции со строками
Арифметические операции со строками
Выражение и его результат зависит не только от операторов, но и от типа данных, к которым применяется тот или иной оператор. Применительно ко строкам можно применить некоторые арифметические операторы, но результат выражений будет совершенно иным:
|
конкатенация (сложение) строк. Оба операнда должны быть строками |
|
|
повторение строк. Первый операнд — строка, второй операнд — целое число. |
|
|
форматирование строк (будет рассмотрено в отдельной теме) |
Операция конкатенации используется для «склеивания» строк. Оба операнда выражения должны быть строкой, в противном случае Python выдаст ошибку
Traceback (most recent call last):
File «<stdin>», line 1, in <module>
TypeError: can only concatenate str (not «int») to str
Операция повторения позволяет создать новую строку, которая будет повторенной несколько раз исходной строкой
Traceback (most recent call last):
File «<stdin>», line 1, in <module>
TypeError: can‘t multiply sequence by non-int of type ‘float‘
Так как программа без данных не имеет смысла, мы так или иначе будем сталкиваться с необходимостью ввести данные в программу.
Существует много способов получения данных: чтение из файла, получение данных по сети, загрузка данных из базы данных, пользовательский ввод (с клавиатуры, мыши, других устройств) и так далее.
В рамках данного курса мы рассмотрим несколько способов получения входных данных, но пока остановимся на самом простом для реализации способе — пользовательский ввод из консоли.
Python предоставляет встроенную функцию (потом мы разберем, что это такое) под названием input(). После выполнения statement, который содержит функцию input(), Python приостанавливает выполнение программы и ждет ввода пользователя с клавиатуры. Когда пользователь введет нужные данные и нажмет Enter, программа продолжит свою работу
Обратите внимание, что после названия функции input() мы указываем пустые скобки — это синтаксис вызова функции.
Функции в Python возвращают значение. Функция input() возвращает строку с тем, что ввел пользователь. На видео выше мы видим, что мы ввели текст user input, после чего функция input() вернула user input, но это просто выражение в виде строки user input, которое просто выводится на экран, так как мы находимся в интерактивном режиме. Если мы напишем программу и запустим ее в среде разработки, ничего не произойдет.
Чтобы работать со входными данными, мы должны сохранить наш ввод. Это мы можем сделать с помощью переменной — мы сохраним пользовательский ввод как значение переменной.
print («Вы ввели « + my_input)
Работа программы будет выглядеть следующим образом
Давайте внимательно разберем statement
-
1.
Вызывается функция
input(); -
2.
Приложение приостанавливается и ждет, пока пользователь введет текст;
-
3.
Функция
input()возвращает значение — пользовательский текст в виде строки; -
4.
Создается переменная
my_input; -
5.
Выполняется оператор присвоения;
-
6.
Переменная
my_inputтеперь имеет тип строка.
Таким образом, мы создали переменную my_input, которая хранит результат пользовательского ввода и мы можем дальше с ним работать в нашей программе.
Разберем вызов функции print()
print («Вы ввели « + my_input)
Вычисляется выражение «Вы ввели» + my_input. Мы уже знаем, что это операция конкатенации строк. Вычисленное выражение передается функции print(), которая выводит в консоль склеенную строку.
Введение в написание программ
151
показ
9.1K
открытий
1
репост
Программа на языке Python состоит из набора инструкций. Каждая инструкция помещается на новую строку. Например:
print(2+3)
print(«Hello»)
Большую роль в Python играют отступы. Неправильно поставленный отступ фактически является ошибкой. Например, в следующем случае мы получим ошибку, хотя код будет практически аналогичен приведенному выше:
print(2+3)
print(«Hello»)
Поэтому стоит помещать новые инструкции сначала строки. В этом одно из важных отличий пайтона от других языков программирования, как C# или Java.
Однако стоит учитывать, что некоторые конструкции языка могут состоять из нескольких строк. Например, условная конструкция if:
if 1< 2:
print(«Hello»)
В данном случае если 1 меньше 2, то выводится строка «Hello». И здесь уже должен быть отступ, так как инструкция print(«Hello») используется не сама по себе, а как часть условной конструкции if. Причем отступ, согласно руководству по оформлению кода, желательно делать из такого количество пробелов, которое кратно 4 (то есть 4, 8, 16 и т.д.) Хотя если отступов будет не 4, а 5, то программа также будет работать.
Таких конструкций не так много, поэтому особой путаницы по поводу где надо, а где не надо ставить пробелы, не должно возникнуть.
Регистрозависимость
Python — регистрозависимый язык, поэтому выражения print и Print или PRINT представляют разные выражения. И если вместо метода print для вывода на консоль мы попробуем использовать метод Print:
Print(«Hello World»)
то у нас ничего не получится.
Комментарии
Для отметки, что делает тот или иной участок кода, применяются комментарии. При трансляции и выполнении программы интерпретатор игнорирует комментарии, поэтому они не оказывают никакого влияния на работу программы.
Комментарии в Python бывают блочные и строчные. Все они предваряются знаком решетки (#).
Блочные комментарии ставятся в начале строки.
Строчные комментарии располагаются на той же строке, что и инструкции языка:
print(«Hello World») # Вывод сообщения на консоль
Основные функции
Python предоставляет ряд встроенных функций. Некоторые из них используются очень часто, особенно на начальных этапах изучения языка, поэтому рассмотрим их.
Основной функцией для вывода информации на консоль является функция print(). В качестве аргумента в эту функцию передается строка, которую мы хотим вывести:
print(«Hello Python»)
Если же нам необходимо вывести несколько значений на консоль, то мы можем передать их в функцию print через запятую:
print(«Full name:», «Tom», «Smith»)
В итоге все переданные значения склеятся через пробелы в одну строку:
Full name: Tom Smith
Если функция print отвечает за вывод, то функция input отвечает за ввод информации. В качестве необязательного параметра эта функция принимает приглашение к вводу и возвращает введенную строку, которую мы можем сохранить в переменную:
name = input(«Введите имя: «)
print(«Привет», name)
Консольный вывод:
Введите имя: Евгений
Привет Евгений
Переменные и типы данных
Переменная хранит определенные данные. Название переменной в Python должно начинаться с алфавитного символа или со знака подчеркивания и может содержать алфавитно-цифровые символы и знак подчеркивания. И кроме того, название переменной не должно совпадать с названием ключевых слов языка Python. Ключевых слов не так много, их легко запомнить: and, as, assert, break, class, continue, def, del, elif, else, except, False, finally, for, from, global, if, import, in, is, lambda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield.
Например, создадим переменную:
name = «Tom»
Здесь определена переменная name, которая хранит строку «Tom».
В пайтоне применяется два типа наименования переменных: camel case и underscore notation.
Camel case подразумевает, что каждое новое подслово в наименовании переменной начинается с большой буквы. Например:
userName = «Tom»
Underscore notation подразумевает, что подслова в наименовании переменной разделяются знаком подчеркивания. Например:
user_name = «Tom»
И также надо учитывать регистрозависимость, поэтому переменные name и Name будут представлять разные объекты.
Переменная хранит данные одного из типов данных. В Python существует множество различных типов данных, которые подразделяются на категории: числа, последовательности, словари, наборы:
- boolean — логическое значение True или False
- int — представляет целое число, например, 1, 4, 8, 50.
- float — представляет число с плавающей точкой, например, 1.2 или 34.76
- complex — комплексные числа
- str — строки, например «hello». В Python 3.x строки представляют набор символов в кодировке Unicode
- bytes — последовательность чисел в диапазоне 0-255
- byte array — массив байтов, аналогичен bytes с тем отличием, что может изменяться
- list — список
- tuple — кортеж
- set — неупорядоченная коллекция уникальных объектов
- frozen set — то же самое, что и set, только не может изменяться (immutable)
- dict — словарь, где каждый элемент имеет ключ и значение
Python является языком с динамической типизацией. Он определяет тип данных переменной исходя из значения, которое ей присвоено. Так, при присвоении строки в двойных или одинарных кавычках переменная имеет тип str. При присвоении целого числа Python автоматически определяет тип переменной как int. Чтобы определить переменную как объект float, ей присваивается дробное число, в котором разделителем целой и дробной части является точка. Число с плавающей точкой можно определять в экспоненциальной записи:
x =3.9e3
print(x) # 3900.0
x =3.9e-3
print(x) # 0.0039
Число float может иметь только 18 значимых симолов. Так, в данном случае используются только два символа — 3.9. И если число слишком велико или слишком мало, то мы можем записывать число в подобной нотации, используя экспоненту. Число после экспоненты указывает степень числа 10, на которое надо умножить основное число — 3.9.
При этом в процессе работы программы мы можем изменить тип переменной, присвоив ей значение другого типа:
user_id = «12tomsmith438» # тип str
print(user_id)
user_id = 234 # тип int
print(user_id)
С помощью функции type() динамически можно узнать текущий тип переменной:
user_id =»12tomsmith438″
print(type(user_id)) # user_id =234 # <class ‘str’>
print(type(user_id)) # <class ‘int’>
Операции с числами
Арифметические операции
Python поддерживает все распространенные арифметические операции:
- +
Сложение двух чисел:
print(6 + 2) # 8
- —
Вычитание двух чисел:
print(6 — 2) # 4
- *
Умножение двух чисел:
print(6 * 2) # 12
- /
Деление двух чисел:
print(6 / 2) # 3.0
- //
Целочисленное деление двух чисел:
print(7 / 2) # 3.5
print(7 // 2) # 3
Данная операция возвращает целочисленный результат деления, отбрасывая дробную часть
- **
Возведение в степень:
print(6 ** 2) # Возводим число 6 в степень 2. Результат — 36
- %
Получение остатка от деления:
print(7 % 2) # Получение остатка от деления числа 7 на 2. Результат — 1
В данном случае ближайшее число к 7, которое делится на 2 без остатка, это 6. Поэтому остаток от деления равен 7 — 6 = 1
При последовательном использовании нескольких арифметических операций их выполнение производится в соответствии с их приоритетом. В начале выполняются операции с большим приоритетом. Приоритеты операций в порядке убывания приведены в следующей таблице.
Операции
Направление
**
Справо налево
* / // %
Слева направо
+ —
Слева направо
Пусть у нас выполняется следующее выражение:
number = 3 + 4 * 5 ** 2 + 7
print(number) # 110
Здесь начале выполняется возведение в степень (5 ** 2) как операция с большим приоритетом, далее результат умножается на 4 (25 * 4), затем происходит сложение (3 + 100) и далее опять идет сложение (103 + 7).
Чтобы переопределить порядок операций, можно использовать скобки:
number = (3 + 4) * (5 ** 2 + 7)
print(number) # 224
Следует отметить, что в арифметических операциях могут принимать участие как целые, так и дробные числа. Если в одной операции участвует целое число (int) и число с плавающей точкой (float), то целое число приводится к типу float.
Арифметические операции с присвоением
Ряд специальных операций позволяют использовать присвоить результат операции первому операнду:
- +=
Присвоение результата сложения
- -=
Присвоение результата вычитания
- *=
Присвоение результата умножения
-
/=
Присвоение результата от деления
- //=
Присвоение результата целочисленного деления
- **=
Присвоение степени числа
- %=
Присвоение остатка от деления
Примеры операций:
number = 10
number += 5
print(number) # 15
number -= 3
print(number) # 12
number *= 4
print(number) # 48
Функции преобразования чисел
Ряд встроенных функций в Python позволяют работать с числами. В частности, функции int() и float() позволяют привести значение к типу int и float соответственно.
Например, пусть у нас будет следующий код:
first_number = «2»
second_number = 3
third_number = first_number + second_number
Мы ожидаем, что «2» + 3 будет равно 5. Однако этот код сгенерирует исключение, так как первое число на самом деле представляет строку. И чтобы все заработало как надо, необходимо привести строку к числу с помощью функции int():
first_number = «2»
second_number = 3
third_number = int(first_number) + second_number
print(third_number) # 5
Аналогичным образом действует функция float(), которая преобразует в число с плавающей точкой. Но вообще с дробными числами надо учитывать, что результат операций с ними может быть не совсем точным. Например:
first_number = 2.0001
second_number = 5
third_number = first_number / second_number
print(third_number) # 0.40002000000000004
В данном случае мы ожидаем получить число 0.40002, однако в конце через ряд нулей появляется еще какая-то четверка. Или еще одно выражение:
print(2.0001 + 0.1) # 2.1001000000000003
В этот случае для округления результата мы можем использовать функцию round():
first_number = 2.0001
second_number = 0.1
third_number = first_number + second_number
print(round(third_number, 4)) # 2.1001
Первый параметр функции — округляемое число, а второй — сколько знаков после запятой должно содержать получаемое число.
Представление числа
При обычном определении числовой переменной она получает значение в десятичной системе. Но кроме десятичной в Python мы можем использовать двоичную, восьмеричную и шестнадцатеричную системы.
Для определения числа в двоичной системе перед его значением ставится 0 и префикс b:
x = 0b101 # 101 в двоичной системе равно 5
Для определения числа в восьмеричной системе перед его значением ставится 0 и префикс o:
a = 0o11 # 11 в восьмеричной системе равно 9
Для определения числа в шестнадцатеричной системе перед его значением ставится 0 и префикс x:
y = 0x0a # a в шестнадцатеричной системе равно 10
И с числами в других системах измерения также можно проводить арифметические операции:
x = 0b101 # 5
y = 0x0a # 10
z = x + y # 15
print(«{0} in binary {0:08b} in hex {0:02x} in octal {0:02o}».format(z))
Для вывода числа в различных системах исчисления используются функция format, которая вызывается у строки. В эту строку передаются различные форматы. Для двоичной системы «{0:08b}», где число 8 указывает, сколько знаков должно быть в записи числа. Если знаков указано больше, чем требуется для числа, то ненужные позиции заполняются нулями. Для шестнадцатеричной системы применяется формат «{0:02x}». И здесь все аналогично — запись числа состоит из двух знаков, если один знак не нужен, то вместо него вставляется ноль. А для записи в восьмеричной системе испольуется формат «{0:02o}».
Результат работы скрипта:
15 in binary 00001111 in hex 0f in octal 17
Условные выражения
Ряд операций представляют условные выражения. Все эти операции принимают два операнда и возвращают логическое значение, которое в Python представляет тип boolean. Существует только два логических значения — True (выражение истинно) и False (выражение ложно).
Операции сравнения
Простейшие условные выражения представляют операции сравнения, которые сравнивают два значения. Python поддерживает следующие операции сравнения:
- ==
Возвращает True, если оба операнда равны. Иначе возвращает False.
- !=
Возвращает True, если оба операнда НЕ равны. Иначе возвращает False.
- > (больше чем)
Возвращает True, если первый операнд больше второго.
- < (меньше чем)
Возвращает True, если первый операнд меньше второго.
- >= (больше и равно)
Возвращает True, если первый операнд больше или равен второму.
- <= (меньше и равно)
Возвращает True, если первый операнд меньше или равен второму.
Примеры операций сравнения:
a = 5
b = 6
result = 5 == 6 # сохраняем результат операции в переменную
print(result) # False — 5 не равно 6
print(a != b) # True
print(a > b) # False — 5 меньше 6
print(a < b) # True
bool1 = True
bool2 = False
print(bool1 == bool2) # False — bool1 не равно bool2
Операции сравнения могут сравнивать различные объекты — строки, числа, логические значения, однако оба операнда операции должны представлять один и тот же тип.
Логические операции
Для создания составных условных выражений применяются логические операции. В Python имеются следующие логические операторы:
- and (логическое умножение)
Возвращает True, если оба выражения равны True
age = 22
weight = 58
result = age > 21 and weight == 58
print(result) # True
В данном случае оператор and сравнивает результаты двух выражений: age > 21 weight == 58. И если оба этих выражений возвращают True, то оператор and также возвращает True. Причем в качестве одно из выражений необязательно выступает операция сравнения: это может быть другая логическая операция или просто переменная типа boolean, которая хранит True или False.
age = 22
weight = 58
isMarried = False
result = age > 21 and weight == 58 and isMarried
print(result) # False, так как isMarried = False
- or (логическое сложение)
Возвращает True, если хотя бы одно из выражений равно True
age = 22
isMarried = False
result = age > 21 or isMarried
print(result) # True, так как выражение age > 21 равно True
- not (логическое отрицание)
Возвращает True, если выражение равно False
age = 22
isMarried = False
print(not age > 21) # False
print(not isMarried) # True
Если один из операндов оператора and возвращает False, то другой операнд уже не оценивается, так как оператор в любом случае возвратит False. Подобное поведение позволяет немного увеличить производительность, так как не приходится тратить ресурсы на оценку второго операнда.
Аналогично если один из операндов оператора or возвращает True, то второй операнд не оценивается, так как оператор в любом случае возвратит True.
Операции со строками
Строка представляет последовательность символов в кодировке Unicode, заключенных в кавычки. Причем в Python мы можем использовать как одинарные, так и двойные кавычки:
name = «Tom»
surname = ‘Smith’
print(name, surname) # Tom Smith
Одной из самых распространенных операций со строками является их объединение или конкатенация. Для объединения строк применяется знак плюса:
name = «Tom»
surname = ‘Smith’
fullname = name + » » + surname
print(fullname) # Tom Smith
С объединением двух строк все просто, но что, если нам надо сложить строку и число? В этом случае необходимо привести число к строке с помощью функции str():
name = «Tom»
age = 33
info = «Name: » + name + » Age: » + str(age)
print(info) # Name: Tom Age: 33
Эскейп-последовательности
Кроме стандартных символов строки могут включать управляющие эскейп-последовательности, которые интерпретируются особым образом. Например, последовательность \n представляет перевод строки. Поэтому следующее выражение:
print(«Время пришло в гости отправится\nЖдет меня старинный друг»)
На консоль выведет две строки:
Время пришло в гости отправится
Ждет меня старинный друг
Тоже самое касается и последовательности \t, которая добавляет табляцию.
Кроме того, существуют символы, которые вроде бы сложно использовать в строке. Например, кавычки. И чтобы отобразить кавычки (как двойные, так и одинарные) внутри строки, перед ними ставится слеш:
print(«Кафе \»Central Perk\»»)
Сравнение строк
Особо следует сказать о сравнении строк. При сравнении строк принимается во внимание символы и их регистр. Так, цифровой символ условно меньше, чем любой алфавитный символ. Алфавитный символ в верхнем регистре условно меньше, чем алфавитные символы в нижнем регистре. Например:
str1 = «1a»
str2 = «aa»
str3 = «Aa»
print(str1 > str2) # False, так как первый символ в str1 — цифра
print(str2 > str3) # True, так как первый символ в str2 — в нижнем регистре
Поэтому строка «1a» условно меньше, чем строка «aa». Вначале сравнение идет по первому символу. Если начальные символы обоих строк представляют цифры, то меньшей считается меньшая цифра, например, «1a» меньше, чем «2a».
Если начальные символы представляют алфавитные символы в одном и том же регистре, то смотрят по алфавиту. Так, «aa» меньше, чем «ba», а «ba» меньше, чем «ca».
Если первые символы одинаковые, в расчет берутся вторые символы при их наличии.
Зависимость от регистра не всегда желательна, так как по сути мы имеем дело с одинаковыми строками. В этом случае перед сравнением мы можем привести обе строки к одному из регистров.
Функция lower() приводит строку к нижнему регистру, а функция upper() — к верхнему.
str1 = «Tom»
str2 = «tom»
print(str1 == str2) # False — строки не равны
print(str1.lower() == str2.lower()) # True
Условная конструкция if
Условные конструкции используют условные выражения и в зависимости от их значения направляют выполнение программы по одному из путей. Одна из таких конструкций — это конструкция if. Она имеет следующее формальное определение:
if логическое_выражение:
инструкции
[elif логическое выражение:
инструкции]
[else:
инструкции]
В самом простом виде после ключевого слова if идет логическое выражение. И если это логическое выражение возвращает True, то выполняется последующий блок инструкций, каждая из которых должна начинаться с новой стоки и должна иметь отступы от начала строки:
age = 22
if age > 21:
print(«Доступ разрешен»)
print(«Завершение работы»)
Поскольку в данном случае значение переменной age больше 21, то будет выполняться блок if, а консоль выведет следующие строки:
Доступ разрешен
Завершение работы
Отступ желательно делать в 4 пробела или то количество пробелов, которое кратно 4.
Обратите внимание в коде на последнюю стоку, которая выводит сообщение «Завершение работы». Она не имеет отступов от начала строки, поэтому она не принадлежит к блоку if и будет выполняться в любом случае, даже если выражение в конструкции if возвратит False.
Но если бы мы поставили бы отступы, то она также принадлежала бы к конструкции if:
age = 22
if age > 21:
print(«Доступ разрешен»)
print(«Завершение работы»)
Если вдруг нам надо определить альтернативное решение на тот случай, если условное выражение возвратит False, то мы можем использовать блок else:
age = 18
if age > 21:
print(«Доступ разрешен»)
else:
print(«Доступ запрещен»)
Если выражение age > 21 возвращает True, то выполняется блок if, иначе выполняется блок else.
Если необходимо ввести несколько альтернативных условий, то можно использовать дополнительные блоки elif, после которого идет блок инструкций.
age = 18
if age >= 21:
print(«Доступ разрешен»)
elif age >= 18:
print(«Доступ частично разрешен»)
else:
print(«Доступ запрещен»)
Вложенные конструкции if
Конструкция if в свою очередь сама может иметь вложенные конструкции if:
age = 18
if age >= 18:
print(«Больше 17»)
if age > 21:
print(«Больше 21»)
else:
print(«От 18 до 21»)
Стоит учитывать, что вложенные выражения if также должны начинаться с отступов, а инструкции во вложенных конструкциях также должны иметь отступы. Отступы, расставленные не должным образом, могут изменить логику программы. Так, предыдущий пример НЕ аналогичен следующему:
age = 18
if age >= 18:
print(«Больше 17»)
if age > 21:
print(«Больше 21»)
else:
print(«От 18 до 21»)
Теперь напишем небольшую программку, которая использует условные конструкции. Данная программка будет представлять собой своего рода обменный пункт:
# Программа Обменный пункт
usd = 57
euro = 60
money = int(input(«Введите сумму, которую вы хотите обменять: «))
currency = int(input(«Укажите код валюты (доллары — 400, евро — 401): «))
if currency == 400:
cash = round(money / usd, 2)
print(«Валюта: доллары США»)
elif currency == 401:
cash = round(money / euro, 2)
print(«Валюта: евро»)
else:
cash = 0
print(«Неизвестная валюта»)
print(«К получению:», cash)
С помощью функции input() получаем вводимые пользователем данные на консоль. Причем данная функция возвращает данные в виде строки, поэтому нам надо ее еще привести к целому числу с помощью функции int(), чтобы введенные данные можно было использовать в арифметических операциях.
Программа подразумевает, что пользователь вводит количество средств, которые надо обменять, и код валюты, на которую надо произвести обмен. Коды валюты достаточно условны: 400 для долларов и 401 для евро.
С помощью конструкции if проверяем код валюты и делим на соответствующий валютный курс. Так как в процессе деления образуется довольно длинное число с плавающей точкой, которое может содержать множество знаков после запятой, то оно округляется до двух чисел после запятой с помощью функции round().
В завершении на консоль выводится полученное значение. Например, запустим программу и введем какие-нибудь данные:
Введите сумму, которую вы хотите обменять: 20000
Укажите код валюты (доллары — 400, евро — 401): 401
Валюта: евро
К получению: 333.33
Циклы
Циклы позволяют повторять некоторое действие в зависимости от соблюдения некоторого условия.
Цикл while
Первый цикл, который мы рассмотрим, это цикл while. Он имеет следующее формальное определение:
while условное_выражение:
инструкции
После ключевого слова while указывается условное выражение, и пока это выражение возвращает значение True, будет выполняться блок инструкций, который идет далее.
Все инструкции, которые относятся к циклу while, располагаются на последующих строках и должны иметь отступ от начала строки.
choice = «y»
while choice.lower() == «y»:
print(«Привет»)
choice = input(«Для продолжения нажмите Y, а для выхода любую другую клавишу: «)
print(«Работа программы завешена»)
В данном случае цикл while будет продолжаться, пока переменная choice содержит латинскую букву «Y» или «y».
Сам блок цикла состоит из двух инструкций. Сначала выводится сообщение «Привет», а потом вводится новое значение для переменной choice. И если пользователь нажмет какую-то другую клавишу, отличную от Y, произойдет выход из цикла, так как условие choice.lower() == «y» вернет значение False. Каждый такой проход цикла называется итерацией.
Также обратите внимание, что последняя инструкция print(«Работа программы завешена») не имеет отступов от начала строки, поэтому она не входит в цикл while.
Дугой пример — вычисление факториала:
#! Программа по вычислению факториала
number = int(input(«Введите число: «))
i = 1
factorial = 1
while i <= number:
factorial *= i
i += 1
print(«Факториал числа», number, «равен», factorial)
Здесь вводит с консоли некоторое число, и пока число-счетчик i не будет больше введенного числа, будет выполняться цикл, в котором происходит умножения числа factorial.
Консольный вывод:
Введите число: 6
Факториал числа 6 равен 720
Цикл «for»
Другой тип циклов представляет конструкция for. Цикл for вызывается для каждого числа в некоторой коллекции чисел. Коллекция чисел создается с помощью функции range(). Формальное определение цикла for:
for int_var in функция_range:
инструкции
После ключевого слова for идет переменная int_var, которая хранит целые числа (название переменной может быть любое), затем ключевое слово in, вызов функции range() и двоеточие.
А со следующей строки располагается блок инструкций цикла, которые также должны иметь отступы от начала строки.
При выполнении цикла Python последовательно получает все числа из коллекции, которая создается функцией range, и сохраняет эти числа в переменной int_var. При первом проходе цикл получает первое число из коллекции, при втором — второе число и так далее, пока не переберет все числа. Когда все числа в коллекции будут перебраны, цикл завершает свою работу.
Рассмотрим на примере вычисления факториала:
#! Программа по вычислению факториала
number = int(input(«Введите число: «))
factorial = 1
for i in range(1, number+1):
factorial *= i
print(«Факториал числа», number, «равен», factorial)
Вначале вводим с консоли число. В цикле определяем переменную i, в которую сохраняются числа из коллекции, создаваемой функцией range.
Функция range здесь принимает два аргумента — начальное число коллекции (здесь число 1) и число, до которого надо добавлять числа (то есть number +1).
Допустим, с консоли вводится число 6, то вызов функции range приобретает следующую форму:
range(1, 6+1):
Эта функция будет создавать коллекцию, которая будет начинаться с 1 и будет последовательно наполняться целыми числами вплоть до 7. То есть это будет коллекция [1, 2, 3, 4, 5, 6].
При выполнении цикла из этой коллекции последовательно будут передаваться числа в переменную i, а в самом цикле будет происходить умножение переменной i на переменную factorial. В итоге мы получим факториал числа.
Консольный вывод программы:
Введите число: 6
Факториал числа 6 равен 720
Функция «range»
Функция range имеет следующие формы:
-
range(stop): возвращает все целые числа от 0 до stop
- range(start, stop): возвращает все целые числа в промежутке от start (включая) до stop (не включая). Выше в программе факториала использована именно эта форма.
-
range(start, stop, step): возвращает целые числа в промежутке от start (включая) до stop (не включая), которые увеличиваются на значение step
Примеры вызовов функции range:
range(5) # 0, 1, 2, 3, 4
range(1, 5) # 1, 2, 3, 4
range(2, 10, 2) # 2, 4, 6, 8
range(5, 0, -1) # 5, 4, 3, 2, 1
Например, выведем последовательно все числа от 0 до 4:
for i in range(5):
print(i, end=» «)
Вложенные циклы
Одни циклы внутри себя могут содержать другие циклы. Рассмотрим на примере вывода таблицы умножения:
for i in range(1, 10):
for j in range(1, 10):
print(i * j, end=»\t»)
print(«\n»)
Внешний цикл for i in range(1, 10) срабатывает 9 раз, так как в коллекции, возвращаемой функцией range, 9 чисел. Внутренний цикл for j in range(1, 10) срабатывает 9 раз для одной итерации внешнего цикла, и соответственно 81 раз для всех итераций внешнего цикла.
В каждой итерации внутреннего цикла на консоль будет выводится произведение чисел i и j. В итоге мы получим следующий консольный вывод:
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
Выход из цикла. break и continue
Для управления циклом мы можем использовать специальные операторы break и continue. Оператор break осуществляет выход из цикла. А оператор continue выполняет переход к следующей итерации цикла.
Оператор break может использоваться, если в цикле образуются условия, которые несовместимы с его дальнейшим выполнением. Рассмотрим следующий пример:
#! Программа Обменный пункт
print(«Для выхода нажмите Y»)
while True:
data = input(«Введите сумму для обмена: «)
if data.lower() == «y»:
break # выход из цикла
money = int(data)
cache = round(money / 56, 2)
print(«К выдаче», cache, «долларов»)
print(«Работа обменного пункта завершена»)
Здесь мы имеем дело с бесконечным циклом, так как условие while True всегда истинно и всегда будет выполняться. Это популярный прием для создания программ, которые должны выполняться неопределенно долго.
В самом цикле получаем ввод с консоли. Мы предполагаем, что пользователь будет вводить число — условную сумму денег для обмена. Если пользователь вводит букву «Y» или «y», то с помощью оператора break выходим из цикла и прекращаем работу программы. Иначе делим введенную сумму на обменный курс, с помощью функции round округляем результат и выводим его на консоль. И так до бесконечности, пока пользователь не захочет выйти из программы, нажав на клавишу Y.
Консольный вывод программы:
Для выхода нажмите Y
Введите сумму для обмена: 20000
К выдаче 357.14 долларов
Введите сумму для обмена: Y
Работа обменного пункта завершена
Но что, если пользователь введет отрицательное число? В этом случае программа также выдаст отрицательный результат, что не является корректным поведением. И в этом случае перед вычислением мы можем проверить значение, меньше ли оно нуля, и если меньше, с помощью оператора continue выполнить переход к следующей итерации цикла без его завершения:
#! Программа Обменный пункт
print(«Для выхода нажмите Y»)
while True:
data = input(«Введите сумму для обмена: «)
if data.lower() == «y»:
break # выход из цикла
money = int(data)
if money < 0:
print(«Сумма должна быть положительной!»)
continue
cache = round(money / 56, 2)
print(«К выдаче», cache, «долларов»)
print(«Работа обменного пункта завершена»)
Также обращаю внимание, что для определения, относится ли инструкция к блоку while или к вложенной конструкции if, опять же используются отступы.
И в этом случае мы уже не сможем получить результат для отрицательной суммы:
Для выхода нажмите Y
Введите сумму для обмена: -20000
Сумма должна быть положительной!
Введите сумму для обмена: 20000
К выдаче 357.14 долларов
Введите сумму для обмена: y
Работа обменного пункта завершена
Функции
Функции представляют блок кода, который выполняет определенную задачу и который можно повторно использовать в других частях программы. Формальное определение функции:
def имя_функции ([параметры]):
инструкции
Определение функции начинается с выражения def, которое состоит из имени функции, набора скобок с параметрами и двоеточия. Параметры в скобках необязательны. А со следующей строки идет блок инструкций, которые выполняет функция. Все инструкции функции имеют отступы от начала строки.
Например, определение простейшей функции:
def say_hello():
print(«Hello»)
Функция называется say_hello. Она не имеет параметров и содержит одну единственную инструкцию, которая выводит на консоль строку «Hello».
Для вызова функции указывается имя функции, после которого в скобках идет передача значений для всех ее параметров. Например:
def say_hello():
print(«Hello»)
say_hello()
say_hello()
say_hello()
Здесь три раза подряд вызывается функция say_hello. В итоге мы получим следующий консольный вывод:
Hello
Hello
Hello
Теперь определим и используем функцию с параметрами:
def say_hello(name):
print(«Hello,»,name)
say_hello(«Tom»)
say_hello(«Bob»)
say_hello(«Alice»)
Функция принимает параметр name, и при вызове функции мы можем передать вместо параметра какой-либо значение:
Hello, Tom
Hello, Bob
Hello, Alice
Значения по умолчанию
Некоторые параметры функции мы можем сделать необязательными, указав для них значения по умолчанию при определении функции. Например:
def say_hello(name=»Tom»):
print(«Hello,», name)
say_hello()
say_hello(«Bob»)
Здесь параметр name является необязательным. И если мы не передаем при вызове функции для него значение, то применяется значение по умолчанию, то есть строка «Tom».
Именованные параметры
При передаче значений функция сопоставляет их с параметрами в том порядке, в котором они передаются. Например, пусть есть следующая функция:
def display_info(name, age):
print(«Name:», name, «\t», «Age:», age)
display_info(«Tom», 22)
При вызове функции первое значение «Tom» передается первому параметру — параметру name, второе значение — число 22 передается второму параметру — age. И так далее по порядку. Использование именованных параметров позволяет переопределить порядок передачи:
def display_info(name, age):
print(«Name:», name, «\t», «Age:», age)
display_info(age=22, name=»Tom»)
Именованные параметры предполагают указание имени параметра с присвоением ему значения при вызове функции.
Неопределенное количество параметров
С помощью символа звездочки можно определить неопределенное количество параметров:
def sum(*params):
result = 0
for n in params:
result += n
return result
sumOfNumbers1 = sum(1, 2, 3, 4, 5) # 15
sumOfNumbers2 = sum(3, 4, 5, 6) # 18
print(sumOfNumbers1)
print(sumOfNumbers2)
В данном случае функция sum принимает один параметр — *params, но звездочка перед названием параметра указывает, что фактически на место этого параметра мы можем передать неопределенное количество значений или набор значений. В самой функции с помощью цикла for можно пройтись по этому набору и произвести с переданными значениями различные действия. Например, в данном случае возвращается сумма чисел.
Возвращение результата
Функция может возвращать результат. Для этого в функции используется оператор return, после которого указывается возвращаемое значение:
def exchange(usd_rate, money):
result = round(money/usd_rate, 2)
return result
result1 = exchange(60, 30000)
print(result1)
result2 = exchange(56, 30000)
print(result2)
result3 = exchange(65, 30000)
print(result3)
Поскольку функция возвращает значение, то мы можем присвоить это значение какой-либо переменной и затем использовать ее: result2 = exchange(56, 30000).
В Python функция может возвращать сразу несколько значений:
def create_default_user():
name = «Tom»
age = 33
return name, age
user_name, user_age = create_default_user()
print(«Name:», user_name, «\t Age:», user_age)
Здесь функция create_default_user возвращает два значения: name и age. При вызове функции эти значения по порядку присваиваются переменным user_name и user_age, и мы их можем использовать.
Функция «main»
В программе может быть определено множество функций. И чтобы всех их упорядочить, хорошей практикой считается добавление специальной функции main, в которой потом уже вызываются другие функции:
def main():
say_hello(«Tom»)
usd_rate = 56
money = 30000
result = exchange(usd_rate, money)
print(«К выдаче», result, «долларов»)
def say_hello(name):
print(«Hello,», name)
def exchange(usd_rate, money):
result = round(money/usd_rate, 2)
return result
# Вызов функции main
main()
Область видимости переменных
Область видимости или scope определяет контекст переменной, в рамках которого ее можно использовать. В Python есть два типа контекста: глобальный и локальный.
Глобальный контекст подразумевает, что переменная является глобальной, она определена вне любой из функций и доступна любой функции в программе. Например:
name = «Tom»
def say_hi():
print(«Hello», name)
def say_bye():
print(«Good bye», name)
say_hi()
say_bye()
Здесь переменная name является глобальной и имеет глобальную область видимости. И обе определенные здесь функции могут свободно ее использовать.
В отличие от глобальных переменных локальная переменная определяется внутри функции и доступна только из этой функции, то есть имеет локальную область видимости:
def say_hi():
name = «Sam»
surname = «Johnson»
print(«Hello», name, surname)
def say_bye():
name = «Tom»
print(«Good bye», name)
say_hi()
say_bye()
В данном случае в каждой из двух функций определяется локальная переменная name. И хотя эти переменные называются одинаково, но тем не менее это дву разных переменных, каждая из которых доступна только в рамках своей функции. Также в функции say_hi определена переменная surname, которая также является локальной, поэтому в функции say_bye мы ее использовать не сможем.
Есть еще один вариант определения переменной, когда локальная переменная скрывают глобальную с тем же именем:
name = «Tom»
def say_hi():
print(«Hello», name)
def say_bye():
name = «Bob»
print(«Good bye», name)
say_hi() # Hello Tom
say_bye() # Good bye Bob
Здесь определена глобальная переменная name. Однако в функции say_bye определена локальная переменная с тем же именем name. И если функция say_hi использует глобальную переменную, то функция say_bye использует локальную переменную, которая скрывает глобальную.
Если же мы хотим изменить в локальной функции глобальную переменную, а не определить локальную, то необходимо использовать ключевое слово global:
def say_bye():
global name
name = «Bob»
print(«Good bye», name)
В Python, как и во многих других языках программирования, не рекомендуется использовать глобальные переменные. Единственной допустимой практикой является определение небольшого числа глобальных констант, которые не изменяются в процессе работы программы.
PI = 3.14
# вычисление площади круга
def get_circle_square(radius):
print(«Площадь круга с радиусом», radius, «равна», PI * radius * radius)
get_circle_square(50)
В данном случае число 3.14 представлено константой PI. Понятно, что это значение в принципе не изменится, поэтому его можно вынести из функций и определить в виде константы. Как правило, имя константы определяется заглавными буквами.
Модули
Модуль в языке Python представляет отдельный файл с кодом, который можно повторно использовать в других программах.
Для создания модуля необходимо создать собственно файл с расширением *.py, который будет представлять модуль. Название файла будет представлять название модуля. Затем в этом файле надо определить одну или несколько функций.
Пусть основной файл программы будет называться hello.py. И мы хотим подключить к нему внешние модули.
Для этого сначала определим новый модуль: создадим новый файл, который назовем account.py, в той же папке, где находится hello.py. Если используется PyCharm или другая IDE, то оба файла просто помещаются в один проект.
Соответственно модуль будет называться account. И определим в нем следующий код:
def calculate_income(rate, money, month):
if money <= 0:
return 0
for i in range(1, month+1):
money = round(money + money * rate / 100 / 12, 2)
return money
Здесь определена функция calculate_income, которая в качестве параметров получает процентную ставку вклада, сумму вклада и период, на который делается вклад, и высчитывает сумму, которая получится в конце данного периода.
В файле hello.py используем данный модуль:
#! Программа Банковский счет
import account
rate = int(input(«Введите процентную ставку: «))
money = int(input(«Введите сумму: «))
period = int(input(«Введите период ведения счета в месяцах: «))
result = account.calculate_income(rate, money, period)
print(«Параметры счета:\n», «Сумма: «, money, «\n», «Ставка: «, rate, «\n»,
«Период: «, period, «\n», «Сумма на счете в конце периода: «, result)
Для использования модуля его надо импортировать с помощью оператора import, после которого указывается имя модуля: import account.
Чтобы обращаться к функциональности модуля, нам нужно получить его пространство имен. По умолчанию оно будет совпадать с именем модуля, то есть в нашем случае также будет называться account.
Получив пространство имен модуля, мы сможем обратиться к его функциям по схеме пространство_имен.функция:
account.calculate_income(rate, money, period)
И после этого мы можем запустить главный скрипт hello.py, и он задействует модуль account.py. В частности, консольный вывод мог бы быть следующим:
Введите процентную ставку: 10Введите сумму: 300000Введите период ведения счета в месяцах: 6Параметры счета: Сумма: 300000 Ставка: 10 Период: 6 Сумма на счете в конце периода: 315315.99
Настройка пространства имен
По умолчанию при импорте модуля он доступен через одноименное пространство имен. Однако мы можем переопределить это поведение. Так, ключевое слово as позволяет сопоставить модуль с другим пространством имен. Например:
import account as acc
#……………
result = acc.calculate_income(rate, money, period)
В данном случае пространство имен будет называться acc.
Другой вариант настройки предполагает импорт функциональности модуля в глобальное пространство имен текущего модуля с помощью ключевого слова from:
from account import calculate_income
#……………
result = calculate_income(rate, money, period)
В данном случае мы импортируем из модуля account в глобальное пространство имен функцию calculate_income. Поэтому мы сможем ее использовать без указания пространства имен модуля как если бы она была определена в этом же файле.
Если бы в модуле account было бы несколько функций, то могли бы их импортировать в глобальное пространство имен одним выражением:
from account import *
#……………
result = calculate_income(rate, money, period)
Но стоит отметить, что импорт в глобальное пространство имен чреват коллизиями имен функций. Например, если у нас том же файле определена функция с тем же именем, то при вызове функции мы можем получить ошибку. Поэтому лучше избегать использования импорта в глобальное пространство имен.
Имя модуля
В примере выше модуль hello.py, который является главным, использует модуль account.py. При запуске модуля hello.py программа выполнит всю необходимую работу. Однако, если мы запустим отдельно модуль account.py сам по себе, то ничего на консоли не увидим. Ведь модуль просто определяет функцию и невыполняет никаких других действий. Но мы можем сделать так, чтобы модуль account.py мог использоваться как сам по себе, так и подключаться в другие модули.
При выполнении модуля среда определяет его имя и присваивает его глобальной переменной __name__ (с обеих сторон два подчеркивания). Если модуль является запускаемым, то его имя равно __main__ (также по два подчеркивания с каждой стороны). Если модуль используется в другом модуле, то в момент выполнения его имя аналогично названию файла без расширения py. И мы можем это использовать. Так, изменим содержимое файла account.py:
def calculate_income(rate, money, month):
if money <= 0:
return 0
for i in range(1, month+1):
money = round(money + money * rate / 100 / 12, 2)
return money
def main():
rate = 10
money = 100000
period = 12
result = calculate_income(rate, money, period)
print(«Параметры счета:\n», «Сумма: «, money, «\n», «Ставка: «, rate, «\n»,
«Период: «, period, «\n», «Сумма на счете в конце периода: «, result)
if __name__==»__main__»:
main()
Кроме того, для тестирования функции определена главная функция main. И мы можем сразу запустить файл account.py отдельно от всех и протестировать код.
Следует обратить внимание на вызов функции main:
if __name__==»__main__»:
main()
Переменная __name__ указывает на имя модуля. Для главного модуля, который непосредственно запускается, эта переменная всегда будет иметь значение __main__ вне зависимости от имени файла.
Поэтому, если мы будем запускать скрипт account.py отдельно, сам по себе, то Python присвоит переменной __name__ значение __main__, далее в выражении if вызовет функцию main из этого же файла.
Однако если мы будем запускать другой скрипт, а этот — account.py — будем подключать в качестве вспомогательного, для account.py переменная __name__ будет иметь значение account. И соответственно метод main в файле account.py не будет работать.
Данный подход с проверкой имени модуля является более рекомендуемым подходом, чем просто вызов метода main.
В файле hello.py также можно сделать проверку на то, является ли модуль главным (хотя в прицнипе это необязательно):
#! Программа Банковский счет
import account
def main():
rate = int(input(«Введите процентную ставку: «))
money = int(input(«Введите сумму: «))
period = int(input(«Введите период ведения счета в месяцах: «))
result = account.calculate_income(rate, money, period)
print(«Параметры счета:\n», «Сумма: «, money, «\n», «Ставка: «, rate, «\n»,
«Период: «, period, «\n», «Сумма на счете в конце периода: «, result)
if __name__ == «__main__»:
main()
Обработка исключений
При программировании на Python мы можем столкнуться с двумя типами ошибок. Первый тип представляют синтаксические ошибки (syntax error). Они появляются в результате нарушения синтаксиса языка программирования при написании исходного кода. При наличии таких ошибок программа не может быть скомпилирована. При работе в какой-либо среде разработки, например, в PyCharm, IDE сама может отслеживать синтаксические ошибки и каким-либо образом их выделять.
Второй тип ошибок представляют ошибки выполнения (runtime error). Они появляются в уже скомпилированной программе в процессе ее выполнения. Подобные ошибки еще называются исключениями. Например, в прошлых темах мы рассматривали преобразование числа в строку:
string = «5»
number = int(string)
print(number)
Данный скрипт успешно скомпилируется и выполнится, так как строка «5» вполне может быть конвертирована в число. Однако возьмем другой пример:
string = «hello»
number = int(string)
print(number)
При выполнении этого скрипта будет выброшено исключение ValueError, так как строку «hello» нельзя преобразовать в число. С одной стороны, здесь очевидно, сто строка не представляет число, но мы можем иметь дело с вводом пользователя, который также может ввести не совсем то, что мы ожидаем:
string = input(«Введите число: «)
number = int(string)
print(number)
При возникновении исключения работа программы прерывается, и чтобы избежать подобного поведения и обрабатывать исключения в Python есть конструкция try..except, которая имеет следующее формальное определение:
try:
инструкции
except [Тип_исключения]:
инструкции
Весь основной код, в котором потенциально может возникнуть исключение, помещается после ключевого слова try. Если в этом коде генерируется исключение, то работа кода в блоке try прерывается, и выполнение переходит в блок except.
После ключевого слова except опционально можно указать, какое исключение будет обрабатываться (например, ValueError или KeyError). После слова except на следующей стоке идут инструкции блока except, выполняемые при возникновении исключения.
Рассмотрим обработку исключения на примере преобразовании строки в число:
try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except:
print(«Преобразование прошло неудачно»)
print(«Завершение программы»)
Вводим строку:
Введите число: hello
Преобразование прошло неудачно
Завершение программы
Как видно из консольного вывода, при вводе строки вывод числа на консоль не происходит, а выполнение программы переходит к блоку except.
Вводим правильное число:
Введите число: 22
Введенное число: 22
Завершение программы
Теперь все выполняется нормально, исключение не возникает, и соответственно блок except не выполняется.
В примере выше обрабатывались сразу все исключения, которые могут возникнуть в коде. Однако мы можем конкретизировать тип обрабатываемого исключения, указав его после слова except:
try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except ValueError:
print(«Преобразование прошло неудачно»)
print(«Завершение программы»)
Если ситуация такова, что в программе могут быть сгенерированы различные типы исключений, то мы можем их обработать по отдельности, используя дополнительные выражения except:
try:
number1 = int(input(«Введите первое число: «))
number2 = int(input(«Введите второе число: «))
print(«Результат деления:», number1/number2)
except ValueError:
print(«Преобразование прошло неудачно»)
except ZeroDivisionError:
print(«Попытка деления числа на ноль»)
except Exception:
print(«Общее исключение»)
print(«Завершение программы»)
Если возникнет исключение в результате преобразования строки в число, то оно будет обработано блоком except ValueError. Если же второе число будет равно нулю, то есть будет деление на ноль, тогда возникнет исключение ZeroDivisionError, и оно будет обработано блоком except ZeroDivisionError.
Тип Exception представляет общее исключение, под которое попадают все исключительные ситуации. Поэтому в данном случае любое исключение, которое не представляет тип ValueError или ZeroDivisionError, будет обработано в блоке except Exception:.
Блок finally
При обработке исключений также можно использовать необязательный блок finally. Отличительной особенностью этого блока является то, что он выполняется вне зависимости, было ли сгенерировано исключение:
try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except ValueError:
print(«Не удалось преобразовать число»)
finally:
print(«Блок try завершил выполнение»)
print(«Завершение программы»)
Как правило, блок finally применяется для освобождения используемых ресурсов, например, для закрытия файлов.
Получение информации об исключении
С помощью оператора as мы можем передать всю информацию об исключении в переменную, которую затем можно использовать в блоке except:
try:
number = int(input(«Введите число: «))
print(«Введенное число:», number)
except ValueError as e:
print(«Сведения об исключении», e)
print(«Завершение программы»)
Пример некорректного ввода:
Введите число: fdsf
Сведения об исключении invalid literal for int() with base 10: ‘fdsf’
Завершение программы
Генерация исключений
Иногда возникает необходимость вручную сгенерировать то или иное исключение. Для этого применяется оператор raise.
try:
number1 = int(input(«Введите первое число: «))
number2 = int(input(«Введите второе число: «))
if number2 == 0:
raise Exception(«Второе число не должно быть равно 0»)
print(«Результат деления двух чисел:», number1/number2)
except ValueError:
print(«Введены некорректные данные»)
except Exception as e:
print(e)
print(«Завершение программы»)
При вызове исключения мы можем ему передать сообщение, которое затем можно вывести пользователю:
Введите первое число: 1
Введите второе число: 0
Второе число не должно быть равно 0
Завершение программы
Python – это высокоуровневый язык программирования, который широко используется в различных сферах: от науки до бизнеса. Одна из главных причин его популярности – это простота и доступность для начинающих. Основы языка Python включают в себя знание инструкций и выражений, необходимых для написания программ.
Инструкции – это команды, которые задают действия, которые должны выполниться при выполнении программы. Выражения – это группы символов, которые описывают операции с данными, такие как математические действия, условные операторы и циклы.
В Python существует множество типов выражений, включая арифметические, поразрядные, логические и строковые выражения. Инструкции могут быть условными, циклическими или иными, обеспечивающими более сложные алгоритмы программы.
В этой статье мы рассмотрим основные инструкции и выражения в Python, необходимые для того, чтобы начать программировать на этом языке.
Содержание
- Что такое Python?
- Описание языка Python
- Основные инструкции и выражения в Python
- Операторы присваивания
- Условные операторы
- Циклические операторы
- Операторы ввода-вывода
- Функции ввода-вывода
- Обработка исключений
- Функции в Python
- Описание функций
- Встроенные функции
- Структуры данных в Python
- Списки
- Кортежи
- Словари
- Модули и пакеты в Python
- Описание модулей и пакетов
- Импортирование модулей
- Вопрос-ответ:
- Что такое инструкции и выражения в Python?
- Как определить тип переменной в Python?
- Что такое логические выражения в Python?
- Как работает операторы цикла for в Python?
- Чем отличается инструкция if от инструкции elif в Python?
- Какие функции используются для работы со строками в Python?
- Видео:
- 15 Условный оператор if Python. Если Python
Что такое Python?
Python – это язык программирования высокого уровня, который был разработан в 1991 году Гвидо ван Россумом. Он отличается простотой и наглядностью, поэтому его часто используют при обучении программированию.
Python поддерживает множество парадигм программирования, включая объектно-ориентированную, функциональную и процедурную. Он часто используется для написания скриптов, автоматизации задач и создания веб-приложений.
Python имеет огромное сообщество разработчиков, которые создают множество библиотек и фреймворков, которые делают работу с языком еще более простой и удобной.
Существует множество примеров успешного использования Python в индустрии, включая большие компании, такие как Google, Dropbox, Instagram и Spotify, которые используют его для своих сложных систем.
Кроме того, Python имеет чистый синтаксис, что позволяет легко читать и понимать код других разработчиков. Это также делает его более доступным и простым в использовании для новичков.
В целом, Python является очень гибким и мощным языком программирования, который отлично подходит для широкого спектра задач и проектов.
Описание языка Python
Python – высокоуровневый язык программирования общего назначения, который был создан в 1991 году Гвидо ван Россумом. Python имеет динамическую типизацию и автоматическое управление памятью, что делает его очень удобным для быстрой разработки приложений и прототипирования.
Python широко используется во многих областях, включая веб-разработку, научные вычисления, обработку данных, искусственный интеллект, игры и многое другое. Один из главных принципов языка Python – “читаемость кода”, что делает его более понятным и доступным для новичков и профессионалов.
Синтаксис языка Python очень простой и интуитивно понятный. Python использует английские слова и форматирование строки, чтобы сделать код читаемым. Например, для написания цикла используется ключевое слово “for”, а ветвление – “if”.
Python имеет широкую стандартную библиотеку, которая включает в себя множество функций и модулей, упрощающих разработку приложений и выполнение различных задач.
Python имеет интерпретируемую модель выполнения, что означает, что он не нуждается в компиляции для запуска, и код Python может быть выполнен на любой платформе с установленным интерпретатором Python.
Популярные фреймворки Python веб-разработки включают Django, Flask и Pyramid. Они предоставляют разработчикам множество инструментов для создания полнофункциональных веб-приложений, которые могут работать на любой платформе.
В целом, Python – сильный, гибкий язык программирования, наделенный широкими возможностями и инструментами для создания практически любого приложения или продукта.
Основные инструкции и выражения в Python
Python является одним из наиболее популярных языков программирования в мире. Он обладает простым синтаксисом, динамической типизацией и широкими возможностями в области разработки программного обеспечения. В этом языке есть множество инструкций и выражений, которые позволяют программистам решать различные задачи.
Инструкции
- if, elif, else – условные операторы;
- while, for – циклы;
- def – определение функций;
- class – создание классов;
- with – контекстный менеджер;
- try, except – обработка исключений;
- import – импорт модулей;
- raise – возбудить исключение.
Выражения
- арифметические – сложение, вычитание, умножение, деление и т.д.;
- логические – and, or, not;
- сравнения – ==, !=, >, <, >=, <=;
- присваивания – =, +=, -=, *=, /=;
- функции – abs, round, len, type;
- строки – конкатенация, поиск подстроки, замена подстроки;
- списки – обращение по индексу, сложение, добавление, удаление элементов.
| Оператор | Описание | Пример |
|---|---|---|
| if | Условный оператор | if x == 5: |
| while | Цикл while | while x < 10: |
| for | Цикл for | for i in range(0, 5): |
| def | Определение функции | def hello(name): |
| class | Определение класса | class MyClass: |
| try | Блок обработки исключений | try: |
| raise | Генерация исключения | raise ValueError(“Invalid value”) |
Важно понимать, что эти инструкции и выражения – лишь малая часть возможностей языка Python. Для более глубокого изучения рекомендуется ознакомиться с официальной документацией и написать свой первый скрипт на Python.
Операторы присваивания
В Python операторы присваивания служат для присвоения значения переменной.
Самый простой оператор присваивания – знак “=”. Например, чтобы присвоить значение 5 переменной x, нужно написать:
x = 5
Кроме этого, в Python есть операторы присваивания с применением арифметических операций. Например:
x += 2 # x = x + 2x -= 3 # x = x - 3x *= 4 # x = x * 4x /= 5 # x = x / 5
Также в Python есть операторы присваивания с применением других операций, таких как бинарный сдвиг, битовое ИЛИ, битовое И и т.д. Например:
x <<= 2 # x = x << 2x |= 3 # x = x | 3x &= 4 # x = x & 4
Операторы присваивания могут быть использованы в цепочке. Например, если нужно увеличить переменную x на 1, вычесть из нее 2 и затем умножить на 3, можно написать:
x = 5
x += 1
x -= 2
x *= 3
Такая запись эквивалентна записи:
x = ((x + 1) - 2) * 3
или
x = x + 1 - 2
x = x * 3
В Python также можно использовать оператор разделения на части для присваивания нескольких переменных сразу. Например:
a, b, c = 1, 2, 3
В результате a будет равно 1, b будет равно 2, а c будет равно 3.
Условные операторы
Условные операторы позволяют программе выполнять различные команды в зависимости от значения переменных или пользовательского ввода. В Python используется оператор if-else для создания условий.
Синтаксис оператора if:
- Ключевое слово if.
- Условие, заключенное в круглые скобки.
- Двоеточие.
- Код, который будет выполняться при истинности условия, с отступом в четыре пробела или один табулятор.
При необходимости можно добавить блоки elif и else для обработки других вариантов:
Синтаксис оператора if-else с блоком elif и else:
- Ключевое слово if.
- Условие, заключенное в круглые скобки.
- Двоеточие.
- Код, который будет выполняться при истинности условия, с отступом в четыре пробела или один табулятор.
- Опциональный блок elif с новым условием и кодом для выполнения.
- Опциональный блок else с кодом для выполнения, если условие if и все блоки elif ложны.
Пример использования оператора if:
age = int(input("Please enter your age: "))
if age < 18:
print("You are not allowed to drink alcohol.")
В этом примере программа запрашивает у пользователя его возраст и выводит сообщение, если возраст меньше 18 лет.
Циклические операторы
Циклические операторы — это инструкции, которые позволяют выполнять повторяющиеся действия. Они имеются в большинстве языков программирования, в том числе и в Python.
В языке Python существует два типа циклических операторов: цикл while и цикл for.
Цикл while используется для повторения блока инструкций, пока определенное условие истинно. Простой пример использования цикла while:
count = 0
while count < 5:
print("Count is:", count)
count += 1
Этот код будет выводить значение переменной count, пока оно не достигнет значения 5.
Цикл for используется для итерации по последовательности (например, списку или кортежу) и выполнения блока инструкций для каждого элемента в этой последовательности. Пример использования цикла for:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print("I like", fruit)
Этот код будет выводить фразу «I like {название фрукта}» для каждого элемента списка fruits.
Вывод: циклические операторы в Python позволяют повторять набор инструкций несколько раз в зависимости от определенного условия. Цикл while работает до тех пор, пока условие (выражение) истинно, а цикл for используется для итерации по последовательности и выполнения блока инструкций для каждого элемента этой последовательности.
Операторы ввода-вывода
В Python операторы ввода-вывода позволяют получать данные от пользователя и выводить информацию на экран. Для этого используются функции input() и print().
Функция input() используется для получения данных от пользователя. Она принимает опциональный аргумент – строку-приглашение для ввода данных. После ввода данных они будут преобразованы в строку. Пример использования функции:
name = input("Введите ваше имя: ")
print("Привет, " + name + "!")
В данном примере функция input используется для получения имени от пользователя. Затем это имя выводится на экран вместе с приветствием.
Функция print() используется для вывода информации на экран. Она может принимать несколько аргументов, которые будут выведены через пробелы. Пример использования функции:
print("Hello, world!")
print("The answer is", 42)
В данном примере функция print выводит на экран строку «Hello, world!» и числовое значение 42 (второй аргумент). При этом между «is» и 42 будет выведен пробел, потому что мы передали два аргумента.
Кроме того, в Python есть специальная функция вывода информации format(), которая позволяет подставлять переменные в строку при выводе. Пример использования:
name = "John"
age = 30
print("My name is {} and I am {} years old.".format(name, age))
Здесь мы использовали фигурные скобки {} внутри строки для обозначения мест, куда нужно вставить значения переменных. Аргументы функции format передаются в скобках через запятую.
Также для вывода информации можно использовать функцию f-strings, которые являются более современным способом форматирования строк. Пример:
name = "John"
age = 30
print(f"My name is {name} and I am {age} years old.")
Здесь мы использовали префикс f перед строкой, а внутри строки в фигурных скобках написали название переменных.
Функции ввода-вывода
Функции ввода-вывода являются одними из наиболее важных функций в Python. Они позволяют пользователям взаимодействовать с программами, которые они написали, путем ввода данных и получения выходных данных.
Функция input() используется для получения ввода от пользователя. Она позволяет пользователям ввести текстовые данные, которые затем могут быть использованы в программе. Функция print() используется для вывода данных на экран. Она может выводить как текстовые строки, так и числовые значения.
Кроме того, Python также предоставляет другие функции для работы с файлами. Функции open(), read() и write() могут быть использованы для открытия, чтения и записи файлов соответственно. Эти функции являются необходимыми для работы с файлами и обработки данных.
Одна из мощных особенностей Python — это возможность использования стандартных потоков ввода и вывода. Это означает, что программа может обрабатывать данные, как если бы они были введены с клавиатуры или выводились на экран, даже если они читаются из файла или записываются в файл.
В целом, функции ввода-вывода в Python — это важный компонент языка. Они позволяют программистам создавать программы, которые могут взаимодействовать с пользователем и обрабатывать данные из различных источников.
- input() — получение данных от пользователя;
- print() — вывод данных на экран;
- open() — открытие файла;
- read() — чтение из файла;
- write() — запись в файл.
Также можно использовать стандартные потоки ввода и вывода для обработки данных с учетом их источника и назначения.
| Функция | Назначение |
|---|---|
| input() | Получение данных от пользователя |
| print() | Вывод данных на экран |
| open() | Открытие файла |
| read() | Чтение из файла |
| write() | Запись в файл |
Обработка исключений
Исключение – это ошибка, возникающая в программе во время ее выполнения. Исключения могут возникать по разным причинам: от ошибок ввода-вывода и доступа к файлам до синтаксических ошибок и деления на ноль.
В Python есть механизм работы с исключениями, который позволяет определить, какая ошибка произошла, и выполнить соответствующие действия для ее обработки. Для обработки исключений используются конструкции try и except.
Конструкция try-except заключает в себе два блока кода: основной блок (try) и блок обработки исключений (except). Код в блоке try выполняется нормально, если возникает исключение, то выполнение кода основного блока прекращается и управление передается блоку except, где выполняется код для обработки исключения.
Кроме блока except есть дополнительные блоки: else и finally. В блоке else можно указать код, который будет выполнен, если в блоке try не будет произведено никаких исключений. А в блоке finally можно указать код, который всегда будет выполнен, независимо от того, возникло ли исключение или не произошло.
Для обработки конкретных исключений в блоке except можно указать тип исключения. Например, для обработки исключения деления на ноль нужно указать тип исключения ZeroDivisionError:
- try:
- a = 1 / 0
- except ZeroDivisionError:
- print(«Ошибка. Деление на ноль!»)
Этот пример показывает, что при попытке выполнить деление на ноль будет выведено сообщение об ошибке. Таким образом, обработка исключений позволяет программисту предусмотреть возможные ошибки и написать код, который будет обрабатывать их, тем самым сделав программу более надежной и безопасной.
Функции в Python
Функции в Python — это блоки кода, которые могут быть многократно использованы в программе. Они позволяют выделить часть кода в отдельную структуру и вызывать ее при необходимости. Они также улучшают читабельность кода и позволяют создавать более удобные программы.
Функции в Python создаются с помощью ключевого слова «def», за которым следует имя функции и аргументы в скобках. Затем идет блок кода, который выполнится при вызове функции. Функции могут возвращать значения с помощью ключевого слова «return».
Передавать аргументы в функцию можно двумя способами: по позиции и по имени. При передаче аргументов по позиции они передаются в порядке, в котором они указаны в определении функции. При передаче аргументов по имени они передаются в виде «имя=значение», что позволяет передавать аргументы в любом порядке.
- Функции могут быть определены в любом месте в программе, в том числе внутри других функций.
- Функции могут иметь переменное число аргументов.
- Функции могут быть рекурсивными, то есть вызывать саму себя.
Пример функции:
def say_hello(name):print("Привет, " + name + "!")
say_hello("Вася") # Выводит "Привет, Вася!"
Функции — это неотъемлемая часть языка Python и могут существенно упростить написание и понимание кода. Они позволяют декомпозировать сложные задачи на более мелкие, что упрощает работу и позволяет быстрее находить ошибки.
Описание функций
Функции – это блоки кода, которые могут быть вызваны многократно. Они выполняют определенную задачу и могут принимать аргументы для изменения своей работы. Функции позволяют избежать повторения одного и того же кода в разных частях программы, делают код более читабельным и облегчают его сопровождение.
В Python можно определять свои функции при помощи ключевого слова def, после которого указывается название функции и её аргументы. Внутри функции можно выполнять любые операции – работать со значениями, использовать циклы и ветвления, вызывать другие функции и т.д.
Одной из важных возможностей функций в Python является возможность возврата значения. Для этого используется ключевое слово return, которое указывает на то, какое значение нужно вернуть из функции. Если в функции нет операторов return, то она вернет значение None.
Функции могут быть разных типов в зависимости от того, какие значения они принимают и возвращают. Например, функции без аргументов, функции с позиционными или именованными аргументами, функции с переменным числом аргументов и т.д. Также существуют встроенные функции Python, которые включены в язык программирования и могут быть использованы без определения.
Важно помнить, что название функции должно наглядно отражать её назначение, а также обращаться к функциям нужно с использованием скобок, даже если нет аргументов. Также следует обращать внимание на области видимости переменных, которые могут быть определены как внутри функции, так и за её пределами.
Встроенные функции
Python содержит множество встроенных функций, которые могут быть использованы без дополнительных импортов или установок. Они являются частью языка Python и предоставляют базовую функциональность, необходимую для обработки данных и выполнения операций.
Некоторые из наиболее часто используемых встроенных функций включают в себя:
- print(): функция вывода содержимого на экран консоли.
- type(): функция определения типа переменной.
- len(): функция подсчета количества элементов в списке, кортеже или строке.
- range(): функция генерации последовательности чисел.
- input(): функция чтения пользовательского ввода.
В Python также доступны встроенные функции математической обработки, такие как:
- abs(): функция нахождения абсолютного значения числа.
- round(): функция округления числа.
- min(): функция нахождения минимального значения из переданных аргументов.
- max(): функция нахождения максимального значения из переданных аргументов.
- sum(): функция нахождения суммы всех элементов в списке или кортеже.
Встроенные функции дополняют инструментарий Python и позволяют более эффективно обрабатывать данные, выполнять математические операции и получать пользовательский ввод, что делает этот язык программирования очень мощным инструментом для решения различных задач.
Структуры данных в Python
Python предоставляет множество встроенных структур данных для хранения и обработки информации. Эти структуры данных используются для различных целей в программировании и могут быть многие из них позволяют упростить и ускорить написание кода.
Некоторые из наиболее часто используемых структур данных в Python включают:
- Списки (List) — это упорядоченный набор элементов, которые могут быть любых типов данных, изменяемый и индексируемый. Списки могут содержать дубликаты и могут быть изменены после их создания.
- Кортежи (Tuple) — это упорядоченный набор элементов, которые могут быть любых типов данных, неизменяемый и индексируемый. Кортежи могут содержать дубликаты и не могут быть изменены после их создания.
- Словари (Dictionary) — это неупорядоченный набор пар ключ-значение, изменяемый и индексируемый. Словари могут содержать дубликаты ключей, но каждый ключ должен быть уникальным. Значения могут быть любых типов данных.
- Множества (Set) — это неупорядоченный набор уникальных элементов любых типов данных, изменяемый. Множества поддерживают стандартные операции над множествами, такие как объединение, пересечение и разность.
Кроме того, Python также предоставляет структуры данных, такие как строки (Strings), битовые строки (Byte Strings), и другие. Каждая из этих структур данных имеет свои уникальные свойства и методы, которые могут быть использованы для решения различных задач.
Важно понимать, что выбор структуры данных зависит от специфики задачи, которую вы пытаетесь решить. В некоторых случаях одна структура данных может быть более эффективна, чем другая, и правильный выбор может повысить производительность кода и сделать его более понятным.
Списки
Списки в Python — это коллекции элементов, которые могут быть разного типа. Список создается путем помещения элементов в квадратные скобки и разделяя их запятыми:
my_list = [1, 2, 3, "four", "five"]
Списки индексируются, то есть каждый элемент имеет определенный порядковый номер. Индексы начинаются с 0, поэтому первый элемент списка имеет индекс 0, второй — 1 и так далее:
my_list[0] # вернет 1
my_list[3] # вернет "four"
Списки также могут содержать другие списки, образуя таким образом вложенные списки:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
В списке есть ряд методов, которые могут быть использованы для модификации и получения информации о списке. Некоторые из этих методов:
- append(): добавляет элемент в конец списка
- insert(): добавляет элемент в указанную позицию списка
- extend(): добавляет все элементы указанного списка в конец текущего списка
- remove(): удаляет первый найденный элемент с указанным значением
- pop(): удаляет и возвращает элемент с указанным индексом или последний элемент, если индекс не указан
Списки могут также использоваться для выполнения различных операций, например, для создания циклов, сортировки и слияния списков. Методы списка и возможности работы с ним делают его очень полезным инструментом при разработке программ на языке Python.
Кортежи
Кортеж — это неизменяемый тип данных в Python. Он похож на список, но отличается тем, что его элементы нельзя изменять, удалять или добавлять после создания.
Кортеж определяется круглыми скобками и может содержать элементы разных типов данных:
p = (1, ‘hello’, True, 3.14)
К элементам кортежа можно обращаться по индексу, как и в списке:
print(p[0]) # выводит 1
Также можно использовать срезы:
print(p[1:3]) # выводит (‘hello’, True)
Кортежи полезны в тех случаях, когда нужно сохранить несколько значений вместе и быть уверенным, что их нельзя будет изменить случайно в процессе выполнения программы. Они занимают меньше памяти, чем списки, и могут быть использованы в качестве ключей в словарях.
Как и в списке, можно использовать функции для работы с кортежами, например, функции len() и sorted(). Однако, нельзя использовать методы списка, такие как append() или insert().
| Операция | Результат |
|---|---|
| p = (1, ‘hello’, True) | Определение кортежа |
| print(p) | Вывод на экран: (1, ‘hello’, True) |
| print(p[1]) | Вывод на экран: hello |
| p[1] = ‘world’ | Ошибка выполнения программы, так как кортеж immutable |
Словари
Словари – это одна из важнейших структур данных в Python. Они позволяют связывать между собой пары ключ-значение. Ключ – это уникальное значение, по которому происходит доступ к хранимому значению. Значение может быть любого типа, включая другой словарь.
Создать словарь можно различными способами. Один из них – использование фигурных скобок {} и знака двоеточия для связывания ключа и значения: {‘key1’: ‘value1’, ‘key2’: ‘value2’}.
Чтобы обращаться к значению по ключу, необходимо указать его в квадратных скобках: my_dict[‘key1’], при этом вернется значение ‘value1’. Если указанный ключ отсутствует в словаре, будет сгенерировано исключение KeyError.
Словари удобно использовать для хранения настроек, параметров и других структур данных. Также имеется возможность получить список всех ключей (my_dict.keys()) и значений (my_dict.values()) словаря.
Для более сложных структур данных можно использовать вложенные словари, либо список словарей, либо словарь списков и т.д. Одним из вариантов является использование двойных словарей, где каждый ключ указывает на другой словарь: {‘key1’: {‘subkey1’: ‘value1’, ‘subkey2’: ‘value2’}, ‘key2’: {‘subkey3’: ‘value3’}}.
Словари – мощный инструмент для работы с данными в Python. Их гибкость и удобство использования делают словари одной из наиболее востребованных структур данных для любых проектов на языке Python.
Модули и пакеты в Python
В Python модуль – это файл с расширением .py, содержащий код Python в виде определения функций, классов и переменных. Модули позволяют организовывать большие проекты и повторно используемый код.
Чтобы использовать функции и классы в модуле в своей программе, нужно импортировать модуль с помощью ключевого слова import. Например, можно импортировать модуль math с функцией sqrt:
import math
print(math.sqrt(25))
Пакет – это каталог, содержащий модули и другие пакеты. Пакеты позволяют организовывать модули в логически связанные группы. Каждый пакет должен содержать файл с именем __init__.py, который выполняется при импортировании пакета. Файл __init__.py может быть пустым, но может также содержать код и определения, которые могут использоваться в модулях внутри пакета.
Для импорта модуля из пакета можно использовать один из двух способов:
- Импорт всего пакета:
- Импорт отдельной функции или класса:
import package_name.module_name
package_name.module_name.function_name()
from package_name.module_name import function_name
function_name()
Использование модулей и пакетов является важной частью разработки на Python и дает возможность организации кода, повышения эффективности и удобства его использования.
Описание модулей и пакетов
Модуль в Python — это файл с расширением .py, в котором содержатся определения функций, классов, переменных и других объектов Python. Модули в Python позволяют организовать программу на небольшие, понятные и легко поддерживаемые части.
Пакет в Python — это способ структурировать модули Python во вложенную иерархию каталогов. Пакеты позволяют организовать программный проект в виде древовидной структуры, улучшают читаемость и обеспечивают модульность кода.
Для того, чтобы импортировать определения из модуля в программный код, необходимо использовать конструкцию import. Возможны разные способы импорта: можно импортировать только нужные определения, можно переименовывать импортируемые объекты модуля.
Пример импорта из модуля:
import module_name
from module_name import object_name
import module_name as alias_name
Вложенные пакеты можно импортировать так:
from package_name.sub_package_name import object_name
Для упрощения импорта вы можете создать файл __init__.py в пакете, в котором будут определены все импортируемые объекты данного пакета, а также модули, которые входят в пакет.
Использование модулей и пакетов является важной частью разработки программ на Python, позволяя структурировать и организовать код для удобства работы над проектом.
Импортирование модулей
В Python, модули – это файлы, содержащие функции, переменные и другие компоненты. Чтобы использовать функции из модуля в своей программе, необходимо сначала импортировать необходимый модуль.
Импортирование модуля осуществляется с помощью команды import. Например, чтобы импортировать модуль math, необходимо написать:
import math
После этого в программе можно использовать функции из модуля math. Например:
import math
a = math.cos(0)
print(a)
Кроме команды import, существуют другие способы импортирования модулей:
- from module import function – импортирует только определенную функцию из модуля
- from module import * – импортирует все функции и переменные из модуля
Важно знать, что при импортировании модуля, Python выполняет все инструкции, находящиеся в этом модуле. Таким образом, модуль может содержать исполняемый код, а не только определение функций и переменных.
Использование модулей позволяет экономить время и упрощает написание программ, так как можно использовать уже готовые функции и библиотеки, не переписывая их с нуля.


%20-%20python%20(2)%20(1).gif?alt=media&token=702064a5-4e73-4086-8d80-455c6d3b2362)
%20-%20%20Spyder%20(Python%203.8).gif?alt=media&token=31c5e811-e0d2-42d0-96de-5f9207792f63)
%20-%20%20Spyder%20(Python%203.8)%20(1)%20(2).gif?alt=media&token=d0dfbc06-c39d-4fba-aa13-4eac255c4ba8)