通过字典过滤以显示项目

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

因此,我有一本名为library_collections的字典,其中包含另外两本字典,分别是书籍和电影。

书籍:每本书包含8个变量,变量名称在第一行定义。它们包括:标题,作者,发行者,页面,年份,份数,可用和ID。 “份数”字段表示集合中拥有的份数。 “可用”字段表示当前时间点可用于签出的副本数。 ID字段是商品的唯一标识符。

电影:每个电影包含8个变量,这些变量在第一行定义。它们包括:标题,导演,长度,体裁,年份,份数,空缺和ID。 “份数”字段表示集合中拥有的份数。 “可用”字段表示当前时间点可用于签出的副本数。 ID字段是商品的唯一标识符。

我与该词典要做的任务之一是:允许用户请求显示书籍(通过键入“ db”)或电影(通过键入“ dm”)的全部集合,分页通过结果10一次。用户应该能够按下以继续移动到下一组十项,直到显示了整个集合。用户应该能够按“ m”(然后)以退出显示过程并返回到选项菜单。

我的问题是我似乎无法获得显示接下来的10个项目的代码。我不知道我在搞砸。每次我运行代码时,都会出现10本书。我知道它与我的范围函数有关,我知道我应该使用范围函数,但是,我对为什么它不能继续到下一个10感到困惑。

def display_collection(library_collections):
count = 0
for i in range (count, count + 10):
    for id, info in library_collections.items():
        print("\nID:", id)
        count += 1
        for item in info:
            print(item, ":", info[item])
        if count == 10:
                answer = input("Press 'enter' to show more items, or type 'm' to return to the menu: ")
                if answer == "":
                    count += 10
                    display_collection(library_collections)
                elif answer == "m":
                    prompt_user_with_menu()

请让我知道是否需要更多信息。

关键术语:library_collection是我的外字典,其中包含书籍和电影字典,其中每个字典和电影字典均包含不同的实例。

关键字:prompt_user_with_menu()只是一个函数,该函数可打印缩写词,以使用户知道他们可以做什么。例如,它将打印db =显示所有书籍,而dm =显示所有电影。

python dictionary nested
1个回答
0
投票

您当前不需要的代码有两个循环。此外,由于您使用递归控制流,因此循环并没有真正实现您想要的功能。与坚持循环并正确处理循环相比,这通常是一个更糟糕的主意。

在这种情况下,我认为您只需要一个循环。可以通过计算使用enumerate迭代的值的数量,然后使用%运算符获取模数来触发“更多”提示:

def display_collection(library_collections):
    for count, (key, value) in enumerate(library_collections.items()):
        # display each item here, however you like
        print(value) # I'll just do this for simplicity, since I don't understand your data

        if count % 10 == 9: # this will be true after every 10th item
            menu = input("Press 'enter' to show more items, or 'm' to return to the menu: ")
            if menu == "m":
                return # we are presumably called by the menu function, so just go back there!
            # no else is needed, we just continue looping if anything else was entered

正如我在评论中指出的那样,确保菜单再次显示可能不应该是此功能的工作,相反,应仅将其调用者return。可能是从菜单本身调用的,所以返回的代码正是我们想要返回的!只需使菜单代码在其自己的循环中运行(并确保菜单可以运行的所有其他功能也都返回到它),就应该设置好了。

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