Проблема от CodeWars Возвращает 5 вместо 23. Может ли кто-нибудь помочь мне понять мой код? - PullRequest
0 голосов
/ 06 августа 2020

Проблема :

Если мы перечислим все натуральные числа ниже 10 , которые кратны 3 или 5, мы получим 3, 5, 6 и 9. сумма этих кратных чисел равна 23.

Fini sh решение, так что оно return является суммой всех кратных 3 или 5 ниже переданного числа.

Примечание : если число кратно 3 и 5, сосчитайте его только один раз.

Код :

def solution(number): 
    return sum( (i%3==0 or i%5==0) for i in range (number))

solution(10)

Ответы [ 3 ]

1 голос
/ 06 августа 2020

Задача просит вас суммировать числа, кратные 3 или 5, но здесь вы суммируете результат (i%3==0 or i%5==0), который является логическим (которое в Python равно целым числам 0 и 1 ).

Это означает, что вы просто подсчитываете количество, кратное 3 и 5, а не суммируете их. Это можно тривиально проверить, просто запустив функцию локально в оболочке Python: вы получите 5 (потому что range начинается с 0 включительно, поэтому, хотя 0 не имеет значения для суммы, он имеет значение для подсчета).

Компонент генератора - «значение, возвращенное [для] значения [в] условии производителя [если]». В качестве условия в конце вашего теста должно быть go.

0 голосов
/ 06 августа 2020

В основном вы суммируете логические значения, поэтому ваш ответ неверен, попробуйте следующий код

Код:

def solution(number): 
    return sum( i for i in range (number) if (i%3==0 or i%5==0))

solution(10)
0 голосов
/ 06 августа 2020

На каждой итерации l oop вы оцениваете условие

(i%3==0 or i%5==0)

, которое истинно ровно пять раз, когда number равно 10. Каждое True считается как 1, следовательно, вы получаете за сумму 5.

Чтобы получить правильный ответ, вам нужно изменить порядок выражения, чтобы вы оценивали i всякий раз, когда ваше условие истинно. Для получения дополнительной информации см. понимание списка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...