Задача про определение самой дешевой цены продукта в магазинах

terott

Новичок
Пользователь
Апр 25, 2020
2
0
1
Добрый день, уважаемые форумчане!

Прошу помочь решить задачу, никак сообразить не могу. Суть задачи в следующем:

Определить самый дешевый продукт и в каком магазине он продается. Название продукта следует записать в первой строке, а название магазина - во второй. Если несколько товаров стоят одинаково, то выведите то название, которое раньше в алфавитном порядке. Если этот товар продается в нескольких магазинах по одной минимальной цене, то выведите минимальное в алфавитном порядке название магазина.

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

Сам файл в csv формате и разделителем выступает точка с запятой.


Сейчас на таком этапе:

Python:
with open(“C:\\Users\\Windows 10\\Desktop\\problem5.csv”, ‘r’, encoding='utf8') as fh:

text = fh.read()



#def getMinIndex(seq):

# minIndex = 0

# for i, x in enumerate(seq):

# if x < seq:

# minIndex = i

# return minIndex



#for i,j in shops_and_prices:

# result =



def strings_to_num(price):

return



data = list(map(lambda s: s.split(';'), text.splitlines()))

product = data

shops_and_prices = [(row, strings_to_num(row)) for row in data]

best_row = min(shops_and_prices, key=lambda shop_and_price: shop_and_price)

best_shop, best_prices = best_row





for products in zip(product, best_prices):

print('{} {}'.format(*products) + ‘ ’ + best_shop)


Знаю, что решаю её не правильно, но пока сообразить не могу как сравнить все списки с ценами и вытащить минимальные вместе с магазином к товару.
Думал на счет сравнения всех списков и вытягивания только минимальных, но тоже пока не получается(


win 10
python 3.8
 

Вложения

  • problem5 — копия.txt
    1,1 КБ · Просмотры: 6
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Пример выше выводит все товары и магазины где они самые дешевые. Вот пример, который выводит название самого дешевого товара и магазина где он продается (В данном примере - Листья собачьей петрушки - Магнит):
Python:
goods = []  # список товаров
prices = {}  # словарь {название магазина:список цен}
with open('problem5.txt', 'r', encoding='utf-8') as f:
    # заполняем список список товаров
    goods = next(f).split(';')
    # убираем пустое значение в начале
    goods = goods[1:]
    # заполняем список магазинов и цен
    for i in f:
        s = i.split(';')
        prices[s[0]] = s[1:]

# список [минимальная цена, магазин, товар]
min_prices = []

min_price = None
# проходим в цикла по словарю с магазинами и ценами
for k, v in prices.items():
    # проходим в цикле по списку цен конкретного магазина
    for i, item in enumerate(v):
        # если нет минимальной цены - ставим текущую
        if min_price is None:
            min_price = item
        # если есть
        else:
            # сравниваем с текущей
            if min_price >= item:
                # если текущая меньше - заносим в список минимальных цен
                min_prices.append([item.strip(), k.strip(), goods[i].strip()])
                # обновляем минимальную цену
                min_price = item

# сортируем список
min_prices.sort()
# выводим название товара
print(min_prices[0][2])
# выводим название магазина
print(min_prices[0][1])
 
  • Мне нравится
Реакции: terott и Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:
Python:
goods = []  # список товаров
prices = {}  # словарь {название магазина:список цен}
with open('problem5.txt', 'r', encoding='utf-8') as f:
    # заполняем список список товаров
    goods = next(f).split(';')
    # убираем пустое значение в начале
    goods = goods[1:]
    # заполняем список магазинов и цен
    for i in f:
        s = i.split(';')
        prices[s[0]] = s[1:]

# словарь {название товара:None}
min_prices = dict(list(zip(goods, [None for i in goods])))

# словарь {индекс товара:цена товара}
min_price = {}
# проходим в цикла по словарю с магазинами и ценами
for k, v in prices.items():
    # проходим в цикле по списку цен конкретного магазина
    for i, item in enumerate(v):
        # если минимальная цена на товар есть
        if min_price.get(i):
            # если она больше цены в данном магазине
            if min_price.get(i) > item:
                # обновляем минимальную цену
                min_price[i] = item
                # записываем магазин в словарь с самыми дешевыми товарами
                min_prices[goods[i]] = k
        # если минимальной цены для товара еще не добавлено
        else:
            # добавляем
            min_price[i] = item

# проходим в цикле по словарю {название товара:название магазина}
for k, v in min_prices.items():
    # выводим название товара
    print(k)
    # выводим название магазина
    print(v)
 
  • Мне нравится
Реакции: terott и Vlad_SD

Vlad_SD

Активный пользователь
Пользователь
Апр 7, 2020
91
45
18
Здравствуйте, вставьте, код в свое сообщение по правилам форума. Пример здесь:
 

terott

Новичок
Пользователь
Апр 25, 2020
2
0
1
stud_55

Огромнейшее спасибо Вам, особенно за разъяснение с комментариями. Вы лучший!
 
Последнее редактирование:

Форум IT Специалистов