Найти - Пользователи
Полная версия: Реализовать функцию, которая будет получать информацию
Начало » Python для новичков » Реализовать функцию, которая будет получать информацию
1
Alduin
У вас есть файл, содержащий рецепты в виде:

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
   

py.user.next
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
Неправильно реализовано. И сделано неправильно, и результат даёт неправильный.

Тебя вообще интересует правильная реализация? Или ты пишешь ни пойми что, лишь бы какой-то там курс пройти и получить сертификат? Задания-то неплохие, но твои решения этих разных задач вообще ни о чём.
Alduin
Интересует правильная реализация
Alduin
Изучаю пайтон только вот новичек.Хочу набить скилл и научитсья прогать.Но иногда просто не вижу самого алгоритма реализации кода для задания вот в чем проблема или не полностью понимаю также
py.user.next
Alduin
Хочу набить скилл и научитсья прогать.Но иногда просто не вижу самого алгоритма реализации кода для задания вот в чем проблема или не полностью понимаю также
Тогда нужно дорешивать каждое задание. Ты уже запостил три задания и каждое не дорешал, а потом постишь следующее. Это и выглядит, как будто надо просто что-то успеть где-то и всё, а результат похрену.

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

Во-вторых, файл нужно открывать в правильной кодировке. При открытии файла, кодировка указывается дополнительно в параметре encoding.

Так что посвяти этому время, сделай хотя бы одну задачу нормально, а потом уже приступай к следующим задачам. Много решённых наполовину задач дают много пробелов в знаниях. А чтобы что-то делать, как ты говоришь, иметь скилл, нужно иметь полные знания. А получить полные знания можно только одним способом - решая задачи полностью.
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


Сделал))))
Единственное что возможно подскажите а что если я не знаю какой будет ключ и как бы нужно проверить содержимое тоби ж содержится ли он в ключе
я думаю это можно реализовать так:
If seacrh_id in dct:
….
Верно ?
py.user.next
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
Если рецепта с указанным search_id в файле нет, функция должна вернуть None
Это означает, что return должен быть только один - внутри условия, которое внутри цикла. Если ничего найдено не будет, то функция и так вернёт None.

В цикле проверяются записи, а проверяются они по условию вхождения ключа в запись. Если ключ входит в запись, то из записи формируется словарь. Если словарь сформировался, он возвращается из функции и всё. Поэтому если запись не будет найдена с таким ключом, то возврата словаря не будет, а в конце функции при выходе из функции из неё вернётся None.

Пока что под большим вопросом то, можешь ли ты вообще обучаться.
Alduin
В задание просто без csv нужно сделать.Но автопроверка как бы пропустила решение и засчитало
py.user.next
Alduin
В задание просто без csv нужно сделать.Но автопроверка как бы пропустила решение и засчитало
Так а ты тогда там вопросы и спрашивай. Там тебе будут говорить, что ты гений. Научился-то ты чему? Неправильно код писать? Ты говоришь “мне нужен скилл”. И где он, этот скилл?

Alduin
  
with open(path, 'r') as fh:
Вот это вообще вызывает вопросы. Кодировка не указана у файла при открытии.

Как у тебя тут идёт русский текст
Alduin
  
1 большой семечки без воды
и оно у тебя приняло, что ты типа правильно код написал? Значит, оно там проверяет только английский текст.

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

Вот так это делается
  
with open(path, 'r', encoding='utf-8') as fh:
И у тебя нигде этого нет. И эти курсы тебе тоже это всё не объяснили. Что-то там приняли как правильное и сказали тебе “молодец! ты гений! ура!”.
xam1816
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)


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