Решение 1. Номер покупки
products = ["Bread", "Butter", "Cheese", "Milk", "Eggs"]
target = "Milk"
if target in products:
print(f'Товар "{target}" в списке покупок:', products.index(target) + 1)
else:
print(f'Товара "{target}" нет в списке')Проверка in защищает от ValueError в index().
Решение 2. Список уникальных слов
text = "Python is a great programming language. Python is popular and powerful."
words = [word.strip(".").lower() for word in text.split()]
unique_words = sorted(set(words))
print("Количество уникальных слов:", len(unique_words))
print("Уникальные слова:", unique_words)set убирает повторы, sorted возвращает алфавитный порядок.
Решение 3. Перемещение в конец
numbers = [4, 7, 1, 6, 3, 8, 2]
first_part = [number for number in numbers if number >= 5]
second_part = [number for number in numbers if number < 5]
print("Перемещённые элементы:", first_part + second_part)Два прохода сохраняют относительный порядок внутри каждой группы.
Решение 4. Суммы пар
numbers = [3, 5, 9]
pair_sums = set()
for i in range(len(numbers)):
for j in range(i + 1, len(numbers)):
pair_sums.add(numbers[i] + numbers[j])
print("Суммы пар чисел по убыванию:", sorted(pair_sums, reverse=True))set убирает одинаковые суммы.
Решение 5. Упаковка товаров по ящикам
weights = [3, 4, 9, 8, 2, 5, 3, 6, 1, 7, 1, 1, 2, 4]
limit = 10
boxes = []
for weight in sorted(weights, reverse=True):
for box in boxes:
if sum(box) + weight <= limit:
box.append(weight)
break
else:
boxes.append([weight])
for index, box in enumerate(boxes, start=1):
print(f"Ящик {index}: {box}")Это жадная стратегия first-fit decreasing. Она хорошо подходит для учебной задачи, но не доказывает оптимальность для всех входов.
Решение 6. Приходы и расходы
transactions = [(100, -50, -30), (-200, 100, 50), (300, -100, -50), (-50, -50), (200, -300, 150)]
for index in range(len(transactions) - 1, -1, -1):
if sum(transactions[index]) < 0:
del transactions[index]
print("Обновлённый список:", transactions)Проход с конца позволяет менять исходный список без смещения необработанных индексов.
Решение 7. Последовательность цифр
my_list = ["3", "6", "3", "2", "9", "3", "9", "4", "3", "9", "0"]
sequence = "943"
position = 0
for digit in my_list:
if position < len(sequence) and digit == sequence[position]:
position += 1
print("Результат:", position == len(sequence))Индекс position показывает, сколько символов последовательности уже найдено.
Решение 8. Зашифрованное послание
message = (
"92 114 120 35 102 100 113 35 103 114 35 108 119 36 35 92 114 120 35 "
"100 117 104 35 106 117 104 100 119 35 100 113 103 35 76 35 101 104 "
"111 108 104 121 104 35 108 113 35 124 114 120 36"
)
shift = 3
decoded = "".join(chr(int(code) - shift) for code in message.split())
print("Сдвиг:", shift)
print("Послание:", decoded)Каждое число — код символа после сдвига. Вычитаем 3 и собираем строку.