Перейти к содержимому

Начало работы с Python [1.3]

Начало работы с Python [1.3]

Операции с базовыми типами данных в Python: от простого к практике

Введение

В предыдущем уроке мы познакомились с базовыми типами данных в Python: int, float, bool, str, list, tuple, dict и set. Теперь пришло время научиться работать с этими данными — выполнять различные операции, преобразования и решать реальные задачи.

Представьте, что типы данных — это инструменты в вашем наборе, а операции — это способы их использования. Сегодня мы научимся применять эти инструменты эффективно!

Арифметические операции с числами

Целые числа (int) и числа с плавающей точкой (float)

Python поддерживает все стандартные арифметические операции:

# Сложение и вычитание
a = 10 + 5    # 15
b = 20 - 7    # 13

# Умножение и деление
c = 6 * 4     # 24
d = 15 / 3    # 5.0 (всегда float!)

# Целочисленное деление и остаток
e = 17 // 3   # 5 (целая часть)
f = 17 % 3    # 2 (остаток)

# Возведение в степень
g = 2 ** 3    # 8 (2 в степени 3)
h = 16 ** 0.5 # 4.0 (квадратный корень)

Важно! Деление / всегда возвращает float, даже если результат целый.

Практический пример: расчет скидки

# Цена товара и размер скидки
original_price = 1500
discount_percent = 15

# Расчет скидки
discount_amount = original_price * discount_percent / 100
final_price = original_price - discount_amount

print(f"Цена со скидкой {discount_percent}%: {final_price:.2f} ₽")
# Вывод: Цена со скидкой 15%: 1275.00 ₽

Операции сравнения

Сравнения возвращают логические значения True или False:

x = 10
y = 20

# Равенство и неравенство
print(x == y)  # False
print(x != y)  # True

# Больше, меньше, больше или равно, меньше или равно
print(x < y)   # True
print(x > y)   # False
print(x <= 10) # True
print(x >= 15) # False

Цепочки сравнений

Python позволяет создавать удобные цепочки:

age = 25
is_adult = 18 <= age < 65  # True
print(f"Взрослый: {is_adult}")  # Взрослый: True

Логические операции

Для работы с булевыми значениями используются три оператора:

a = True
b = False

# AND (и) - True только если оба значения True
print(a and b)  # False
print(a and a)  # True

# OR (или) - True если хотя бы одно значение True
print(a or b)   # True
print(b or b)   # False

# NOT (не) - инвертирует значение
print(not a)    # False
print(not b)    # True

Практический пример: проверка доступа

user_age = 22
has_license = True
is_sober = True

# Проверка, может ли пользователь водить автомобиль
can_drive = user_age >= 18 and has_license and is_sober
print(f"Может водить: {can_drive}")  # Может водить: True

Операции со строками (str)

Строки в Python поддерживают множество полезных операций:

Конкатенация и повторение

first_name = "Иван"
last_name = "Петров"

# Объединение строк
full_name = first_name + " " + last_name
print(full_name)  # Иван Петров

# Повторение строки
separator = "-" * 30
print(separator)  # ------------------------------

Форматирование строк (f-строки)

Современный способ форматирования (Python 3.6+):

name = "Анна"
age = 28
city = "Москва"

# f-строка
message = f"Привет, меня зовут {name}. Мне {age} лет, я живу в {city}."
print(message)
# Привет, меня зовут Анна. Мне 28 лет, я живу в Москве.

Полезные методы строк

text = "  Python - лучший язык программирования!  "

# Удаление пробелов
clean_text = text.strip()  # "Python - лучший язык программирования!"

# Преобразование регистра
print(clean_text.lower())  # python - лучший язык программирования!
print(clean_text.upper())  # PYTHON - ЛУЧШИЙ ЯЗЫК ПРОГРАММИРОВАНИЯ!

# Поиск и замена
print(clean_text.find("лучший"))  # 11 (индекс начала)
new_text = clean_text.replace("лучший", "самый популярный")
print(new_text)  # Python - самый популярный язык программирования!

Операции со списками (list)

Списки — один из самых гибких типов данных в Python.

Основные операции

# Создание списка
fruits = ["яблоко", "банан", "апельсин", "груша"]

# Добавление элементов
fruits.append("киви")           # Добавить в конец
fruits.insert(1, "манго")       # Вставить по индексу

# Удаление элементов
fruits.remove("банан")          # Удалить по значению
popped_fruit = fruits.pop(2)    # Удалить по индексу и вернуть значение

# Объединение списков
more_fruits = ["ананас", "виноград"]
all_fruits = fruits + more_fruits

print(all_fruits)
# ['яблоко', 'манго', 'апельсин', 'груша', 'киви', 'ананас', 'виноград']

Срезы (slices)

Мощный инструмент для работы с частями списка:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Срез от индекса 2 до 5 (не включая 5)
print(numbers[2:5])    # [2, 3, 4]

# Срез от начала до индекса 4
print(numbers[:4])     # [0, 1, 2, 3]

# Срез от индекса 6 до конца
print(numbers[6:])     # [6, 7, 8, 9]

# Шаг в срезе (каждый второй элемент)
print(numbers[::2])    # [0, 2, 4, 6, 8]

# Обратный порядок
print(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Практический пример: обработка данных

# Список оценок студентов
grades = [4, 5, 3, 4, 5, 2, 4, 5, 3, 4]

# Фильтрация: оставить только хорошие оценки (4 и 5)
good_grades = [grade for grade in grades if grade >= 4]

# Расчет среднего балла
average = sum(good_grades) / len(good_grades)

print(f"Хорошие оценки: {good_grades}")
print(f"Средний балл: {average:.2f}")
# Хорошие оценки: [4, 5, 4, 5, 4, 5, 4]
# Средний балл: 4.43

Работа со словарями (dict)

Словари идеальны для хранения структурированных данных.

Основные операции

# Создание словаря
student = {
    "name": "Мария",
    "age": 20,
    "courses": ["математика", "физика", "программирование"],
    "active": True
}

# Получение значений
print(student["name"])      # Мария
print(student.get("email")) # None (безопасное получение)

# Добавление и изменение
student["email"] = "Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript."  # Новый ключ
student["age"] = 21                      # Изменение существующего

# Удаление
del student["active"]  # Удалить ключ
email = student.pop("email")  # Удалить и вернуть значение

# Проверка наличия ключа
if "courses" in student:
    print("Студент изучает:", ", ".join(student["courses"]))

Перебор словаря

# Перебор ключей
for key in student:
    print(f"Ключ: {key}, Значение: {student[key]}")

# Перебор пар ключ-значение
for key, value in student.items():
    print(f"{key}: {value}")

# Перебор только значений
for value in student.values():
    print(f"Значение: {value}")

Практический пример: статистика слов

text = "python python программирование код программирование python язык"

# Разбить текст на слова
words = text.split()

# Подсчет частоты слов
word_count = {}
for word in words:
    word_count[word] = word_count.get(word, 0) + 1

print("Статистика слов:")
for word, count in word_count.items():
    print(f"{word}: {count} раз")

# Вывод:
# Статистика слов:
# python: 3 раз
# программирование: 2 раз
# код: 1 раз
# язык: 1 раз

Работа с множествами (set)

Множества отлично подходят для операций с уникальными значениями.

Основные операции

# Создание множеств
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}

# Объединение (все уникальные элементы)
union_set = set1 | set2  # {1, 2, 3, 4, 5, 6, 7, 8}

# Пересечение (общие элементы)
intersection_set = set1 & set2  # {4, 5}

# Разность (элементы первого без второго)
difference_set = set1 - set2  # {1, 2, 3}

# Симметрическая разность (элементы только в одном из множеств)
sym_diff_set = set1 ^ set2  # {1, 2, 3, 6, 7, 8} 

Практический пример: анализ данных

# Списки пользователей двух сервисов
users_service1 = ["ivan", "maria", "petr", "anna", "alex"]
users_service2 = ["maria", "alex", "olga", "dmitry", "ivan"]

# Преобразование в множества
set1 = set(users_service1)
set2 = set(users_service2)

# Пользователи, которые есть в обоих сервисах
common_users = set1 & set2
print(f"Общие пользователи ({len(common_users)}): {common_users}")
# Общие пользователи (3): {'ivan', 'maria', 'alex'}

# Пользователи только первого сервиса
only_service1 = set1 - set2
print(f"Только в первом сервисе: {only_service1}")
# Только в первом сервисе: {'petr', 'anna'}

Преобразование типов данных

Часто нужно преобразовывать данные из одного типа в другой.

Основные функции преобразования

# Строки в числа
num_str = "42"
num_int = int(num_str)     # 42
num_float = float(num_str) # 42.0

# Числа в строки
age = 25
age_str = str(age)         # "25"

# Списки и кортежи
my_list = [1, 2, 3]
my_tuple = tuple(my_list)  # (1, 2, 3)
my_list_again = list(my_tuple)  # [1, 2, 3]

# Множества
numbers = [1, 2, 2, 3, 3, 3]
unique_numbers = set(numbers)  # {1, 2, 3}

# Словари из списков
keys = ["name", "age", "city"]
values = ["Елена", 28, "Санкт-Петербург"]
person = dict(zip(keys, values))
# {'name': 'Елена', 'age': 28, 'city': 'Санкт-Петербург'}

Практический пример: валидация ввода

def validate_input():
    while True:
        user_input = input("Введите число от 1 до 100: ")
        try:
            number = int(user_input)
            if 1 <= number <= 100:
                return number
            else:
                print("Число должно быть в диапазоне от 1 до 100!")
        except ValueError:
            print("Пожалуйста, введите корректное число!")

# result = validate_input()
# print(f"Вы ввели: {result}")

Практическое задание

Задача: Создайте программу для анализа студенческих оценок.

Требования:

  1. Создайте словарь с оценками студентов по разным предметам
  2. Рассчитайте средний балл для каждого студента
  3. Найдите студента с самым высоким средним баллом
  4. Определите, сколько студентов имеют средний балл выше 4.0
  5. Выведите результаты в удобочитаемом формате

Пример реализации:

# Данные студентов
students_data = {
    "Иванов": [4, 5, 4, 5, 4],
    "Петрова": [5, 5, 5, 4, 5],
    "Сидоров": [3, 4, 3, 4, 3],
    "Козлова": [5, 4, 5, 3, 4],
    "Смирнов": [4, 4, 4, 4, 4]
}

# 1. Рассчитываем средние баллы
average_grades = {}
for student, grades in students_data.items():
    average = sum(grades) / len(grades)
    average_grades[student] = round(average, 2)

# 2. Находим студента с самым высоким баллом
best_student = max(average_grades.items(), key=lambda x: x[1])

# 3. Считаем студентов с баллом выше 4.0
top_students = [student for student, avg in average_grades.items() if avg > 4.0]

# 4. Выводим результаты
print("АНАЛИЗ СТУДЕНЧЕСКИХ ОЦЕНОК")
print("-" * 40)

print("\nСредние баллы студентов:")
for student, avg in average_grades.items():
    print(f"{student}: {avg}")

print(f"\nСтудент с самым высоким баллом: {best_student[0]} ({best_student[1]})")

print(f"\nКоличество студентов с баллом выше 4.0: {len(top_students)}")
print(f"Список: {', '.join(top_students)}")

Ожидаемый вывод:

АНАЛИЗ СТУДЕНЧЕСКИХ ОЦЕНОК
----------------------------------------

Средние баллы студентов:
Иванов: 4.4
Петрова: 4.8
Сидоров: 3.4
Козлова: 4.2
Смирнов: 4.0

Студент с самым высоким баллом: Петрова (4.8)

Количество студентов с баллом выше 4.0: 3
Список: Иванов, Петрова, Козлова

Советы и лучшие практики

  1. Используйте f-строки для форматирования строк — это современный и читаемый способ
  2. Проверяйте наличие ключа в словаре перед обращением, используя .get() или in
  3. Используйте множества для удаления дубликатов и быстрых проверок наличия элемента
  4. Применяйте списковые включения (list comprehensions) для создания списков — это кратко и эффективно
  5. Всегда валидируйте пользовательский ввод перед преобразованием типов
  6. Именуйте переменные осмысленно — это сделает код понятным даже через год

Дополнительные ресурсы

  • Официальная документация Python: docs.python.org/3/
  • Книги: "Чистый Python" Дэна Бейдера, "Python. К вершинам мастерства" Лучано Рамальо

Тест для самопроверки

1. Что вернет выражение 15 // 4?

а) 3.75
б) 3
в) 4
г) 3.0

2. Какой результат будет у bool(0)?

а) True
б) False
в) Error
г) None

3. Что делает метод strip() у строк?

а) Разбивает строку на слова
б) Удаляет пробелы в начале и конце
в) Преобразует в верхний регистр
г) Заменяет символы

4. Как добавить элемент в конец списка?

а) list.add(item)
б) list.append(item)
в) list.insert(item)
г) list.push(item)

5. Как проверить наличие ключа в словаре?

а) if key in dict:
б) if dict.has_key(key):
в) if key.exists(dict):
г) if dict.contains(key):

Ответы: 1-б, 2-б, 3-б, 4-б, 5-а

Заключение

Сегодня мы изучили основные операции с базовыми типами данных в Python. Вы научились:

  • Выполнять арифметические и логические операции
  • Работать со строками и форматировать их
  • Манипулировать списками с помощью срезов и методов
  • Использовать словари для структурирования данных
  • Применять множества для работы с уникальными значениями
  • Преобразовывать типы данных
  • Решать практические задачи

Эти навыки — фундамент для дальнейшего изучения Python. 

Целевая аудитория: Начинающие программисты, студенты, специалисты, желающие освоить Python для анализа данных, веб-разработки или автоматизации задач.

Ссылки по теме

Конспект:
Вторник, 29 июля 2025
Начало работы с Python [1.3]