Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2020 22:30:14

terott
Зарегистрирован: 2020-04-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Добрый день, уважаемые форумчане!

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

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

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

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


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

 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]:
# minIndex = i
# return minIndex
#for i,j in shops_and_prices:
# result = [min(p) for p in zip(j)]
def strings_to_num(price):
return [int(s) for s in price]
data = list(map(lambda s: s.split(';'), text.splitlines()))
product = data[0][1:]
shops_and_prices = [(row[0], strings_to_num(row[1:])) for row in data[1:]]
best_row = min(shops_and_prices, key=lambda shop_and_price: shop_and_price[1])
best_shop, best_prices = best_row
for products in zip(product, best_prices):
print('{} {}'.format(*products) + ' ' + best_shop)

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

Отредактировано terott (Апрель 26, 2020 00:27:17)

Прикреплённый файлы:
attachment problem5.csv (1,1 KБ)

Офлайн

#2 Апрель 25, 2020 23:36:52

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

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

 with open('problem5.csv', 'r', encoding='utf8') as fh:
    text = fh.read()
name_shop = list(map(lambda s: s.split(';')[0], text.splitlines()[1:]))
name_product = text.splitlines()[0].split(';')[1:]
data = list(map(lambda s: s.split(';')[1:], text.splitlines()[1:]))
product = data
shops_and_prices = [(num, list(map(int, row))) for num, row in enumerate(data, start=1)]
best_row = min(shops_and_prices, key=lambda shop_and_price: min(shop_and_price[1], key=lambda val: val))
best_price = min(best_row[1])
res = [(rows[0], num) for rows in shops_and_prices if best_price in rows[1]
       for num, price in enumerate(rows[1], start=1) if price == best_price]
for num_shop, num_product in res:
    print('{} - {}'.format(name_shop[num_shop - 1], name_product[num_product - 1]) + ' - ', best_price)
Сортировку сам организуй

Отредактировано Romissevd (Апрель 25, 2020 23:39:18)

Офлайн

#3 Апрель 25, 2020 23:54:06

terott
Зарегистрирован: 2020-04-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Огромнейшее Вам спасибо, Вы гений!!!

Офлайн

#4 Апрель 26, 2020 04:52:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10026
Репутация: +  857  -
Профиль   Отправить e-mail  

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

terott
Задачу нужно решить без использования специальных библиотек для работы с табличными данными.
Сам файл в csv формате и разделителем выступает точка с запятой.
Всё-таки надо модуль csv использовать. CSV-формат - это не просто “разделитель точка с запятой”, он гораздо сложнее устроен.

Так что, если можешь использовать модуль csv, используй его. Если же ты не можешь его использовать, тогда это файл не в CSV-формате, а просто текстовый файл с текстом, похожим на CSV-формат. В таком случае работать с ним надо как с текстом, в котором нет никакого формата и который теоретически может отходить от правил CSV-формата.

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

Вот и посчитай, сколько тебе функций надо, чтобы всё было чисто, красиво и всё правильно. А так у тебя просто свалка получается.

Это как суп варить: 1) ты сначала чистишь картошку, потом кожуру выбрасываешь в помойку, а картошку сначала нарезаешь, а потом её кладёшь в кастрюлю с водой; 2) ты сначала чистишь морковку, потом кожуру выбрасываешь в помойку, а морковку сначала нарезаешь, а потом кладёшь её в кастрюлю с водой; 3) когда в кастрюле с водой лежит чистая картошка и чистая морковка, ты её начинаешь нагревать, чтобы из этого суп начал получатся.

А у тебя как бы неочищенная картошка кладётся в кастрюлю, в которой воды нет, а потом ты её нагреваешь. И потом ты берёшь морковку и кладёшь её сверху. А где вода? А то, что там земля сыпется в кастрюлю? Какой суп ты ожидаешь из этого получить? Да даже если ты воды нальёшь, всё равно это будет какая-то грязная мешанина. Нужно всё по правилам делать.



Отредактировано py.user.next (Апрель 26, 2020 05:00:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version