[PYTHON 3.7]
Предпосылка моего запроса:
Получение кода бэкенда из LADDER logi c программы и восстановление данных из XML file.
У меня старт STEP S1
. Дерево представляет собой последовательность. Я хочу итеративно циклически проходить по дереву и создавать упорядоченный список элементов этого пути между двумя шагами (S1
является первым).
[graphical example]
[S1]
|
B3|_________
| |
[T1] [T7]
| |
| B4|
| |
[S2] [S3]
Идеальный логический c Пример потока:
[S1] --> [B3] --> [T1] --> [S2]
|
\--> [T7] --> [B4] --> [S3]
Это приводит (в идеале):
1: [ [S1], [B3], [T7], [B4], [S3] ]
2: [ [S1], [B3], [T1], [S2] ]
Что нужно знать:
- Конечный шаг может исходить непосредственно из перехода или из ветви
- Каждый элемент имеет уникальный идентификатор в своем типе
- Каждый элемент в списках относится к уникальному идентификатору и имеет информацию о следующем соединении
Данные:
STEPS
con_steps = [[['StepRef', {'Number': '1'}], ['BranchRef', {'Number': '3', 'In': '0'}]], [['StepRef', {'Number': '3'}], ['BranchRef', {'Number': '11', 'In': '0'}]], [['StepRef', {'Number': '5'}], ['BranchRef', {'Number': '12', 'In': '0'}]], [['StepRef', {'Number': '4'}], ['BranchRef', {'Number': '13', 'In': '0'}]], [['StepRef', {'Number': '2'}], ['BranchRef', {'Number': '14', 'In': '0'}]]]
BRANCHES
con_brans = [[['BranchRef', {'Number': '3', 'Out': '0'}], ['TransitionRef', {'Number': '1'}]], [['BranchRef', {'Number': '3', 'Out': '1'}], ['TransitionRef', {'Number': '7'}]], [['BranchRef', {'Number': '4', 'Out': '0'}], ['StepRef', {'Number': '3'}]], [['BranchRef', {'Number': '11', 'Out': '0'}], ['TransitionRef', {'Number': '3'}]], [['BranchRef', {'Number': '11', 'Out': '1'}], ['TransitionRef', {'Number': '5'}]], [['BranchRef', {'Number': '12', 'Out': '0'}], ['TransitionRef', {'Number': '6'}]], [['BranchRef', {'Number': '12', 'Out': '1'}], ['TransitionRef', {'Number': '8'}]], [['BranchRef', {'Number': '13', 'Out': '0'}], ['TransitionRef', {'Number': '4'}]], [['BranchRef', {'Number': '13', 'Out': '1'}], ['TransitionRef', {'Number': '9'}]], [['BranchRef', {'Number': '14', 'Out': '0'}], ['TransitionRef', {'Number': '2'}]], [['BranchRef', {'Number': '14', 'Out': '1'}], ['TransitionRef', {'Number': '10'}]]]
TRANSITIONS
con_trans = [[['TransitionRef', {'Number': '2'}], ['BranchRef', {'Number': '4', 'In': '0'}]], [['TransitionRef', {'Number': '7'}], ['BranchRef', {'Number': '4', 'In': '1'}]], [['TransitionRef', {'Number': '3'}], ['StepRef', {'Number': '4'}]], [['TransitionRef', {'Number': '5'}], ['StepRef', {'Number': '5'}]], [['TransitionRef', {'Number': '1'}], ['StepRef', {'Number': '2'}]], [['TransitionRef', {'Number': '8'}], ['StepRef', {'Number': '2'}]], [['TransitionRef', {'Number': '6'}], ['StepRef', {'Number': '1'}]], [['TransitionRef', {'Number': '9'}], ['StepRef', {'Number': '2'}]], [['TransitionRef', {'Number': '4'}], ['StepRef', {'Number': '1'}]], [['TransitionRef', {'Number': '10'}], ['StepRef', {'Number': '1'}]]]
Цель:
Выберите начальный шаг и найдите все возможные пути и создайте упорядоченный список элементов этого пути. Иметь возможность проходить все этапы и получить массив, содержащий все соединения.
Моя попытка:
S1 = []
for i in con_steps:
if i[0][1]['Number'] == '1':
print(i)
#save branch then cont.
bran1 = i[1][1]['Number']
tran1 = []
for j in con_brans:
if j[0][1]['Number'] == bran1:
print(j)
tran1.append(j[1][1]['Number'])
for k in tran1:
bran2 = []
for m in con_trans:
if m[0][1]['Number'] == k:
print(m)
if m[1][0] == 'StepRef':
print('last step', m)
S1.append(['1', m[1][1]['Number']])
else:
bran2.append(j[1][1]['Number'])
print('continue on', m)