Как вычисляется количество целых чисел от начала до - PullRequest
1 голос
/ 27 марта 2020

Напишите функцию div_3_5 (начало, конец), которая вычисляет количество целых чисел от начала до, но не включая конец, которые делятся на 3 или 5, используя некоторое время l oop.

ПРИМЕЧАНИЕ: Я должен использовать некоторое время l oop внутри функции для этого упражнения (я понимаю, что a для l oop лучше).

Примеры: div_3_5 (7, 27) оценивается как 9 (числа, делимые на 3 или 5 в этом диапазоне: 9,10,12,15,18,20,21,24,25)

Я действительно не понимаю, почему или что я делаю, и может кто-то объяснить, где я ошибся Пока это мой код:

count = 0
def div_3_5(start, end):
    while start < end:
        if start%3 == 0 or start%5 == 0:
            count + 1
        start = start + 1
            start + 1
    return count

Это, очевидно, не полная или правильная ошибка, и текущая ошибка, которую я получаю:

Ожидаемый результат:

div_3_5 (7, 27) -> 9

Результат теста: 0! = 9

Ответы [ 4 ]

0 голосов
/ 27 марта 2020

Вам не нужны циклы для выполнения sh этой задачи, вот простой и забавный математический метод, который Python позволяет нам легко реализовать: - Во-первых, создать набор от 0 до конца с шагами по 3 с, то есть {0,3,6, ... end} это даст вам все элементы, которые делятся на 3 в пределах границы вашего конца (при этом конец не включен), в Python это делается следующим образом: set_of_3=set(range(0,b,3)) просто, а? - Два, сделайте то же самое, но для 5, set_of_5=set(range(0,b,5)) - Три, сложите эти множества вместе: set_of_all=set_of_3.union(set_of_5) Теперь у вас есть все элементы, делимые на 3 и 5 от 0 до конца, но вы этого не хотите, вы просто от начала до конца просто удалите все числа от 0 до начала из set_of_all, путем: result = set_of_all - set(range(0,a)) и просто верните len() этого результата. Ваш полный код:

def div_3_5(start,end):
    set_of_3 = set(range(0,end,3))
    set_of_5 = set(range(0,end,5))
    set_of_all = set_of_3.union(set_of_5)
    result = set_of_all - set(range(0,start))
    return len(result)

Немного запутанно, я знаю, но весело! По крайней мере для меня. Надеюсь, это поможет.

РЕДАКТИРОВАНИЕ

Да, я не заметил, что вы сказали, что должны использовать while l oop, вы можете сделать эту версию своего кода :

def div_3_5(start,end):
    list = []
    while start<end:
        if start%3==0 or start%5==0:
            list.append(start)
        start+=1
    return len(list)

Используйте силу Python и забудьте об этих C -i sh методах, и, что не так с вашим кодом, строка: count + 1 не работает в Python, вы должны сделать это: count+=1

0 голосов
/ 27 марта 2020

Python имеет оператор модуля (%), который возвращает остаток от A / B (10% 4 == 2).

В вашем случае вы будете искать числа с остатком 0 при делении на 3 или 5

(т. е. x% 3 == 0 ИЛИ x% 5 == 0).

Наконец, последний элиф, где вы спрашиваете elif start >= end, не нужен потому что вы заявили, что в качестве условия при создании l oop. Вместо этого попробуйте заменить эти 2 строки на start = start + 1

0 голосов
/ 27 марта 2020

Я нашел ответ:

def div_3_5(start, end):
count = 0
while start < end:
    if start % 3 == int() or start % 5 == int():
        count += 1
    start = start + 1
return count
0 голосов
/ 27 марта 2020

Здесь есть несколько советов, которые могут помочь.

  1. Операция мода% вернет остаток объекта, так что число делится на другое, мод будет равен 0, для пример 6% 3 == 0 возвращает true.

  2. A, в то время как l oop не является лучшим для этой операции, лучше было бы для l oop

for i in range(start, end+1):

Это исправит бесконечность l oop.

Вот как я бы это написал:


def div_3_5(start, end):
    count = 0
    for i in range(start, end + 1):
        if i % 3 == 0 or i % 5 == 0:
            count += 1
    return count

start = 1
end = 10

count = div_3_5(start, end)
print(count)
...