搜索库存和显示信息

Search inventory and display information

我正在尝试编写一个搜索数据对象列表的代码,如果用户没有输入参考编号,它应该打印 "no such item found" 当用户输入有效的参考编号时,它应该显示有关该项目的信息。我的代码现在的方式是,它不会为每个数据对象打印 no such item found 而不是只打印一次。我怎样才能让它只打印一次?

def initialize():
    medialist=[
    MediaItem("TU2RL012","Movie","2001: A Space Odyssey",11.99, None ,"Stanley Kubrick","Keir Dullea"),
    MediaItem("GV5N32M9","Book","A Brief History of Time",10.17,"Stephen Hawking", None, None),
    MediaItem("1DB6HK3L","Movie","North by Northwest",8.99, None, "Alfred Hitchcock","Cary Grant"),
    MediaItem("PO5T7Y89","Movie", "The Good, The Bad, The Ugly",9.99,None,"Sergio Leone", "Clint Eastwood"),
    MediaItem("TR3FL0EW","Book","The Alchemist",6.99,"Paulo Coelho", None,None),
    MediaItem("F2O9PIE9", "Book", "Thus Spoke Zarathustra",7.81, "Friedrich Nietzsche", None, None),
    MediaItem("R399CED1","Book", "Jonathan Living Seagull",6.97,"Richard Bach", None, None),
    MediaItem("2FG6B2N9","Movie", "Gone with the Wind",4.99, "Victor Fleming","Vivien Leigh", None),
    MediaItem("6Y9OPL87","Book", "Gone with the Wind",7.99, "Margarett Mitchell", None, None)]
    return medialist

def search_item():
    referencenum=input("Enter item reference:")
    for obj in initialize():
        if referencenum != obj.reference:
            print("No Such Object found")`

您可以使用列表理解并使用 not in 而不是对所有对象单独进行 for 循环。

def search_item():
    reference_num = input("Enter item reference:")
    if reference_num not in [obj.reference for obj in initialize()]:
        print('No such object found')   

您可以先将所有 object 个参考编号收集在一个列表中

obj_references = [obj.reference for obj in initialize()]

然后检查是否匹配:

def search_item():
    referencenum=input("Enter item reference:")
    obj_references = [obj.reference for obj in initialize()]
    if referencenum not in obj_references:
        print("No Such Object found")

要显示有关 object 的更多信息,您可以先收集所有 objects

objects = initialize()

然后,分别收集您需要的有关每个 object

的信息
obj_references = [obj.reference for obj in objects]
obj_titles = [obj.title for obj in objects]
obj_ratings = [obj.rating for obj in objects]
obj_authors = [obj.author for obj in objects]

请注意,obj.titleobj.ratingobj.author 是如何提取 object 属性的示例。我不知道确切的属性名称,因此您需要替换 titleratingauthor 使用正确的名称。

然后,检查用户输入的参考号,如果匹配则打印信息

if referencenum not in obj_references:
    print("No Such Object found")
else:
    obj_id = obj_references.index(referencenum)
    print("Title:", obj_titles[obj_id], "Rating:", obj_ratings[obj_id],               
          "Author:", obj_authors[obj_id])

obj_id = obj_references.index(referencenum) returns 输入参考编号的索引,使用此索引,您可以从各自的列表中提取标题、评级和作者(例如 obj_titles[obj_id])。

完整的函数如下所示:

def search_item():
    referencenum = input("Enter item reference:")

    objects = initialize()
    obj_references = [obj.reference for obj in objects]
    obj_titles = [obj.title for obj in objects]
    obj_ratings = [obj.rating for obj in objects]
    obj_authors = [obj.author for obj in objects]

    if referencenum not in obj_references:
        print("No Such Object found")
    else:
        obj_id = obj_references.index(referencenum)
        print("Title:", obj_titles[obj_id], "Rating:", obj_ratings[obj_id],               
              "Author:", obj_authors[obj_id])