Форум сайта python.su
У вас есть файл, содержащий рецепты в виде:
60b90c1c13067a15887e1ae1,Herbed Baked Salmon,4 лимона,1 большой редкий ион,2 tablespoons chopped fresh basil
60b90c2413067a15887e1ae2,Lemon Pancakes,2 tablespoons baking powder,1 cup vanilla-flavored mandle milk,1 lemon
60b90c2e13067a15887e1ae3,Chicken and Cold Noodles,6 ounces dry Chinese noodles,1 tablespoon sesame oil,3 tablespoons soy sauce
60b90c3b13067a15887e1ae4,Watermelon Cucumber Salad,1 большой семечки watermelon,12 leaves fresh mint,1 cup crumbled feta cheese
60b90c4613067a15887e1ae5,State Fair Lemonade,6 lemons,1 cups white sugar,5 cups cold water
Каждый рецепт записан с новой строки (не забываем при решении задачи о конце строки). Каждая запись начинается с первоначального ключа базы данных MongoDB. Далее через запятую, идет название рецепта, а затем через запятую, идет перечень ингредиентов рецепта.
Вам необходимо реализовать функцию, которая будет получать информацию о рецепте в виде словаря для каждого ищущего блюда. Создайте функцию get_recipe(path, search_id), которая будет возвращать словарь для рецепта с указанным идентификатором MongoDB.
Где параметры функции:
path – путь к файлу.
search_id – первичный ключ MongoDB для поиска рецепта
Требования:
Используйте менеджер контекста with для чтения из файла
Если рецепта с указанным search_id в файле нет, функция должна вернуть None
Пример: для указанного выше файла вызов функции в виде
get_recipe(“./data/ingredients.csv”, “60b90c3b13067a15887e1ae4”)
Должен найти в файле строку 60b90c3b13067a15887e1ae4,Watermelon Cucumber Salad,1 large seedless watermelon,12 leaves fresh mint,1 cup crumbled feta cheese и вернуть результат в виде словаря такой структуры:
{
“id”: “60b90c3b13067a15887e1ae4”,
“name”: “Watermelon Cucumber Salad”,
“ingredients”: [
“1 большой семечки без воды”,
“12 leaves fresh mint”,
“1 cup crumbled feta cheese”,
],
}
Кто может обьяснить мне логику написания кода????А то столько текста уже перегружена голова.
Мой код :
def get_recipe(path, search_id): res = [] with open(path, 'r') as fh: for i in fh.read().split(): search_id = i.split(",") dct={"id": search_id[0], "name": search_id[1], "ingredients": search_id[2]} res.append(dct) print(res) return res
Офлайн
AlduinНеправильно реализовано. И сделано неправильно, и результат даёт неправильный.
Мой код :def get_recipe(path, search_id): res = [] with open(path, 'r') as fh: for i in fh.read().split(): search_id = i.split(",") dct={"id": search_id[0], "name": search_id[1], "ingredients": search_id[2]} res.append(dct) print(res) return res
Отредактировано py.user.next (Янв. 19, 2023 22:07:16)
Офлайн
Интересует правильная реализация
Офлайн
Изучаю пайтон только вот новичек.Хочу набить скилл и научитсья прогать.Но иногда просто не вижу самого алгоритма реализации кода для задания вот в чем проблема или не полностью понимаю также
Отредактировано Alduin (Янв. 19, 2023 22:22:03)
Офлайн
AlduinТогда нужно дорешивать каждое задание. Ты уже запостил три задания и каждое не дорешал, а потом постишь следующее. Это и выглядит, как будто надо просто что-то успеть где-то и всё, а результат похрену.
Хочу набить скилл и научитсья прогать.Но иногда просто не вижу самого алгоритма реализации кода для задания вот в чем проблема или не полностью понимаю также
Офлайн
def get_recipe(path, search_id): with open(path, 'r') as fh: for i in fh.read().split("\n"): # print(i.split(',')) if search_id == '60b90c3b13067a15887e1ae4': dct = {"id": i.split(",")[0], "name": i.split(",")[1], "ingredients": i.split(',')[2:]} print(dct) return dct
Офлайн
AlduinДелай через csv, как я сказал выше. Примеры открывания и чтения данных там есть в документации.
Сделал))))
AlduinВот это, например, - дурость самая натуральная. То есть ты просто не знаешь, что строки можно прочитать вот такfor i in fh.read().split("\n"):
with open(path, 'r') as fh: for i in fh:
AlduinО, опять. Эти разбиения по запятым такая тупость.dct = {"id": i.split(",")[0], "name": i.split(",")[1], "ingredients": i.split(',')[2:]}
AlduinВопрос тоже бредовый сам по себе.
Единственное что возможно подскажите а что если я не знаю какой будет ключ и как бы нужно проверить содержимое тоби ж содержится ли он в ключе
AlduinЭто значит, что при разложении на поля, в первом поле ключ будет целиком указан. Никаких частичных указаний ключа там не будет.
Каждый рецепт записан с новой строки (не забываем при решении задачи о конце строки). Каждая запись начинается с первоначального ключа базы данных MongoDB.
AlduinЭто означает, что return должен быть только один - внутри условия, которое внутри цикла. Если ничего найдено не будет, то функция и так вернёт None.
Если рецепта с указанным search_id в файле нет, функция должна вернуть None
Отредактировано py.user.next (Янв. 20, 2023 22:41:29)
Офлайн
В задание просто без csv нужно сделать.Но автопроверка как бы пропустила решение и засчитало
Офлайн
AlduinТак а ты тогда там вопросы и спрашивай. Там тебе будут говорить, что ты гений. Научился-то ты чему? Неправильно код писать? Ты говоришь “мне нужен скилл”. И где он, этот скилл?
В задание просто без csv нужно сделать.Но автопроверка как бы пропустила решение и засчитало
AlduinВот это вообще вызывает вопросы. Кодировка не указана у файла при открытии.with open(path, 'r') as fh:
Alduinи оно у тебя приняло, что ты типа правильно код написал? Значит, оно там проверяет только английский текст.1 большой семечки без воды
with open(path, 'r', encoding='utf-8') as fh:
Отредактировано py.user.next (Янв. 21, 2023 01:15:02)
Офлайн
Alduin
def get_recipe(path, search_id):
with open(path, ‘r’) as fh:
for i in fh.read().split(“\n”):
# print(i.split(','))
if search_id == ‘60b90c3b13067a15887e1ae4’:
dct = {“id”: i.split(“,”), “name”: i.split(“,”), “ingredients”: i.split(',')}
print(dct)
return dct
Сделал))))
result = get_recipe('ingredients.csv', '60b90c1c13067a15887e1ae1') print(result)
Офлайн