我是新来的,并不是新来寻找别人的答案。
我对编程和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```
我假设你需要在一个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
在Python中,字符串是可以迭代的,在它上面循环基本上会把你的char一个一个的带过。
所以在你的这段代码中
for x in m1. name:
这实际上是通过 "Carbonara "来比较 "C", "a", ... 和你的搜索词, 我想这不是你想要的.
另外,如果你想通过成分来搜索,那么这只是一个错误的类型,应该是m1.成分。
如果你想改进一下你的代码,你可以写这样的东西。
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.')
你应该尝试创建更多的类方法 使你的代码更容易理解和使用.