Найти - Пользователи
Полная версия: Задача с циклами.
Начало » Python для экспертов » Задача с циклами.
1
Roman_Y
Уважаемые Эксперты Python, помогите пожалуйста решить задачу.
Имеется 4 списка - см.приложенный файл.

# delta_history содержит ‘product names’, ‘prices delta’(например: цена за Февраль минус цена за Январь = february_price_delta)
# january_price_list содержит цены за Январь в формате JSON
# february_price_list содержит цены за Февраль в формате JSON
# march_price_list содержит цены за Март в формате JSON

Необходимо подсчитать все дельты между ценами и поместить их в delta_history используя Python без импортирования дополнительных модулей.
В случае ошибки(цены за Декабрь нет) программа должна выдать «No data».
Важное условие: код должен работать для любого количества элементов списков.
Важная заметка: количество элементов списка delta_history берется из количества элементов списков прайслистов.

Как решить эту задачу используя циклы?
PEHDOM
Roman_Y порядок продуктов всегда одинаков? продукты всегда одни и теже? их колличество одно и тоже?
Roman_Y
Спасибо за отклик PEHDOM!
1) порядок всегда одинаковый.
2) продукты разные всегда
3) количество всегда разное
PEHDOM
Roman_Y
продукты разные всегда
У вас в примере они одинаковые, и их количество в каждом месяце одно и тоже.Спрошу еще раз, может ли быть такое что в январе у вас нет огурцов, а в марте они появятся, или в апреле исчезнут апельсины?
или в каждом месяце товары всегда одни и теже, записаные в одном и томже порядке?
Roman_Y
Прошу прощения - в каждом месяце товары всегда одни и теже, записаные в одном и томже порядке. И количество всегда одинаковое.

 delta_history = [
    ['apple', ['january_price_delta', 'february_price_delta', 'march_price_delta']],
    ['orange', ['january_price_delta', 'february_price_delta', 'march_price_delta']]
]
january_price_list = [{'product': 'apple', 'price': '100'}, {'product': 'orange', 'price': '200'}]
february_price_list = [{'product': 'apple', 'price': '105'}, {'product': 'orange', 'price': '210'}]
march_price_list = [{'product': 'apple', 'price': '110'}, {'product': 'orange', 'price': '215'}]
PEHDOM
ну тогда все просто, берете счетчик по количеству элементов в месяце и перебираете их, занося в delta_history разницу.
py.user.next
Roman_Y
Имеется 4 списка - см.приложенный файл.
Приложи ещё один файл. В нём должен быть точный результат, который должен получиться после работы скрипта над первым файлом. Вручную прямо его сделай.

Вот у тебя есть входной файл и вот у тебя есть выходной файл. А дальше уже для них пишется скрипт, который сделает из входного файла в точности такой выходной файл. И после этого уже этому скрипту подаётся другой входной файл и скрипт уже сам делает выходной файл для другого входного файла.
Roman_Y
Спасибо Друзья!
Я нашел решение! Урррааа!
 for i, b in zip(march_price_list, february_price_list):
    d = int(i['price'])-int(b['price'])
    print(d)
Вся сложность была в том что я думал делать цикл не с той таблицей с которой это надо было делать. И второе - я не знал что в одном цикле можно делать перебор сразу по двум спискам(для этого есть чертовски замечательная вещь под названием zip!!!!!!)
PEHDOM
Roman_Y ну вобщем да, хотя не обязательно использвать элементы, можно использовать индексы:
  for i in range(len(march_price_list)):
    d= march_price_list[i]['price']-february_price_list[i]['price'] #к int  не приводил, но это и так понятно
иногда удобнее по элементам, иногда по индексам. А цикле можн делать перебор хоть по тысяче списков одновременно.
py.user.next
Roman_Y
Я нашел решение!
Откуда ты знаешь? Барашек тоже бегал в девятиэтажке и искал выход, натыкался на стены и не мог выйти никуда; но тут он догадался подняться вверх по лестнице, так он постепенно выбежал на крышу и закричал “ура! я нашёл выход! надо было всего-то подняться наверх! я не знал, что можно шагать по нескольким ступенькам! а вот для этого в доме как раз есть функция zip()!”.

Поэтому тебе и говорят: сначала определись с конечным файлом и только после этого начинай писать код, который приведёт начальный файл к конечному файлу.
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