Python, поиск ключевого слова во всех объектах класса, возврат true - PullRequest
1 голос
/ 17 июня 2020

здесь новый плакат, не новичок в поиске ответов других людей ...

Я новичок в программировании и Python, и все хорошо, но я избегал OOP в моих предыдущих программах, так как я не мог в этом разобраться.

Я просмотрел несколько руководств и решил, что единственный способ научиться этому - это делать это на практике.

Я полагаю, что мог бы сделать эту программу, используя стандартный диктатор, но я делаю это скорее как обучающее упражнение, чем что-либо еще. , «ингредиенты», «диетическая информация» и «теги», которые позволяют мне искать ключевое слово в выбранной одной из этих категорий и возвращать результаты.

Как только я получаю истинный результат, я могу управлять этим чтобы показать больше класса или чего-то еще, в данный момент моя программа просто завершается без вывода search_term, указывающего на ложный возврат, несмотря на то, что я проверял орфографию.

Я просто пытаюсь преодолеть эту лежачую полицейскую, чтобы продвинуться по своей программе. Также любые отзывы о моем коде, который пока слишком длинный, et c. И как закрепить это очень приветствуется.

Извинения за эссе!

   class Meal(object):
     def __init__(self, name, ingredients, dietary, tags):
        self.name = name
        self.ingredients = ingredients
        self.dietary = dietary
        self.tags = tags

m1 = Meal ("Carbonara", ("Pasta", "Eggs", "Garlic", "Mushrooms", "Parmesan cheese"), ("Vegetarian", "Gluten-free(optional)"),("Quick", "Easy"))
m2 = Meal ("Avocado Pasta", ("Avocado", "Pasta", "Basil", "Lime", "Garlic", "Parmesan cheese", "Olive oil"), ("Vegetarian", "Gluten-free(optional)"),("Quick", "Easy"))

print("What category would you like to search? ")
print("1) Meal name\n2)Ingredient\n3)Specific diet\n4)Smart tag")
category = int(input("Select a number: "))
if category == 1:
    search_term = input("what would you like to search for?")
    for x in m1.name:
        if x == search_term:
            print (search_term)
            break
        elif x != search_term:
            for x in m2.name:
                if x == search_term:
                    print(search_term)
                    break
            else:
                x = None```

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

В python строки являются итеративными, и цикл по нему в основном приведет вас к char за char.

Итак, в вашем фрагменте кода, в частности: m1.name:

Это на самом деле будет go через "Карбонара" и сравнить 'C', 'a', ... с вашим поисковым запросом, который, как я полагаю, не то, что вы хотеть.

В качестве альтернативы, если вы искали поиск по ингредиентам, тогда это просто неправильный тип, и вместо этого должен быть m1.ingredients.

0 голосов
/ 17 июня 2020

Если вы хотите немного улучшить свой код, вы можете написать что-то вроде этого:

class Meal():
    def __init__(self, name, ingredients, dietary, tags):
        self.name = name
        self.ingredients = ingredients
        self.dietary = dietary
        self.tags = tags

    def get_attr(self, num):
        if num == '1':
            return self.name
        elif num == '2':
            return self.ingredients
        elif num == '3':
            return self.dietary
        elif num == '4':
            return self.tags

m1 = Meal ("Carbonara", ("Pasta", "Eggs", "Garlic", "Mushrooms", "Parmesan cheese"), ("Vegetarian", "Gluten-free(optional)"),("Quick", "Easy"))
m2 = Meal ("Avocado Pasta", ("Avocado", "Pasta", "Basil", "Lime", "Garlic", "Parmesan cheese", "Olive oil"), ("Vegetarian", "Gluten-free(optional)"),("Quick", "Easy"))

meal_objects = {
    m1.name: m1,
    m2.name: m2
}

search_term = input("what would you like to search for?\n")

if meal_objects.get(search_term): # To make sure that search_term is exist in meal_objects otherwise we can get error
    print("\nWhat category would you like to search? ")
    print("1)Meal name\n2)Ingredient\n3)Specific diet\n4)Smart tag")
    category = input("Select a number: ")
    category_value = meal_objects[search_term].get_attr(category)
    print(f'\n{category_value}') if category_value else print('\nWrong value of category')
else:
    print('Meal not found.')

Вам следует попытаться создать больше методов класса, чтобы облегчить понимание и использование вашего кода.

0 голосов
/ 17 июня 2020

Я предполагаю, что вам нужно найти имя в списке элементов питания.

Лучше создать список элементов питания

Так что что-то вроде этого должно работать

meal_list = [m1,m2]

Тогда в фактическом коде.

if category == 1:
    search_term = input("what would you like to search for?")
    #Loop over your list of Meal items
    for x in meal_list:
        if x.name == search_term:
            print(search_term)
            break
        else:
            #Whatever you want to do here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...