首页 > 解决方案 > Python:单击所有可能(更改)的菜单组合

问题描述

我有 3 个菜单,每个菜单取决于后续菜单选择(menu_3取决于menu_2选择,menu_2取决于menu_1选择)。我试图通过单击最后一个菜单来获得所有可能的组合,然后遍历选项。然后返回menu_2,选择下一项,并遍历所有新menu_3选项。我不断地创建一个无限循环/无限递归,或者我完成一次迭代并停止。

(我在一个网站上这样做,所以我没有继续向该网站发送请求,而是尝试在本地完成它。)

这是我目前所处的位置,它正在创建无限递归:

menu_1 = ['apple', 'orange', 'banana']
menu_2 = ['cat', 'dog', 'bird', 'fish']
menu_3 = ['red', 'orange', 'yellow', 'green', 'blue']
menu_names = ['menu 1', 'menu 2', 'menu 3']
menus = [menu_1, menu_2, menu_3]

def recursion_testing(depth = len(menus) - 1, count = 0):
    for i in range(depth):
        print('count: ' + str(count))
        if count == depth:
            print('menu: ' + menu_names[count])
            for j in range(len(menus[count])):
                print(menus[count][j])
            count = 0
        else:
            return recursion_testing(depth, count+1)

recursion_testing()

最终,我的输出将是当您单击 、 等时显示的列表redorange如果我可以让这个小测试输出类似这样的内容,我可以找出最后一点:

'apple'
'cat'
'red'
'orange'
'yellow'
'green'
'blue'
'apple'
'dog
'red'
'orange'
'yellow'
'green'
'blue'

...ETC。

标签: pythonrecursion

解决方案


您不需要递归来获得这些菜单的所有可能性,因为它们的数量是有限的:

allOptions = []
for mi1 in menu_1:
    for mi2 in menu_2:
        for mi3 in menu_3:
            allOptions.append( (mi1, mi2, mi3) )

这为您提供了所有可能的长度为 3 的菜单组合。


推荐阅读