• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 6. Списки

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Необычная скидка»

Ты помогаешь своей бабушке составить список покупок для похода в магазин. В магазине действует специальная акция: на все товары с чётной ценой действует скидка 10 рублей, а на все товары с нечётной ценой — скидка 5 рублей. Тебе нужно помочь бабушке рассчитать новые цены на товары с учётом скидки, чтобы она знала, сколько денег ей нужно взять с собой.

Формат ввода

Количество товаров в списке покупок (целое число).
Затем для каждого товара вводится его название (строка) и цена (целое число), каждое на новой строке.

Формат Вывода

Для каждого товара выведите его название и новую цену с учётом скидки, каждое на новой строке.

Пример

Ввод

3
Молоко
55
Хлеб
40
Яблоки
87

Вывод

Молоко
50
Хлеб
30
Яблоки
82

Подсказка

Списки в Python: подробное руководство

Список (list) – это упорядоченная и изменяемая коллекция, которая может содержать элементы различных типов. Слово "изменяемая" (mutable) означает, что вы можете добавлять, удалять или изменять элементы списка уже после его создания. Списки в Python аналогичны массивам в других языках программирования, но предоставляют значительно больше гибкости и встроенных функций.

Полезный совет: Используйте списки, когда вам важен порядок элементов и когда вам может понадобиться изменять содержимое коллекции в процессе работы программы.

Создание списка

Список создается с помощью квадратных скобок [] или с помощью функции-конструктора list().

# Пустой список
my_list = []

# Список с несколькими элементами
my_list = [1, 2, 3, 4, 5]

# Список с элементами разных типов
my_list = [1, "hello", 3.14, True]

# Создание списка из другого итерируемого объекта, например, строки
char_list = list("Python")
print(char_list) # Вывод: ['P', 'y', 't', 'h', 'o', 'n']

Ввод списка пользователем

Есть несколько способов получить список от пользователя.

# Способ 1: Ввод через функцию eval()
# **ВНИМАНИЕ:** Использовать eval() с пользовательским вводом КРАЙНЕ НЕБЕЗОПАСНО,
# так как это позволяет выполнить любой произвольный код.
# Используйте этот метод только в учебных целях и никогда в реальных проектах.
my_list = eval(input("Введите список в формате [1, 2, 3]: "))
print(my_list) # Вывод: [1, 2, 3]

# Способ 2: Безопасный и предпочтительный способ
# Ввод чисел через пробел
s = input("Введите числа через пробел: ") # Пользователь вводит: 1 2 3 4 5
numbers_list = s.split() # Получаем список строк: ['1', '2', '3', '4', '5']
# Чтобы работать с ними как с числами, их нужно преобразовать:
int_list = [int(num) for num in numbers_list]
print(int_list) # Вывод: [1, 2, 3, 4, 5]

Добавление элементов в список

Python предоставляет несколько методов для добавления элементов в список:

  • append(): добавляет один элемент в самый конец списка. Это самая быстрая операция по добавлению.
  • insert(): вставляет элемент в указанную позицию (по индексу), сдвигая остальные элементы.
  • extend(): расширяет список, добавляя в конец все элементы из другой коллекции (например, другого списка).
numbers = [1, 2, 3]

# Добавление элемента в конец
numbers.append(4)
print(numbers)  # Вывод: [1, 2, 3, 4]

# Вставка элемента на позицию 1
numbers.insert(1, 10)
print(numbers)  # Вывод: [1, 10, 2, 3, 4]

# Добавление нескольких элементов из другого списка
numbers.extend([5, 6, 7])
print(numbers)  # Вывод: [1, 10, 2, 3, 4, 5, 6, 7]

Полезный совет: Также можно объединять списки с помощью оператора +, но это создает совершенно новый список, а не изменяет существующий, в отличие от extend().

list1 = [1, 2]
list2 = [3, 4]
list3 = list1 + list2
print(list3) # Вывод: [1, 2, 3, 4]
print(list1) # Вывод: [1, 2] (остался без изменений)

Доступ к элементам списка

Элементы списка доступны по индексу. Индексация начинается с 0 для первого элемента. Также поддерживается отрицательная индексация, где -1 — это последний элемент.

my_list = [10, 20, 30, 40, 50]
# Доступ к первому элементу
print(my_list[0])  # Вывод: 10

# Доступ к последнему элементу
print(my_list[-1])  # Вывод: 50

# Доступ к элементу по индексу 2
print(my_list[2])  # Вывод: 30

Важно: Попытка обратиться к несуществующему индексу вызовет ошибку IndexError. Всегда убеждайтесь, что индекс находится в пределах длины списка.

Изменение элементов списка

Вы можете легко изменять элементы списка, обратившись к ним по индексу. Это одно из ключевых отличий списков от строк, так как строки в Python неизменяемы.

my_list = [10, 20, 30, 40, 50]
my_list[1] = 25 # Заменяем элемент с индексом 1
print(my_list)  # Вывод: [10, 25, 30, 40, 50]

Срезы списка

Срезы (slices) позволяют получать части списка, создавая новый список. Синтаксис: list[start:stop:step].

  • start: начальный индекс (включается). Если опущен, срез начнется с начала списка.
  • stop: конечный индекс (не включается). Если опущен, срез пойдет до конца списка.
  • step: шаг. Если опущен, равен 1.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# Срез с 2 по 5 индекс (элементы с индексами 2, 3, 4, 5)
sublist = numbers[2:6]
print(sublist)  # Вывод: [3, 4, 5, 6]

# Срез с начала до 5 индекса
sublist = numbers[:6]
print(sublist)  # Вывод: [1, 2, 3, 4, 5, 6]

# Срез с 5 индекса до конца
sublist = numbers[5:]
print(sublist)  # Вывод: [6, 7, 8, 9]

# Каждый второй элемент
sublist = numbers[::2]
print(sublist)  # Вывод: [1, 3, 5, 7, 9]

# Создание копии списка в обратном порядке
sublist = numbers[::-1]
print(sublist)  # Вывод: [9, 8, 7, 6, 5, 4, 3, 2, 1]

Полезный совет: Срез всегда создает новый список (поверхностную копию). Это удобный способ скопировать список: new_list = old_list[:].

Перебор элементов списка

Списки можно перебирать с помощью цикла for.

numbers = [1, 2, 3, 4, 5]

# Способ 1: Прямой перебор (предпочтителен, если не нужен индекс)
# Этот способ более читаемый и "питонический" (Pythonic)
for number in numbers:
    print(number, end=" ")
# Вывод: 1 2 3 4 5

print() # для переноса строки

# Способ 2: Перебор по индексам (когда нужен сам индекс)
for i in range(len(numbers)):
    print(f"Индекс {i}, значение {numbers[i]}")

# Способ 3: Идеальный вариант, когда нужен и индекс, и значение
# Используйте встроенную функцию enumerate()
for i, number in enumerate(numbers):
    print(f"Индекс {i}, значение {number}")

Обработка нескольких соседних элементов

Очень важно помнить про диапазон функции range, если вы хотите брать за одну итерацию цикла несколько элементов, чтобы не выйти за пределы списка.

numbers = [12, 6, 2, 4, 9, 6, 10]
# Сравниваем текущий элемент со следующим
for i in range(len(numbers) - 1): # Идем до предпоследнего элемента
    if numbers[i] > numbers[i+1]:
        print(numbers[i], end=" ")
# Вывод: 12 6 9

Общее правило: Если в цикле вы обращаетесь к numbers[i+k], то диапазон цикла должен быть range(len(numbers) - k). Например, для обработки троек элементов (i, i+1, i+2), цикл будет for i in range(len(numbers) - 2).

Красивый вывод содержимого списка

numbers = [1, 2, 3, 4, 5]

# Способ 1: Через цикл и параметр end
for i in range(len(numbers)):
    print(numbers[i], end=" ")
# Вывод: 1 2 3 4 5

print() # для переноса строки

# Способ 2: Более элегантный и современный
# Использование оператора "*" (распаковка списка)
print(*numbers) # по умолчанию разделитель - пробел
# Вывод: 1 2 3 4 5

# Можно указать любой другой разделитель
print(*numbers, sep=", ")
# Вывод: 1, 2, 3, 4, 5
main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Получаем количество товаров в списке
n = int(input())

# Цикл по всем товарам
for i in range(n):
    # Получаем название товара
    name = input()
    # Получаем цену товара
    price = int(input())

    # Проверяем, четная ли цена
    if price % 2 == 0:
        # Если четная, применяем скидку 10 рублей
        new_price = price - 10
    else:
        # Если нечетная, применяем скидку 5 рублей
        new_price = price - 5

    # Выводим название товара и новую цену
    print(name)
    print(new_price)

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!