Как перебрать модуль? - PullRequest
       31

Как перебрать модуль?

0 голосов
/ 12 сентября 2018

новичок здесь.Я пытался найти наименьшее общее число, кратное числам 1–10. Пока что мой код

def smallest_multiple():
a = 0
while True:
    a += 1
    if a%1 == 0 and a%2 == 0 and a%3 == 0 and a%4 == 0 and a%5 == 0 and a%6 == 0 and a%7 == 0 and a%8 == 0 and a%9 == 0 and a%10 == 0:
        return a

print(smallest_multiple())

Мой результат - 2520, что кажется правильным.Это наименьшее число, которое делится на числа от 1 до 10 без остатка.Но есть ли способ сделать 5-ю строку короче (не так много модулей), перебирая их?Я пробовал что-то вроде этого

def smallest_multiple():
a = 0
while True:
    a += 1
    for i in range(1, 11):
        if a % i == 0:
            return a

print(smallest_multiple())

Но это возвращает только 1, а не 2520. Есть ли способ сделать

if a%1 == 0 and a%2 == 0 and a%3 == 0 and a%4 == 0 and a%5 == 0 and a%6 == 0 and a%7 == 0 and a%8 == 0 and a%9 == 0 and a%10 == 0:

короче?

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Вы можете использовать все :

def smallest_multiple():
    factors = [i for i in range(1, 11)]
    a = 0
    while True:
        a += 1
        if all([a % factor == 0 for factor in factors]):
            return a


print(smallest_multiple())

Выход

2520

ОБНОВЛЕНИЕ

По предложению @PatrickHaugh вы можете избежать создания списков:

def smallest_multiple():
    factors = range(1, 11)
    a = 0
    while True:
        a += 1
        if all(a % factor == 0 for factor in factors):
            return a


print(smallest_multiple())

Вывод

2520
0 голосов
/ 12 сентября 2018

Говоря об однострочниках ^^

Не цикл бесконечности, хотя

import sys
next(i for i in xrange(1, sys.maxsize) if len([j for j in range(1,10) if i % j == 0]) == 9)
#=> 2520

И это не самое эффективное решение.

0 голосов
/ 12 сентября 2018

Вы можете изменить его на

if all([a%i == 0 for i in range(1,11)]):

Все берет список и возвращает Истину, если все в списке - Истина

При этом используется простое понимание списка, чтобы пройти через номера с 1 по 10и проверьте, все ли они истинны с a%i == 0

...