2015-08-01 6 views
-4

Вопрос Запишите функцию mssl() (минимальный суточный список), которая принимает в качестве входных данных список целых чисел. Затем он вычисляет и возвращает сумму максимального списка подписок списка входных данных. Подкатегория максимальной суммы представляет собой суб-список (срез) списка ввода, сумма записей которого наибольшая. Пустому под-списку определяется как сумма 0. Например, подсчет максимальной суммы списка [4, -2, -8, 5, -2, 7, 7, 2, -6, 5] равен [5, -2, 7, 7, 2] и сумма его записей равна 19. l = [4, -2, -8, 5, -2, 7, 7, 2, -6, 5] MSSL (л) MSSL ([3,4,5]) MSSL ([- 2, -3, -5]) В последнем примере, максимальная сумма суб-список является пустым потому что все элементы списка: отрицательный. ЭТО МОЕ РЕШЕНИЕГде я ошибаюсь?

def mssl(lst): 
    pos,neg,TotalList=[],[],[] 
    for items in range(len(lst)): 
     if(lst[items]>0): 
      pos+=[lst[items]] 
     else: 
      neg+=[lst[items]] 
    TotalPos=sum(pos) 
    TotalNeg=sum(neg) 

    if(len(neg)>0): 
     for negatives in range(len(neg)): 
     TotalList=[TotalPos+neg[negatives]] 
     if(TotalList>TotalList[negatives-1]): 
       print(TotalList) 
    else: 
     TotalList=TotalPos 
    print(TotalList) 

ЭТО НЕ ДОМАШНИЙ ВОПРОСОМ Я уча РуШоп F, пожалуйста, дайте мне знать, где я НЕПРАВИЛЬНО

+4

Самонаправленное исследование часто считается домашним заданием. - по-прежнему кажется, что это домашнее задание и провозглашение, что это не совсем убедительно. –

+0

Ну, не верьте, если вы этого не хотите! Разве вы не видите решение, данное мной? Я не прошу разрешения, я спрашиваю, что не так с моим кодом! – ghost007255

+0

@ ghost007255 Тогда вы можете сообщить нам, какие ошибки или неправильные результаты вы получаете? – deezy

ответ

0

Похоже, вы пытаетесь узнать программирование с использованием python в качестве вашего первого языка. Эта конкретная проблема несколько сложна для начала. Сначала я бы посоветовал вам принять прямолинейный подход с грубой силой. Оцените суммы всех подпоследовательностей один за другим и проследите за тем, что является наибольшим. Когда у вас есть функция, которая даст правильный ответ, вы можете искать лучшее (более быстрое, более элегантное, любое) решение.

Что касается вашего кода, это действительно не имеет никакого отношения к вопросу. Например, TotalList всегда является одноэлементным списком. Выражение TotalList[negatives-1] не имеет большого смысла; если в списке есть только один элемент, вы можете получить к нему доступ как TotalList[0]. Выражение TotalList>TotalList[negatives-1] не имеет никакого смысла; вы не хотите сравнивать список с числом.

Это хорошо известная проблема, и простое, быстрое решение совсем не легко придумать, поэтому не унывайте, если вы его не найдете. Как только вы получите прямое решение, вы можете подумать об элегантном. Эта проблема может быть решена в одной строке python, используя списки. Попытка сделать это приведет к улучшению вашего стиля python. Например, вместо написания

for items in range(len(lst)): 
     if(lst[items]>0): 
      pos+=[lst[items]] 
     else: 
      neg+=[lst[items]] 

вы можете и должны написать

pos = [x for x in lst if x > 0] 
neg = [x for x in lst if x < 0] 

хорошее обучение удачи питона.

+0

Большое спасибо :-) – ghost007255