🐍 Python: Практические задания

Тема: Алгоритмическое мышление

📊 Прогресс:

0/0

🟢 Уровень 1: Простые алгоритмы

Задача 1.1: Второй максимум
Дан список чисел [5, 2, 8, 1, 9]. Найдите второе максимальное число без использования сортировки.
💡 Подсказка:
Алгоритм:
  1. Найти максимальное число в списке с помощью max()
  2. Создать копию списка и удалить из неё максимальное число методом remove()
  3. Найти максимум в новом списке - это и будет второй максимум
✅ Решение:
numbers = [5, 2, 8, 1, 9]
max_num = max(numbers)
temp_list = numbers.copy()
temp_list.remove(max_num)
second_max = max(temp_list)
print(second_max)  # 8
Задача 1.2: Объединение списков в словарь
Есть два списка одинаковой длины: имена ["Анна", "Борис", "Вера"] и возрасты [25, 30, 28]. Создайте словарь, где ключи - имена, значения - возрасты.
💡 Подсказка:
Алгоритм:
  1. Создать пустой словарь
  2. Использовать индексы для доступа к элементам: names[0] и ages[0] - первая пара
  3. Добавить в словарь каждую пару по индексу: dict[names[i]] = ages[i]
  4. Повторить для всех трёх пар
✅ Решение:
names = ["Анна", "Борис", "Вера"]
ages = [25, 30, 28]
people = {}
people[names[0]] = ages[0]
people[names[1]] = ages[1]
people[names[2]] = ages[2]
print(people)  # {'Анна': 25, 'Борис': 30, 'Вера': 28}
Задача 1.3: Подсчёт гласных
Дана строка "HELLO world". Подсчитайте количество гласных букв (a, e, i, o, u).
💡 Подсказка:
Алгоритм:
  1. Преобразовать строку в нижний регистр методом .lower()
  2. Использовать метод .count() для подсчёта каждой гласной отдельно
  3. Сложить все подсчёты: count_a + count_e + count_i + count_o + count_u
✅ Решение:
text = "hello world"
text_lower = text.lower()
count_a = text_lower.count('a')
count_e = text_lower.count('e')
count_i = text_lower.count('i')
count_o = text_lower.count('o')
count_u = text_lower.count('u')
total_vowels = count_a + count_e + count_i + count_o + count_u
print(total_vowels)  # 3

🟡 Уровень 2: Проверки и вычисления

Задача 2.1: Палиндром
Проверьте, является ли слово палиндромом (читается одинаково слева направо и справа налево).
💡 Подсказка:
Алгоритм:
  1. Взять исходное слово
  2. Привести слово к нижнему регистру
  3. Развернуть слово задом наперёд используя срез [::-1]
  4. Сравнить исходное и развёрнутое слово оператором ==
✅ Решение:
word = input("Введите слово: ").lower()
        reversed_word = word[::-1]
        is_palindrome = word == reversed_word
        print(f"Палиндром: {is_palindrome}")
Задача 2.2: Средний балл
Есть список оценок [4, 5, 3, 5, 4]. Вычислите средний балл с использованием встроенной функции.
💡 Подсказка:
Алгоритм:
  1. Найти сумму всех оценок функцией sum()
  2. Найти количество оценок функцией len()
  3. Разделить сумму на количество
✅ Решение:
grades = [4, 5, 3, 5, 4]
total = sum(grades)
count = len(grades)
average = total / count
print(f"Средний балл: {average}")  # 4.2
Задача 2.3: Расстояние между точками
Даны координаты двух точек: (2, 3) и (5, 7). Найдите расстояние между ними по формуле (формула: расстояние = √((x2-x1)² + (y2-y1)²)).
💡 Подсказка:
Алгоритм (формула: расстояние = √((x2-x1)² + (y2-y1)²)):
  1. Распаковать координаты: x1, y1 = point1
  2. Найти разницу координат: dx = x2 - x1, dy = y2 - y1
  3. Возвести разницы в квадрат и сложить
  4. Извлечь квадратный корень возведением в степень 0.5
✅ Решение:
point1 = (2, 3)
point2 = (5, 7)
x1, y1 = point1
x2, y2 = point2
dx = x2 - x1
dy = y2 - y1
sum_squares = dx**2 + dy**2
distance = sum_squares ** 0.5
print(f"Расстояние: {distance}")  # 5.0

🟠 Уровень 3: Работа со структурами данных

Задача 3.1: База данных студентов
Создайте "базу данных" студентов: список словарей с полями 'имя' и 'оценка'. Найдите студента с максимальной оценкой.
💡 Подсказка:
Алгоритм:
  1. Создать список студентов (список словарей)
  2. Извлечь все оценки в отдельный список через индексы
  3. Найти максимальную оценку функцией max()
  4. Найти индекс этой оценки методом .index()
  5. Получить студента по найденному индексу
✅ Решение:
students = [
    {'имя': 'Анна', 'оценка': 4},
    {'имя': 'Борис', 'оценка': 5},
    {'имя': 'Вера', 'оценка': 3}
]
grades = [students[0]['оценка'], students[1]['оценка'], students[2]['оценка']]
max_grade = max(grades)
max_index = grades.index(max_grade)
best_student = students[max_index]
print(f"Лучший студент: {best_student['имя']}")  # Борис
Задача 3.2: Самое длинное слово
Дан текст: "Python это прекрасный язык программирования". Найдите самое длинное слово (если несколько - первое из них).
💡 Подсказка:
Алгоритм:
  1. Разбить текст на слова методом .split()
  2. Создать список длин слов, используя len() для каждого слова
  3. Найти максимальную длину функцией max()
  4. Найти индекс первого слова с такой длиной методом .index()
  5. Получить слово по индексу
✅ Решение:
text = "Python это прекрасный язык программирования"
words = text.split()
lengths = [len(words[0]), len(words[1]), len(words[2]), len(words[3]), len(words[4])]
max_length = max(lengths)
max_index = lengths.index(max_length)
longest_word = words[max_index]
print(f"Самое длинное слово: {longest_word}")  # программирования
Задача 3.3: Скидка на товары
Есть список покупок с ценами [500, 1200, 800, 2000, 1500]. Примените скидку 20% ко всем товарам дороже 1000 рублей.
💡 Подсказка:
Алгоритм без условных операторов:
  1. Для каждой цены вычислить: цена > 1000 (даст True=1 или False=0)
  2. Использовать формулу: новая_цена = цена * (0.8 * условие + 1 * (not условие))
  3. Если условие True: цена * 0.8, если False: цена * 1
✅ Решение:
prices = [500, 1200, 800, 2000, 1500]
new_prices = []
new_prices.append(prices[0] * (0.8 * (prices[0] > 1000) + 1 * (not prices[0] > 1000)))
new_prices.append(prices[1] * (0.8 * (prices[1] > 1000) + 1 * (not prices[1] > 1000)))
new_prices.append(prices[2] * (0.8 * (prices[2] > 1000) + 1 * (not prices[2] > 1000)))
new_prices.append(prices[3] * (0.8 * (prices[3] > 1000) + 1 * (not prices[3] > 1000)))
new_prices.append(prices[4] * (0.8 * (prices[4] > 1000) + 1 * (not prices[4] > 1000)))
print(new_prices)  # [500, 960.0, 800, 1600.0, 1200.0]

🔴 Уровень 4: Обработка данных

Задача 4.1: Объединение отсортированных списков
Объедините два отсортированных списка [1, 3, 5, 7] и [2, 4, 6, 8] в один отсортированный список.
💡 Подсказка:
Алгоритм:
  1. Объединить два списка оператором +
  2. Отсортировать объединённый список функцией sorted()
✅ Решение:
list1 = [1, 3, 5, 7]
list2 = [2, 4, 6, 8]
merged = list1 + list2
sorted_list = sorted(merged)
print(sorted_list)  # [1, 2, 3, 4, 5, 6, 7, 8]
Задача 4.2: Уникальные символы
Найдите все уникальные символы в строке "hello world" и подсчитайте их количество.
💡 Подсказка:
Алгоритм:
  1. Преобразовать строку в множество функцией set() - автоматически удалятся дубликаты
  2. Подсчитать количество элементов в множестве функцией len()
✅ Решение:
text = "hello world"
unique_chars = set(text)
count = len(unique_chars)
print(f"Уникальные символы: {unique_chars}")
print(f"Количество: {count}")  # 8
Задача 4.3: Валидация пароля
Создайте простую систему валидации пароля: длина минимум 8 символов и содержит хотя бы одну цифру.
💡 Подсказка:
Алгоритм:
  1. Проверить длину пароля: len(password) >= 8
  2. Проверить наличие цифр: использовать оператор in для каждой цифры с or
  3. Объединить результаты проверок оператором and
✅ Решение:
password = input("Введите пароль: ")
length_ok = len(password) >= 8
has_digit = ('0' in password or '1' in password or '2' in password or 
             '3' in password or '4' in password or '5' in password or
             '6' in password or '7' in password or '8' in password or 
             '9' in password)
is_valid = length_ok and has_digit
print(f"Пароль валидный: {is_valid}")

🟣 Уровень 5: Практические приложения

Задача 5.1: Разница min-max
Дан список чисел [23, 45, 12, 67, 34, 89, 5]. Найдите разницу между максимальным и минимальным элементами.
💡 Подсказка:
Алгоритм:
  1. Найти максимальный элемент функцией max()
  2. Найти минимальный элемент функцией min()
  3. Вычислить разницу вычитанием
✅ Решение:
numbers = [23, 45, 12, 67, 34, 89, 5]
max_num = max(numbers)
min_num = min(numbers)
difference = max_num - min_num
print(f"Разница: {difference}")  # 84
Задача 5.2: Калькулятор заказа
Создайте "калькулятор" для подсчёта стоимости заказа с учётом количества товаров и их цен.
💡 Подсказка:
Алгоритм:
  1. Создать словарь с ценами товаров
  2. Создать список кортежей заказа: (товар, количество)
  3. Для каждой позиции: получить цену из словаря, умножить на количество
  4. Сложить все результаты
✅ Решение:
prices = {'яблоко': 50, 'банан': 30, 'апельсин': 40}
order = [('яблоко', 3), ('банан', 2), ('апельсин', 1)]
cost1 = prices[order[0][0]] * order[0][1]
cost2 = prices[order[1][0]] * order[1][1]
cost3 = prices[order[2][0]] * order[2][1]
total = cost1 + cost2 + cost3
print(f"Общая стоимость: {total} руб.")  # 250
Задача 5.3: База знаний
Создайте простую "базу знаний": по введённому слову выдавайте его определение из заранее подготовленного словаря.
💡 Подсказка:
Алгоритм:
  1. Создать словарь с терминами (ключи) и определениями (значения)
  2. Получить слово от пользователя и привести к нижнему регистру
  3. Использовать метод .get() со значением по умолчанию для поиска
  4. Вывести результат
✅ Решение:
knowledge = {
    'python': 'Высокоуровневый язык программирования',
    'список': 'Упорядоченная изменяемая коллекция элементов',
    'словарь': 'Коллекция пар ключ-значение'
}
term = input("Введите термин: ").lower()
definition = knowledge.get(term, "Термин не найден в базе знаний")
print(f"{term}: {definition}")

💡 Полезные советы по алгоритмическому мышлению