Блок else относится не к самому циклу, а к оператору break.
Несмотря на то, что задача относится к категории "без звездочки", она заставила меня поломать голову, как к ней подступиться. Очень хотелось "забуриться" в неведомые глубины, но к сожалению не хватило опыта. Возможно, есть более оптимизированный вариант написания этой программы, буду рада ознакомиться с ним.
И так:
Условие: Реализовать структуру данных «Товары». Она должна представлять собой список кортежей. Каждый кортеж хранит информацию об отдельном товаре. В кортеже должно быть два элемента — номер товара и словарь с параметрами (характеристиками товара: название, цена, количество, единица измерения). Структуру нужно сформировать программно, т.е. запрашивать все данные у пользователя.
Пример готовой структуры: [ (1, {“название”: “компьютер”, “цена”: 20000, “количество”: 5, “eд”: “шт.”}), (2, {“название”: “принтер”, “цена”: 6000, “количество”: 2, “eд”: “шт.”}), (3, {“название”: “сканер”, “цена”: 2000, “количество”: 7, “eд”: “шт.”}) ] Далее необходимо собрать аналитику о товарах. Реализовать словарь, в котором каждый ключ — характеристика товара, например название, а значение — список значений-характеристик, например список названий товаров. Пример: { “названия”: [“компьютер”, “принтер”, “сканер”], “цены”: [20000, 6000, 2000], “количества”: [5, 2, 7], “ед”: [“шт.”] }
Написание кода для этого условия похоже на создание артефакта из сказки про Кощея бессмертного, где в сундуке заяц, в зайце утка, в утке яйцо, а в яйце игла. Для начала я создала пустой массив - dns [], в который необходимо будет поместить кортеж - key (), а в него словарь - store {}. Потом попросила пользователя ввести количество запросов - count - необходимых нам данных, то есть сколько раз будем запрашивать у пользователя "наименование, цена, количество, единица". Полученные данные от пользователя помещаю в словарь store{}, в свою очередь словарь помещается в кортеж. Так как в кортеже элементы имеют индексы, и индексация начинается с нуля, и при выводе будет "видимый "0, а нам нужна нумерация с цифры 1, то мы в условии key() пишем i+1. Список dns заполнен.
Следующий шаг - собрать и объединить значения под ключами - "название, цена, количество, единица" Создаем новый пустой словарь - new_store, в нем заранее размещаем наши ключи - "название, цена, количество, единица" По итогу у нас 4 ключа. Каждый из этих ключей имеет значения. Чтобы их извлечь, значения, для них мы создаем пустые 4 массива - arr_name[], arr_price[], arr_quantity[], arr_measure[]. Запускаем цикл for, где i будет совершать итерации по массиву dns, вынимая нужные нам значения и размещая их в созданные массивы. Ниже будут расписаны пошаговые действия, потом я их сократила. Показываю их для наглядности своего решения.
Запускаю цикл for
for i in range(count):
Извлекаем из массива кортеж со словарем. Для этого создаем временную переменную temp1. Присваиваем ей значение находящийся в массиве: кортеж со словарем.
temp1 = dns[i]
print(temp1)
Извлекаем словарь из кортежа. Для этого создаем переменную temp2, которой присвоим значение кортежа под индексом 1. Под индексом 1 у нас находится словарь.
temp2 = temp1[1]
print(temp2)
Выводим значения, ключей которых мы укажем, например 'название'. Создаем переменную temp3 и присваиваем ей значения, находящиеся под ключом 'название'. dns[i][1]['название'] - список dns [], i - изменяемый показатель (1,2,3), собирает данные с кортежа (в кортеже три словаря), 1 - элемент кортежа, находящийся под индексом 1, соответственно ['название'] - обращаемся к значениям, находящихся под этим ключом.
temp3 = dns[i][1]['название']
print(temp3)
Все вышеописанные шаги сокращаю до двух строчек кода, но для одного ключа. То есть, будет четыре повтора (по количеству ключей).
В созданные пустые списки (arr_name[], arr_price[], arr_quantity[], arr_measure[]) я буду добавлять необходимые значения, а второй строкой кода эти списки будут размещаться в словаре new_store{}.
arr.append(dns[i][1]['название'])
new_store['название'] = arr
print(new_store)
Очень понравилась эта задача, скорее всего из-за своей простоты. Решение реализовала через словарь.