2013-11-09 3 views
0

Мне нужно написать функцию, которая суммирует последовательные цифры в числе и возвращает наибольшую сумму из них. Я написал функцию, которая получает аргументы (m, t). m - обозначает число (int), а t (int также) обозначает количество последовательных цифр для суммирования. теперь я хочу, чтобы он прошел через все цифры в числе и в конце, чтобы вернуть мне максимум. я не понять, почему мой код не работает:максимальная сумма последовательных цифр в числе

def sum_digits(m, t): 
    str_m= str(m) 

    for i in range(len(str_m)): 
     if t+i<len(str_m): 
      num= str_n[i:t+i] 
      num1='+'.join(num) 
      num2= str(eval(num1)) 
      lst= list(num2) 
     else: 
      break 


return max (lst) 

ответ

0

Причина твоя не работает, что lst получает сброс каждой итерации. Я думаю, вы намеревались установить его в начале и добавить к нему каждую итерацию. Также:

Ahhhh !!!! Вам не нужно eval!

def max_sum(m, t): 
    digits = map(int, str(m)) 
    max_sum = cur_sum = sum(digits[:t]) 
    for i, x in enumerate(s[t:], t): 
     cur_sum += x - digits[i - t] 
     max_sum = max(max_sum, cur_sum) 
    return max_sum 

Кроме того, это имеет O (Log м) время работы (или O (п), если п число цифр в м), а не наивный O (т * лог м) (или O (t * n)).

+0

то будет правильно, но, как я установить пустой список в НАЧАЛЕ, когда я хотел добавить он дал мне ошибку – user2751595

0
>>> def maxSum(m, t): 
... m = str(m) 
... answer = 0 
... for digits in (m[i:i+t] for i in range(len(m)-t+1)): 
...  answer = max(answer, sum(int(d) for d in digits)) 
... return answer 
... 
>>> maxSum(1234567, 3) 
18 
+0

спасибо, но я хотел бы знать, если вы можете объяснить мне, Что проблема с моим? – user2751595

+0

@ user2751595: Я согласен с PaulDraper в том, что вы переустанавливаете 'lst' на каждой итерации, поэтому вы не получаете правильный ответ. Кроме того, вы используете переменную 'd', не определяя ее – inspectorG4dget

Смежные вопросы