2014-04-10 5 views
-1

나는 10 개의 시스템 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

음, 2^10 조합 = 1024 –

+0

실제로 '2^10'가능한 상태가 있습니다. http://mathworld.wolfram.com/String.html –

답변

1

:

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 
:

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 

이 다음과 같은 출력을 생성

가변 수의 구성 요소 또는 상태를 적절하게 처리합니다 (예 : states = ['Up', 'Down', 'Unknown']을 만들면 3^10 = 59049 출력을 얻을 수 있습니다).

1

, 우리는 우리의 가치가 0에서 Down

범위 것 표현하기 위해 1Up을 표현하기 위해 0을 사용할 수 있습니다 , 10^2-1,

0 내지 1023 또는

0000000000 to 1111111111.

그래서 우리 수는 0에서 1023 만 루프, 10 자리 바이너리 형식에서 숫자를 인쇄 :

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

출력 : 당신이 얻을 싶었다면

0000000000 
0000000001 
0000000010 
0000000011 
0000000100 
0000000101 
0000000110 
...etc 

더 화려하고 인쇄 updown 대신 01, 숫자를 하나씩 검토하고 변환 할 수 있습니다 :,210

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))) 

출력 :

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.product를 사용 UpDown의 가능한 모든 조합을 인쇄 할 수 있습니다
+0

원할 경우 더욱 흥미롭고 각 열 앞에 component_list 값을 추가 할 수 있습니다. – Tyler