Python,搜索一个类中所有对象的关键字,返回true。

问题描述 投票:0回答:1

我是新来的,并不是新来寻找别人的答案。

我对编程和Python很陌生,一直以来都还不错,不过我之前的程序一直在回避OOP,因为我无法理解它的意义。

我看了一些教程,觉得只有通过实践才能真正学会它。

我相信我很可能用标准的dict来制作这个程序,但我这样做更多的是作为一种学习练习。

我试图制作一个程序,将饭菜存储为一个包含 "名称"、"成分"、"饮食信息 "和 "标签 "的对象,使我能够在选定的这些类别中搜索一个关键字并返回结果。

一旦我得到一个真实的返回,我就可以操作这个来显示更多的类或什么,目前我的程序只是终止,而不打印search_term表示一个错误的返回,尽管我检查了我的拼写。

我只是想通过这个速度上的障碍,这样我的程序就可以进步了。 还有任何关于我的代码的反馈,到目前为止,我的代码太长了,等等。以及如何巩固是非常欢迎的。

对于这篇论文表示歉意!

   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```
python oop search
1个回答
0
投票

我假设你需要在一个Meal items列表中搜索一个名字。

一个更好的方法是创建一个Meal items的列表

所以类似这样的东西应该可以用

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

0
投票

在Python中,字符串是可以迭代的,在它上面循环基本上会把你的char一个一个的带过。

所以在你的这段代码中

for x in m1. name:

这实际上是通过 "Carbonara "来比较 "C", "a", ... 和你的搜索词, 我想这不是你想要的.

另外,如果你想通过成分来搜索,那么这只是一个错误的类型,应该是m1.成分。


0
投票

如果你想改进一下你的代码,你可以写这样的东西。

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.')

你应该尝试创建更多的类方法 使你的代码更容易理解和使用.

© www.soinside.com 2019 - 2024. All rights reserved.