Syntax Error в лямбда функции

256 просмотра
0
0 Комментариев

Задача программы: возвратить сумму всех чисел до 1000, кратных 5 или 3.

def multi(max_num = 1000):
    for n in range(max_num): lambda n: k_num.append(n) if n % 5 == 0 or n % 3 == 0
    return sum(k_num)

Происходит ошибка:

    for n in range(max_num): lambda n: k_num.append(n) if n % 5 == 0 or n % 3 == 0
                                                                                 ^
SyntaxError: invalid syntax

Почему? Прошу вашей помощи.


Добавить комментарий

2 Answers

Python Опубликовано 14.12.2018
0

Где у вас определена переменная k_num?
Зачем в решении lambda?

Решайте с помощью list comprehension или определяйте список k_num до цикла for, в цикле проверяйте на кратность и если True, то добавляйте к списку n.

P.S.: Не пытайтесь все на одну строку запихнуть, вы себе только понимание программы усложняете.

Добавить комментарий
0

Во-первых, почему < SyntaxError > ? Ведь интерпретатор допускает в отдельных случаях написание составных инструкций в одной физической строке. Конечно, код не рабочий, но интерпретатору это и не важно — он обнаружил формальное нарушение: не закончена конструкция выражения < (…) if (…) else (…) >.

Во-вторых, сама задача скорее «на формулу», а не на полный перебор — представим, что max_num будет 10^18, и сколько лет придётся ожидать ответа?
Между тем, применяя принцип «включения-исключения», получим быстрый ответ — надо к сумме чисел, кратных 3, прибавить сумму чисел, кратных 5, и затем вычесть сумму чисел, кратных 15 (так как они посчитаются дважды).
Вот примерный код:

def multi(max_num):
    max_num -= 1   ## само число max_num не считаем - так ведь?
    n3 = max_num // 3
    n5 = max_num // 5
    n15 = max_num // 15
    return 3*(n3*(n3+1)//2) + 5*(n5*(n5+1)//2) - 15*(n15*(n15+1)//2)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up