
Полная версия
Python: Курс продвинутого программирования. Часть первая
Sublime Text:
Тип: Мощный, быстрый и настраиваемый текстовый редактор.
Преимущества: Легкий, быстрый, с хорошей поддержкой плагинов.
Для кого: Те, кто ценит скорость и простоту, но хочет иметь расширенные возможности.
Atom:
Тип: Бесплатный, расширяемый текстовый редактор.
Преимущества: Похож на VS Code в плане гибкости и настроек.
Для кого: Хорошая альтернатива VS Code.
Наш рекомендация для начала:
Начните с Visual Studio Code. Это бесплатный, мощный и относительно простой в освоении инструмент. Установите расширение “Python” от Microsoft, и вы получите отличную среду для старта.
Установка VS Code:
Перейдите на сайт https://code.visualstudio.com/ и скачайте установщик для вашей операционной системы.
Запустите установщик и следуйте инструкциям.
После установки откройте VS Code.
Перейдите в раздел “Extensions” (значок квадратиков на боковой панели или Ctrl+Shift+X).
Найдите “Python” (от Microsoft) и нажмите “Install”.
Перезапустите VS Code, если потребуется.
Теперь, когда вы откроете файл .py в VS Code, он автоматически подсветит синтаксис, а при установленном расширении Python вы сможете легко запускать код, отлаживать его и использовать автодополнение.
1.7 Комментарии в коде: Зачем они нужны и как их писать
Код, который не понятен, бесполезен, даже если он работает. Комментарии – это ваши помощники в создании понятного и поддерживаемого кода.
Что такое комментарий?
Комментарий – это текст в вашей программе, который игнорируется интерпретатором Python. Он предназначен для людей, чтобы пояснить, что делает тот или иной участок кода, почему он написан именно так, или оставить какую-то важную заметку.
Как писать комментарии?
В Python есть два основных способа:
Однострочные комментарии: Начинаются с символа решетки (#). Все, что идет после # до конца строки, считается комментарием.
python
# Это однострочный комментарий. Он описывает следующую строку.
print("Привет!") # Этот комментарий расположен в конце строки.
x = 10 # Инициализация переменной x значением 10
Многострочные комментарии (или докстринги): Технически, в Python нет специального синтаксиса для многострочных комментариев, как, например, /* … */ в C++. Однако, для создания документации (docstrings) используются многострочные строки, заключенные в тройные кавычки (''' … ''' или """ … """). Они также игнорируются интерпретатором, если не назначены переменной или не являются первой строкой в модуле, классе или функции.
Docstrings: Это лучший способ документировать функции, классы и модули. Они могут быть прочитаны другими программами (например, для автоматической генерации документации).
python
def greet(name):
"""
Эта функция принимает имя пользователя в качестве аргумента
и выводит приветствие.
"""
print(f"Привет, {name}!")
"""
Это пример многострочного комментария,
который будет игнорироваться Python,
поскольку он не является docstring'ом
для функции, класса или модуля.
"""
Зачем использовать комментарии?
Пояснение сложной логики: Если какой-то алгоритм неочевиден, комментарии помогут понять его.
Документирование кода: Описание того, что делает функция, какие аргументы принимает, что возвращает.
Напоминания себе: “TODO: Исправить эту часть позже”, “HACK: Временное решение”.
Временное отключение кода: Вы можете закомментировать строку или блок кода, чтобы временно отключить его выполнение, вместо того чтобы удалять.
Лучшие практики комментирования:
Пишите комментарии к своему коду, а не к самому коду. Комментарий должен объяснять почему, а не что. Код сам по себе показывает, что он делает.
Плохо: i = i + 1 # Увеличиваем i на 1 (это очевидно из кода i = i + 1)
Хорошо: i = i + 1 # Инкрементируем счетчик попыток, пока не достигнем лимита
Поддерживайте комментарии в актуальном состоянии. Если вы меняете код, но забываете обновить комментарий, он становится дезинформирующим и вредным.
Используйте docstrings для функций, классов и модулей. Это стандартная практика, которая делает ваш код более профессиональным.
Итог первой главы:
Мы проделали большой путь! Мы узнали:
Что такое Python, его историю и философию.
Почему Python так популярен и где он применяется.
Как установить Python на разные операционные системы.
Как запустить вашу первую программу “Hello, World!”.
Что такое интерактивный режим (REPL) и как его использовать.
Кратко о важности IDE и текстовых редакторов.
Зачем нужны комментарии.
Теперь у вас есть вся необходимая база, чтобы двинуться дальше. В следующей главе мы углубимся в основные строительные блоки любого языка программирования – переменные, типы данных и операторы.
Глава 2: Основы Программирования: Переменные, Типы Данных и Операторы
В предыдущей главе мы познакомились с Python, установили его и написали первую программу. Теперь пришло время разобраться с основными “кирпичиками”, из которых строится любое программное обеспечение: переменными, типами данных, которые они могут хранить, и операторами, которые позволяют с этими данными работать.
2.1 Переменные: «Коробки» для ваших данных
Представьте, что ваш компьютер – это огромная кладовая, где хранятся различные вещи (данные). Переменная – это как ярлык или адрес, который вы прикрепляете к определенной “коробке” с данными, чтобы легко находить и использовать их.
2.1.1 Что такое переменная?
Переменная – это именованная область памяти, которая хранит определенное значение. Это значение может меняться (отсюда и название “переменная”) в процессе выполнения программы.
2.1.2 Правила именования переменных
Чтобы ваш код был читаемым и соответствовал стандартам, важно правильно именовать переменные. В Python действуют следующие правила:
Допустимые символы: Имена переменных могут содержать буквы (a-z, A-Z), цифры (0-9) и символ подчеркивания (_).
Первый символ: Имя переменной не может начинаться с цифры. Оно должно начинаться с буквы или подчеркивания.
Чувствительность к регистру: Python различает регистр букв. myVariable, myvariable и MYVARIABLE – это три разные переменные.
Зарезервированные слова (ключевые слова): Нельзя использовать в качестве имен переменных зарезервированные слова Python (например, if, for, while, print, def, class и т.д.). Если вы попробуете использовать такое слово, Python выдаст ошибку. Список всех ключевых слов можно получить, выполнив import keyword; print(keyword.kwlist).
Смысловые имена: Старайтесь давать переменным имена, которые отражают их назначение. Это делает код более понятным. Вместо x = 100 лучше написать student_count = 100, а вместо n – number_of_attempts.
Рекомендации по стилю (PEP 8): Официальное руководство по стилю Python (PEP 8) рекомендует использовать snake_case для имен переменных и функций. Это означает, что слова разделяются символом подчеркивания, и все буквы пишутся в нижнем регистре (например, first_name, total_score, user_input).
Примеры правильных имен переменных:
user_name
age
_private_variable (переменные, начинающиеся с подчеркивания, обычно используются для внутренних целей)
count_1
MAX_SPEED (хотя PEP 8 рекомендует snake_case, переменные, написанные полностью заглавными буквами, часто используются для обозначения констант, значения которых не должны меняться)
Примеры неправильных имен переменных:
1_variable (начинается с цифры)
my-variable (содержит дефис)
class (ключевое слово)
print (ключевое слово)
user name (содержит пробел)
2.1.3 Присваивание значений переменным
Для присвоения значения переменной используется оператор присваивания – знак равенства (=).
python
# Присвоение строкового значения
user_name = "Alice"
# Присвоение числового значения
age = 30
# Присвоение булева значения (True/False)
is_active = True
# Присвоение результата выражения
next_age = age + 1
2.1.4 Присваивание и переприсваивание значений
Значение переменной может быть изменено в любой момент программы.
python
counter = 5
print(counter) # Выведет: 5
counter = counter + 1 # Увеличиваем значение на 1
print(counter) # Выведет: 6
counter = 10 # Полностью переприсваиваем значение
print(counter) # Выведет: 10
2.1.5 Множественное присваивание
Python позволяет присвоить одно значение нескольким переменным одновременно или присвоить разные значения нескольким переменным в одной строке.
Одно значение нескольким переменным:
python
x = y = z = 0
print(x, y, z) # Выведет: 0 0 0
Разные значения нескольким переменным (распаковка последовательности): Это один из самых элегантных способов присваивания в Python.
python
name, age, city = "Bob", 25, "New York"
print(name, age, city) # Выведет: Bob 25 New York
Важно, чтобы количество переменных слева от = совпадало с количеством элементов в последовательности справа.
2.2 Типы данных: Что хранит переменная?
Переменные в Python могут хранить данные различных типов. Python – язык с динамической типизацией, это означает, что тип переменной определяется автоматически во время выполнения программы на основе присвоенного ей значения, и вы не обязаны объявлять тип заранее.
Давайте подробнее рассмотрим основные встроенные типы данных:
2.2.1 Числа (Numeric Types)
Python поддерживает различные числовые типы:
Целые числа (Integers, int): Представляют собой целые числа, как положительные, так и отрицательные, без дробной части. В Python 3 целые числа могут быть сколь угодно большими (ограничены только объемом оперативной памяти).
python
age = 30
year = -100
big_number = 12345678901234567890
Числа с плавающей точкой (Floating-Point Numbers, float): Представляют собой действительные числа, имеющие дробную часть. Они хранятся с использованием формата с плавающей точкой двойной точности (как правило, 64-битный стандарт IEEE 754).
python
price = 19.99
temperature = -5.5
pi = 3.1415926535
scientific_notation = 1.23e4 # Это 1.23 * 10^4, т.е. 12300.0
Важно: Из-за особенностей представления чисел с плавающей точкой в двоичном формате, иногда могут возникать небольшие погрешности. Например, 0.1 + 0.2 может быть не в точности 0.3.
Комплексные числа (Complex Numbers, complex): Используются в научных и инженерных расчетах. Состоят из действительной и мнимой частей. Мнимая часть обозначается буквой j или J.
python
complex_number = 3 + 5j
another_complex = 2.5 – 1.2j
print(complex_number.real) # Выведет: 3.0
print(complex_number.imag) # Выведет: 5.0
2.2.2 Булевы значения (Boolean, bool)
Булевы значения представляют собой истину или ложь. В Python есть только два булевых значения:
True (истина)
False (ложь)
Они очень важны для логики программы, например, при работе с условными операторами и циклами. Буквы T и F должны быть заглавными!
python
is_adult = True
has_permission = False
2.2.3 Строки (Strings, str)
Строки используются для представления текстовых данных. Они могут состоять из букв, цифр, символов и пробелов.
Создание строк: Строки заключаются в одинарные (') или двойные (") кавычки. Также можно использовать тройные кавычки (''' или """) для создания многострочных строк или строк, содержащих как одинарные, так и двойные кавычки.
python
name = "Alice" # Двойные кавычки
message = «Hello, World!» # Одинарные кавычки
long_text = """Это многострочная строка.
Она может содержать несколько абзацев.
А также 'одинарные' и "двойные" кавычки."""
Неизменяемость строк: Важно знать, что строки в Python являются неизменяемыми (immutable). Это означает, что после создания строки ее нельзя изменить. Если вам нужно изменить строку (например, заменить символ), вам придется создать новую строку на основе старой.
python
greeting = "Hello"
# greeting[0] = "h" # Это вызовет ошибку TypeError!
new_greeting = "h" + greeting[1:] # Создаем новую строку
print(new_greeting) # Выведет: hello
2.2.4 Специальное значение None (NoneType)
None – это особый тип данных, который представляет отсутствие значения. Он часто используется для инициализации переменной, когда ей еще не присвоено конкретное значение, или когда функция ничего не возвращает явно.
python
user_data = None
result = None # Пока результат неизвестен
if user_data is None:
print("Данные пользователя отсутствуют.")
None – это единственный экземпляр типа NoneType.
2.2.5 Как узнать тип переменной?
Для определения типа данных переменной используется встроенная функция type().
python
age = 30
name = "Alice"
height = 1.75
is_student = True
data = None
print(type(age)) # Выведет:
print(type(name)) # Выведет:
print(type(height)) # Выведет:
print(type(is_student)) # Выведет:
print(type(data)) # Выведет:
2.3 Операторы: Инструменты для манипуляции данными
Операторы – это специальные символы или ключевые слова, которые выполняют операции над операндами (переменными или значениями). Python предлагает широкий набор операторов.
2.3.1 Арифметические операторы
Используются для выполнения математических вычислений.
Оператор Описание Пример Результат
+ Сложение 5 + 3 8
– Вычитание 10 – 4 6
* Умножение 6 * 7 42
/ Деление (всегда возвращает float) 10 / 3 3.333…
// Целочисленное деление (отбрасывает дробную часть) 10 // 3 3
% Остаток от деления (модуль) 10 % 3 1
** Возведение в степень 2 ** 3 8
python
a = 10
b = 3
print(a + b) # 13
print(a – b) # 7
print(a * b) # 30
print(a / b) # 3.3333333333333335
print(a // b) # 3
print(a % b) # 1
print(a ** b) # 1000
# Умножение строки:
print("Hi" * 3) # Выведет: HiHiHi
2.3.2 Операторы сравнения (Реляционные операторы)
Используются для сравнения двух значений. Результатом операции сравнения всегда является булево значение (True или False).
Оператор Описание Пример Результат
== Равно 5 == 5 True
!= Не равно 5 != 3 True
> Больше 10 > 5 True
< Меньше 5 < 10 True
>= Больше или равно 5 >= 5 True
<= Меньше или равно 5 <= 10 True
python
x = 10
y = 12
print(x == 10) # True
print(x != y) # True
print(y > x) # True
print(x < y) # True
print(x >= 10) # True
print(y <= 10) # False
# Сравнение строк (лексикографическое):
print("apple" < "banana") # True
print("Apple" < "apple") # True (заглавные буквы идут раньше строчных в ASCII/Unicode)
2.3.3 Логические операторы
Используются для комбинирования булевых выражений.
Оператор Описание Пример Результат
and Истина, если оба операнда истинны. True and False False
or Истина, если хотя бы один из операндов истинен. True or False True
not Инвертирует булево значение. not True False
python
age = 25
has_license = True
# Проверяем, является ли человек совершеннолетним И имеет ли права
print(age >= 18 and has_license) # True
# Проверяем, либо совершеннолетний, либо имеет права
print(age >= 18 or has_license) # True
# Если человек не является студентом
is_student = False
print(not is_student) # True
2.3.4 Операторы присваивания
Операторы присваивания используются для присвоения значений переменным. Мы уже видели основной оператор =. Существуют также комбинированные операторы, которые выполняют операцию и присваивают результат обратно той же переменной.
Оператор Пример То же самое, что и…
= x = 5 x = 5
+= x += 3 x = x + 3
–= x -= 2 x = x – 2
*= x *= 4 x = x * 4
/= x /= 2 x = x / 2
//= x //= 3 x = x // 3
%= x %= 2 x = x % 2
**= x **= 2 x = x ** 2
python
count = 0
count += 1 # count теперь 1
count += 5 # count теперь 6
print(count) # 6
price = 100
discount_percentage = 10
discount_amount = price * (discount_percentage / 100) # 10.0
price -= discount_amount # price = 100 – 10.0 = 90.0
print(price) # 90.0
2.3.5 Оператор is и is not (Идентичность)
Эти операторы проверяют, ссылаются ли две переменные на один и тот же объект в памяти. Это отличается от ==, который проверяет, равны ли значения объектов.
python
list1 = [1, 2, 3]
list2 = [1, 2, 3]
list3 = list1
print(list1 == list2) # True (значения равны)
print(list1 is list2) # False (это два разных списка в памяти)
print(list1 == list3) # True (значения равны)
print(list1 is list3) # True (list3 ссылается на тот же объект, что и list1)
# Для небольших целых чисел и строк Python может кэшировать значения,
# поэтому результат 'is' может быть неожиданным:
a = 5
b = 5
print(a is b) # True (часто, но не гарантировано для всех чисел)
str1 = "hello"
str2 = "hello"
print(str1 is str2) # True (для коротких строк Python часто кэширует)
2.3.6 Оператор in и not in (Принадлежность)
Эти операторы проверяют, содержится ли элемент в последовательности (строке, списке, кортеже и т.д.).
python
my_list = [10, 20, 30, 40]
my_string = "Hello, Python!"
print(20 in my_list) # True
print(50 in my_list) # False
print("Python" in my_string) # True
print("Java" in my_string) # False
# Использование not in
print(50 not in my_list) # True
2.4 Преобразование типов данных (Type Casting)
Иногда возникает необходимость преобразовать значение одного типа данных в другой. Например, получить число из строки или наоборот. Для этого в Python есть встроенные функции, которые по сути являются “конструкторами” типов: int(), float(), str(), bool().
2.4.1 Преобразование в целое число (int())
Преобразует строку, содержащую целое число, или число с плавающей точкой в целое число.
При преобразовании float в int дробная часть отбрасывается (происходит усечение, а не округление).
python
num_str = "123"
integer_from_str = int(num_str)
print(integer_from_str) # 123
print(type(integer_from_str)) #
float_num = 9.99
integer_from_float = int(float_num)
print(integer_from_float) # 9 (дробная часть отброшена)
# Ошибка, если строка не является числом:
# error_str = "Hello"
# int(error_str) # ValueError: invalid literal for int() with base 10: 'Hello'
2.4.2 Преобразование в число с плавающей точкой (float ())
Преобразует строку, содержащую число (целое или дробное), или целое число в число с плавающей точкой.
python
num_str = "123.45"
float_from_str = float(num_str)
print(float_from_str) # 123.45
print(type(float_from_str)) #
integer_num = 100
float_from_int = float(integer_num)
print(float_from_int) # 100.0
2.4.3 Преобразование в строку (str())
Преобразует любое значение в его строковое представление.
python
age = 30
string_age = str(age)
print(string_age) # "30"
print(type(string_age)) #
pi = 3.14159
string_pi = str(pi)
print(string_pi) # "3.14159"
2.4.4 Преобразование в булево значение (bool())
Некоторые значения при преобразовании в bool становятся False, остальные – True.
False становится: False, None, число 0 (любого типа: 0, 0.0), пустые последовательности ('', [], (), {}), пустые словари ({}).
Все остальные значения становятся True.
python
print(bool(0)) # False
print (bool (1)) # True
print(bool(-5)) # True
print(bool(0.0)) # False
print(bool(0.1)) # True
print(bool("Hello")) # True
print(bool("")) # False
print(bool([])) # False
print(bool(None)) # False
2.4.5 Явное и неявное преобразование типов
Явное преобразование (Type Casting): Это когда вы сами используете функции int(), float() и т.д. для преобразования. Примеры выше – это явное преобразование.
Неявное преобразование (Type Coercion): Иногда Python автоматически преобразует типы данных во время выполнения операции, чтобы операция была возможна. Чаще всего это происходит, когда вы смешиваете int и float.
python
num_int = 10
num_float = 5.5
# При сложении int и float, int неявно преобразуется во float
result = num_int + num_float
print(result) # 15.5
print(type(result)) #
Однако, Python не выполняет неявное преобразование, если оно может привести к потере данных или является неоднозначным (например, при попытке сложить число со строкой без явного преобразования).
python
# print(10 + "5") # TypeError: unsupported operand type(s) for +: 'int' and 'str'
# Чтобы это заработало, нужно явное преобразование:
print(10 + int("5")) # 15
Резюме главы:
мы заложили крепкий фундамент:
Поняли, что такое переменные, как их правильно называть и присваивать им значения.
Изучили основные типы данных в Python: числа (int, float), булевы значения (bool), строки (str) и специальное значение None.
Освоили арифметические, логические операторы и операторы сравнения.
Узнали о комбинированных операторах присваивания.
Познакомились с операторами идентичности (is) и принадлежности (in).
Разобрались, как преобразовывать типы данных и когда это необходимо.
Эти знания – ваш первый, но очень важный шаг. В следующей главе мы перейдем к структурам данных, которые позволяют хранить и обрабатывать коллекции элементов: спискам, кортежам, словарям и множествам. Это откроет перед нами гораздо больше возможностей для создания интересных программ!
Глава 3: Списки (list) – Колекции в Python
В предыдущих главах мы научились работать с отдельными значениями: числами, строками, булевыми значениями. Но часто в программах нам приходится иметь дело с коллекциями данных – наборами связанных элементов. Python предлагает несколько встроенных структур данных для этих целей, и первой, с которой мы познакомимся, будет список (list).
Списки – это, пожалуй, самая универсальная и часто используемая структура данных в Python. Они позволяют хранить упорядоченную коллекцию элементов, которые могут быть разных типов.
3.1 Что такое список?
Список – это изменяемая (mutable) и упорядоченная коллекция элементов.
Упорядоченная: Каждый элемент в списке имеет определенный порядок, и этот порядок не меняется сам по себе. Элементы можно получать по их позиции (индексу).
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.