Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на языке Python. Учебное пособие.pdf
X
- •ПРЕДИСЛОВИЕ
- •I. ВВЕДЕНИЕ В ПРОГРАММИРОВАНИЕ
- •1. Начало работы
- •2. Основные понятия
- •Ввод и вывод данных
- •Логические операторы
- •Условные инструкции
- •Инструкции
- •Типы данных
- •Константы и переменные
- •Арифметические операторы
- •Операторы сравнения
- •3. Функции
- •Определение функций
- •Встроенные функции
- •Многократное использование функций
- •Типы параметров функции
- •Область видимости
- •Обработка исключений
- •Строки документации
- •4. Контейнеры
- •Методы
- •Списки
- •Кортежи
- •Словари
- •Контейнеры внутри контейнеров
- •5. Операции со строками
- •6. Циклы
- •Цикл for
- •Цикл while
- •Операторы break и continue
- •Функция Enumerate
- •Вложенные циклы
- •Настройка функции print()
- •7. Модули
- •8. Файлы
- •Запись в файлы
- •Использование конструкции with
- •Чтение из файлов
- •CSV-файлы
- •II. ВВЕДЕНИЕ В ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ (ООП)
- •9. Парадигмы программирования
- •Состояние
- •Процедурное программирование
- •Функциональное программирование
- •Объектно-ориентированное программирование
- •10. Базовые понятия ООП
- •Наследование
- •Полиморфизм
- •Абстракция
- •Инкапсуляция
- •Композиция
- •11. Дополнительные понятия ООП
- •Как работают переменные
- •Ключевое слово is
- •Константа None
- •Классы – это объекты
- •Переменные класса и переменные экземпляра класса
- •Приватные переменные
- •Методы переопределения
- •Функция super
- •Переопределение встроенных методов
- •12. Создание игр
- •Карты
- •Колода
- •Игрок
- •Игра
- •Игра «War»
- •13. Bash
- •Запуск Bash
- •Использование Bash
- •Относительные и абсолютные пути
- •Навигация
- •Флаги
- •Редактор vim
- •Команда touch
- •Просмотр файлов командой less
- •Пользователи
- •Разрешения
- •Программы Bash
- •Скрытые файлы
- •Переменные окружения
- •Переменная окружения $PATH
- •Вертикальная черта (пайп)
- •Команда cat
- •Последние команды
- •Быстрые перемещения
- •Экранирование (escaping)
- •Регулярные выражения в Python
- •15. Менеджеры пакетов
- •Вкладка «Завершение»
- •Функция wildcard (подстановочный знак)
- •Другие инструменты
- •14. Регулярные выражения
- •Настройка
- •Простое совпадение
- •Игнорирование регистра
- •Вывод только конкретных совпадений слов
- •Совпадение в начале и в конце
- •Поиск совпадений с несколькими символами
- •Повторение
- •Диапазон
- •16. Управление версиями
- •Репозитории
- •Помещение и извлечение данных
- •Пример помещения данных
- •Пример извлечения данных
- •Откат версий
- •Команда git diff
- •Другой запрос на включение
- •IV. ВВЕДЕНИЕ В ИНФОРМАТИКУ
- •17. Структуры данных и алгоритмы
- •Что такое алгоритмы и структуры данных?
- •Нотация Big-O
- •Оператор деления по модулю
- •Сортировка методом пузырька
- •Поисковый алгоритм
- •Рекурсия
- •Абстрактные типы данных
- •Узлы
- •Стеки
- •Связанные списки
- •Массивы
- •Бинарные деревья
- •Поиск в ширину и в глубину
- •Хэш-таблицы
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Заголовок этой программы – ключевое слово for, за которым следует
двоеточие. Телом является оператор print("Привет, мир!") с отступом.
Пример из предыдущего раздела, содержащего несколько инструкций if
и elif, содержит три составных инструкции. Первая содержит три ветви, вторая – одну, а последняя – две.
Чтобы сделать код более читабельным, иногда добавляют пустое про-
странство. Заметим, что пробелы между инструкциями не влияют на правильность работы программы.
print("Валерий")
print("Харламов")
>> Валерий
>> Харламов
3. Функции
В общем виде функция представляет собой некоторый независимый фрагмент кода, выполняющий при своем вызове команды тела функции. Вызывается функция по имени. По своей сути она представляет собой небольшую программу, которая не выполняется автономно, а встраивается в основную программу. Часто функции называются подпрограммами. Благодаря функциям не
нужно каждый раз писать дублирующие инструкции для выполнения типовых
операций. Собственно, это главное предназначение функций – многократное
выполнение определенного фрагмента программы. Функции способны получать и возвращать данные из вызывающей программы. При вызове функции ей
передаются параметры (передача параметров (аргументов) функции).
Определение функций
При определении функции в Python необходимо:
1) выбрать имя функции;
2) определить параметры функции;
3) указать, что функция должна делать и какое значение возвращать.
21

Для определения функции используется следующий синтаксис:
# Синтаксис записи функции.
def имя_функции([параметры]):
определение_функции
Примечание. Использование квадратных скобок означает, что параметры
могут отсутствовать.
Пример. Определение функции f = x2.
def f(x):
return x ** 2
Функция определяется с помощью ключевого слова def, после которого
указывается имя функции. В имени функции нельзя использовать заглавные
буквы, а слова разделяются с помощью символа подчеркивания, вот_так. По-
сле имени функции в круглых скобках перечисляются один или несколько параметров и после скобок ставится двоеточие, а новая строка начинается с отступа в четыре пробела (как с любой другой составной инструкции). Любой код
с отступом в четыре пробела после двоеточия является определением функции.
В нашем примере это return x ** 2.
Ключевое слово return возвращает значение функции.
Пример. Вызов функции f = x
2
.
def f(x):
return x ** 2
y = f(2)
if y == 4:
print("y равно 4")
else:
print("y не равно 4")
>> y равно 4
Функция может иметь один или несколько параметров или вообще их не
иметь. Если функция не использует внешние параметры, то в скобках ничего не
ставят.
22

Пример. Вызов функции без параметров.
def f():
return 5 + 5
result = f()
print(result)
>> 10
Пример. Вызов функции с несколькими параметрами.
def f(a, b, c, x):
return a * x * x + b * x + c
result = f(1, 2, 3, 4)
print(result)
>> 28
Особо отметим, что функция может и не содержать инструкцию return.
Если ей нечего возвращать, то она возвращает значение None.
def f():
y = 3 + 2
result = f()
print(result)
>> None
Встроенные функции
Аналогично другим языкам программирования Python также содержит
библиотеку встроенных функций, которые выполняют стандартные расчеты.
Примером встроенной функции является уже многократно использованная
функция print.
Примером другой встроенной функции является функция len, возвраща-
ющая длину объекта, например строки (т.е. количество символов в ней):
len("Python")
>> 6
23

Еще одна встроенная функция str преобразует объект в строковый тип.
С помощью этой функции можно, например, преобразовать целое число в строку:
str(10)
>> '10'
Встроенная функция int преобразует объект в число целого типа:
int("5")
>> 5
Встроенная функция float преобразует объект в вещественное число:
float(25)
>> 25.0
Примечание. При использовании функций str, int, float
важно ис-
пользовать правильные параметры, которые могут быть преобразованы в строку, целое или вещественное число. В противном случае Python сгенерирует исключение. Например:
int("Python")
>> ValueError: invalid literal for int() with base 10:
'Python'
Встроенная функция input собирает информацию от пользователя:
age = input("Укажите возраст:")
int_age = int(age)
if int_age < 21:
print("Вы - молоды!")
else:
print("Ну вы и старик!")
>> Укажите возраст:
Функция input выводит на экран строку «Укажите возраст:», после
чего пользователь вводит ответ в виде числа, которое сохраняется в переменной age, и в дальнейшем с помощью функции int преобразуется из строки
в целое число. В дальнейшем с помощью конструкции if-else анализируется, какое сообщение требуется вывести.
24

Многократное использование функций
Особенностью функций является возможность использовать их многократно, а не только для вычислений и возвращения значений.
def even_odd(x):
if x % 2 == 0:
print("четное")
else:
print("нечетное")
even_odd(2)
even_odd(3)
>> четное
>> нечетное
В данном примере не было определено значение, которое должна была
возвращать функция, но она прекрасно работает, проверяя четность и нечетность входных параметров.
def even_odd():
n = input("введите число: ")
n = int(n)
if n % 2 == 0:
print("n - четное.")
else:
print("n – нечетное.")
even_odd()
even_odd()
even_odd()
>> введите число:
В данной программе поместили функциональность внутрь функции и вызвали ее трижды.
Типы параметров функции
В Python существуют два типа параметров функции: обязательные и необязательные (опциональные, или параметры, со значением по умолчанию).
25

Обязательные параметры нужно передать функции обязательно. При этом
нельзя указать иное количество параметров, чем указанное при определении
функции. Рассмотренные нами до сих пор функции имели только обязательные
параметры.
Необязательные параметры – это такие параметры, которые указаны со
значением по умолчанию и могут не передаваться при вызове функции.
Пример. Определение функции с необязательным параметром.
def f(x=2):
return x**x
print(f())
print(f(4))
>> 4
>> 256
Первый вызов функции осуществляется без передачи параметра. Ввиду того, что параметр необязательный, x получает значение 2, а функция получает
значение 4.
При втором вызове функции передается параметр 4. В этом случае функция игнорирует значение, заданное по умолчанию, x присваивается значение 4,
а функция уже получает значение 256.
Функция может иметь как обязательные, так и необязательные параметры,
но обязательные нужно определять в первую очередь.
def add_it(x, y=10):
return x + y
result = add_it(2)
print(result)
>> 12
Область видимости
Переменные в Python обладают так называемой областью видимости. Она
показывает, какая часть программы может находить и изменять значение переменной, и зависит от того, где в программе была определена переменная. Если
переменная определена в пределах функции (класса), то она обладает локаль-
ной областью видимости, а если за пределами функции, то –
26
глобальной.

x = 1
и, т.е. их можно находить и изменять из
Корректный код
Ошибочный код
def f():
>> 3
def f():
y = 2
z = 3
Так как переменные x, y, z определены вне функции (класса), то они обла-
дают глобальной областью видимост
любой части программы.
Пример. Переменные с глобальной областью видимости.
x = 1
y = 2
z = 3
def f():
print(x)
print(y)
print(z)
f()
>> 1
>> 2
>> 3
обладать локальной областью видимости, т.е. их можно будет находить и изменять только в пределах функции. В противном случае Python выдаст исключение.
x = 1
y = 2
z = 3
print(x)
print(y)
print(z)
f()
>> 1
>> 2
Если переменные x, y, z определить внутри функции (класса), то они будут
x = 1
y = 2
z = 3
print(x)
print(y)
print(z)
>> NameError: name 'x' is not defined
27

Если попытаться использовать переменную, определенную в функции за
ее пределами, то система воспримет это как использование еще не определенной переменной, что также приведет к выдаче исключения.
if x > 100:
print("x > 100")
>> NameError: name 'x' is not defined
Важно! Изменять глобальную переменную можно из любой части кода, но
если возникла необходимость изменить ее внутри локальной области видимости, требуется перед ней использовать ключевое слово global.
Пример. Изменение глобальной переменной внутри функции.
x = 100
def f():
global x
x += 1
print(x)
f()
>> 101
Обработка исключений
Необходимость в целесообразности обработки исключений покажем на
простом примере. Допустим, надо ввести последовательно два числа и поделить первое введенное число на второе. Очевидно, что если случайно в качестве второго числа ввести ноль, то программа выдаст исключение. Приведенным примером дело не ограничивается, и чтобы выйти из подобных затруднений, предотвратив возможные ошибки в программе, надо «перехватить» исключения с помощью ключевых слов try и except. Целесообразность такого
подхода в обработке исключений заключается в том, что программа не прерывается и не завершается аварийно, а может продолжать нормальную работу.
Пример. Корректное использование обработки исключений при вводе нуля в качестве делителя.
a = input("Введите число:")
b = input("Введите еще одно число:")
28

a = int(a)
b = int(b)
try:
print(a / b)
except ZeroDivisionError:
print("b не может быть нулем.")
>> Введите число:
>> 10
>> Введите еще одно число:
>> 0
>> b не может быть нулем.
При вводе в качестве b числа, отличного от нуля, исполняется ветвь try,
а ветвь except игнорируется. Если же ввести ноль, то вместо вывода исключения сработает ветвь except, и программа выведет текст b не может
быть нулем.
Прерывание возможно, если ошибочно ввести строку, которую нельзя пре-
образовать в целое число. Например:
a = input("Введите число:")
b = input("Введите еще одно число:")
a = int(a)
b = int(b)
try:
print(a / b)
except ZeroDivisionError:
print("b не может быть нулем.")
>> Введите число:
>> два
>> Введите еще одно число:
>> сто
>> ValueError: invalid literal for int() with base 10:
'два'
Возникшую ситуацию можно исправить, поместив операторы ввода внутрь
инструкции try и указав except искать два исключения.
29

try:
a = input("Введите число:")
b = input("Введите еще одно число:")
a = int(a)
b = int(b)
print(a / b)
except(ZeroDivisionError, ValueError):
print("Ошибка ввода.")
>> Введите число:
>> два
>> Введите еще одно число:
>> сто
>> Ошибка ввода.
Заметим, что не рекомендуется использовать в except переменные, определенные в try, так как исключение может возникнуть до того, как будет
определена переменная, и при срабатывании except выдаст исключение.
try:
100 / 0
c = "Я никогда не определюсь."
except ZeroDivisionError:
print(c)
>> NameError: name 'c' is not defined
Строки документации
При определении функции с параметрами считается хорошим тоном вверху писать комментарий, называемый строкой документации, поясняющий
пользователям тип данных, вызываемый данной функцией.
def add(x, y):
"""
Возвращает x + y.
:параметы x, y: целые числа.
:return: целочисленная сумма x и y.
"""
return x + y
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
