Python 制定决策树

Python 制定决策树,python,python-3.x,Python,Python 3.x,我有十个系统,A,B,C,…,J。 每个系统可以向上或向下。 例如,如果系统A、B、D和J处于关闭状态,而其余部分处于打开状态,则我希望执行操作X。 如果系统C、D和H处于关闭状态,而其余部分处于打开状态,则我要执行操作Y。 如果系统A、E、F、H和I处于关闭状态,其余部分处于打开状态,则我要执行操作Z 我想写一个程序,将打印各种组合(我相信有10个系统,每个可以向上或向下有100个组合) 到目前为止,我有: import itertools status_list = ( "Up",

我有十个系统,A,B,C,…,J。 每个系统可以向上或向下。 例如,如果系统A、B、D和J处于关闭状态,而其余部分处于打开状态,则我希望执行操作X。 如果系统C、D和H处于关闭状态,而其余部分处于打开状态,则我要执行操作Y。 如果系统A、E、F、H和I处于关闭状态,其余部分处于打开状态,则我要执行操作Z

我想写一个程序,将打印各种组合(我相信有10个系统,每个可以向上或向下有100个组合)

到目前为止,我有:

import itertools
status_list = (
    "Up",
    "Down",
)
component_list = (
    "A",
    "B",
    "C",
    "D",
    "E",
    "F",
    "G",
    "G",
    "I",
    "J",
)
combinations = itertools.product(component_list, status_list)

如果您不介意使用二进制表示,我们可以使用
0
表示
Up
1
表示
Down

我们的数值范围从
0
,到
10^2-1

哪个是
0
1023
,或者

0000000000
1111111

因此,我们可以从0循环到1023,以10位二进制格式打印数字:

for x in range(2**10):
    print '{0:010b}'.format(x)
产出:

0000000000
0000000001
0000000010
0000000011
0000000100
0000000101
0000000110
...etc
Up Up Up Up Up Up Up Up Up Up
Up Up Up Up Up Up Up Up Up Down
Up Up Up Up Up Up Up Up Down Up
Up Up Up Up Up Up Up Up Down Down

如果您想更有趣地打印
向上
向下
而不是
0
1
,您可以逐个检查数字并转换:

for x in range(2**10):

    #Iterate over each character c in the binary number x
    #Convert c to an int
    #Look up the value in status_list by taking c mod length of status list
    print(" ".join(status_list[int(c)%len(status_list)] for c in '{0:010b}'.format(x)))
产出:

0000000000
0000000001
0000000010
0000000011
0000000100
0000000101
0000000110
...etc
Up Up Up Up Up Up Up Up Up Up
Up Up Up Up Up Up Up Up Up Down
Up Up Up Up Up Up Up Up Down Up
Up Up Up Up Up Up Up Up Down Down

您可以使用
itertools打印
向上
向下
的所有可能组合。产品

import itertools
components = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
statuses = ['Up', 'Down']

for state in itertools.product(statuses, repeat=len(components)):
    for c,s in zip(components, state):
        print '{}:{}'.format(c,s),
    print
这将产生如下输出:

A:Up B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Up
A:Up B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Down
...
A:Up B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Up
A:Up B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Down
A:Down B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Up
A:Down B:Up C:Up D:Up E:Up F:Up G:Up H:Up I:Up J:Down
...
A:Down B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Up
A:Down B:Down C:Down D:Down E:Down F:Down G:Down H:Down I:Down J:Down

它可以很好地处理不同数量的组件或状态(例如,您可以使
状态=['Up'、'Down'、'Unknown']
,您将得到3^10=59049个输出)。

好的,有2^10个组合=1024实际上有
2^10
可能的状态。如果愿意的话,您可以更进一步,将组件列表值添加到相应列的前面。