2015-04-26 3 views
0

Я все еще изучаю python, и мне все еще трудно работать с объектами, я пытаюсь написать программу, которая вычисляет критический путь набор действий в проекте, я смог получить критический путь к действиям, и они хранятся в виде списка вложенных объектов с каждым объектом, имеющим разные свойства, такие как id, предшественник и продолжительность, проблема i ' м, имеющий, чтобы распечатать результат правильно, я хочу, чтобы распечатать путь, который имеет самую длинную продолжительность и сам путь, который дает это значениеКак напечатать вложенный список объектов с наибольшей суммой в python

class criticalPath: 

    def __init__(self): 
     ''' 
     Initialize all the variables we're going to use to calculate the critical path 
     ''' 
     self.id = None 
     self.pred = tuple() 
     self.dur = None 
     self.est = None 
     self.lst = None 
     #list to store all the objects 
     self.all_objects = list() 

    def set_properties(self, name, predecessor, duration): 
     self.id = name 
     self.pred = tuple(predecessor) 
     self.dur = duration 


def main(): 
    #starting_nodes = list() 
    object_list = list() 

    A = criticalPath() 
    A.set_properties('A', '0', 3) 

    B = criticalPath() 
    B.set_properties('B', '0', 6) 

    C = criticalPath() 
    C.set_properties('C', 'A', 1) 

    D = criticalPath() 
    D.set_properties('D', 'B', 4) 



    tmp_list = list() 
    tmp_list.append(A) 
    tmp_list.append(C) 
    object_list.append(tmp_list) 

    tmp_list = list() 
    tmp_list.append(B) 
    tmp_list.append(D) 
    object_list.append(tmp_list) 


    print('The total duration of the project is {}'.format(max([sum([node.dur for node in object]) for object in object_list]))) 
    #print(max(object_list.id, key=sum(object_list.dur))) 


if __name__ == '__main__': main() 

Я был в состоянии напечатать общую продолжительность которой в этот случай равен 10, последняя строка, которую я прокомментировал моя последняя попытка сравнить идентификатор объектов в объектных_листах на основе их индивидуальной продолжительности, которая является свойством «id» и «dur» для каждого объекта, поэтому в основном я хочу получить такой вывод

Критический путь проект B ==> D, а общая продолжительность проекта составляет 10

ответ

0
class criticalPath: 

    def __init__(self): 
     ''' 
     Initialize all the variables we're going to use to calculate the critical path 
     ''' 
     self.id = None 
     self.pred = tuple() 
     self.dur = None 
     self.est = None 
     self.lst = None 
     #list to store all the objects 
     self.all_objects = list() 

    def set_properties(self, name, predecessor, duration): 
     self.id = name 
     self.pred = tuple(predecessor) 
     self.dur = duration 


def main(): 
    #starting_nodes = list() 
    object_list = list() 

    A = criticalPath() 
    A.set_properties('A', '0', 3) 

    B = criticalPath() 
    B.set_properties('B', '0', 6) 

    C = criticalPath() 
    C.set_properties('C', 'A', 1) 

    D = criticalPath() 
    D.set_properties('D', 'B', 4) 

    tmp_list = list() 
    tmp_list.append(A) 
    tmp_list.append(C) 
    object_list.append(tmp_list) 

    tmp_list = list() 
    tmp_list.append(B) 
    tmp_list.append(D) 
    object_list.append(tmp_list) 

    print(object_list) 

    print('The total duration of the project is {}'.format(max([sum([node.dur for node in object]) for object in object_list]))) 
    print([path.id for path in max(object_list, key=lambda ls: sum(obj.dur for obj in ls))]) 


if __name__ == '__main__': main() 
Смежные вопросы