Найти - Пользователи
Полная версия: Задача про определение самой дешевой цены продукта в магазинах
Начало » Python для новичков » Задача про определение самой дешевой цены продукта в магазинах
1
terott
Добрый день, уважаемые форумчане!

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

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

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

Сам файл в 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)

Знаю, что решаю её не правильно, но пока сообразить не могу как сравнить все списки с ценами и вытащить минимальные вместе с магазином к товару.
Думал на счет сравнения всех списков и вытягивания только минимальных, но тоже пока не получается(
Romissevd
 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)
Сортировку сам организуй
terott
Огромнейшее Вам спасибо, Вы гений!!!
py.user.next
terott
Задачу нужно решить без использования специальных библиотек для работы с табличными данными.
Сам файл в csv формате и разделителем выступает точка с запятой.
Всё-таки надо модуль csv использовать. CSV-формат - это не просто “разделитель точка с запятой”, он гораздо сложнее устроен.

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

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

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

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

А у тебя как бы неочищенная картошка кладётся в кастрюлю, в которой воды нет, а потом ты её нагреваешь. И потом ты берёшь морковку и кладёшь её сверху. А где вода? А то, что там земля сыпется в кастрюлю? Какой суп ты ожидаешь из этого получить? Да даже если ты воды нальёшь, всё равно это будет какая-то грязная мешанина. Нужно всё по правилам делать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB