Предоставление списка чисел Харшада с использованием скрипта Python - PullRequest
0 голосов
/ 14 сентября 2018

После того, как я посмотрю на SO на наличие вопросов similair и не найду их, я сделаю попытку, задав их здесь. Я постараюсь быть максимально конкретным. Используя Python, я пытаюсь создать фрагмент кода, который проходит через все возможные числа Харшада и возвращает [i] количество чисел Харшада в списке. Для этого я сначала создал метод isHarshad, который выясняет, является ли число в списке числом Harshad. После этого я реализую этот метод для печати только чисел Hardshad в списке.

def isHarshad(i):
    l = list(str(i))
    a = sum([int(e) for e in l])
    if a == 0:
        return False
    if i % a == 0:
        return True
    else:
        return False

def ithHarshad(i):
    a = []
    count = 0
    top = 999999999
    for x in (range (1,top)):
        if isHarshad(x):
            a = a + [x]
            count += 1
            if count == i:
                print(a)
ithHarshad(25)

Запуск этого кода возвращает первые 25 чисел Харшада, что я и хочу. Теперь мой вопрос: возможно ли сформировать цикл, в котором он проверяет диапазон чисел Харшада, не создавая «верхнюю» переменную, как показано в моем коде? Чувство беспорядка зацикливается на произвольном числе, например 999999.

Я надеюсь, что мой вопрос немного ясен, и заранее спасибо за любой вклад!

Ответы [ 3 ]

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

Я не совсем уверен, что вы подразумеваете под "проверкой диапазона". Вы имели в виду, что хотите показать все числа Хардшада от start до end? Это правда, вы можете сделать это:

def isHarshad(i):
    l = list(str(i))
    a = sum([int(e) for e in l])
    if a == 0:
        return False
    if i % a == 0:
        return True
    else:
        return False

def ithHarshad(start, end):
    a = []
    count = 0
    for x in (range (start,end)):
        if isHarshad(x):
            a = a + [x]
    print(a)

ithHarshad(50,100)
0 голосов
/ 14 сентября 2018

Спасибо за отзыв, используя некоторое время True: работал для меня.Вот мое решение:

def isHarshad(i):
    l = list(str(i))
    a = sum([int(e) for e in l])
    if a == 0:
        return False
    if i % a == 0:
        return True
    else:
        return False

def ithHarshad(i):
    a = []
    count = 0
    x=1
    while True:
        if isHarshad(x):
            a = a + [x]
            count += 1
            x+=1
            if count == i:
                print(a)
        else:
            x+=1
ithHarshad(25)
0 голосов
/ 14 сентября 2018

Попробуйте заменить его на while True: И разорвать цикл, когда будет создано достаточно чисел. В вашем коде вы просматриваете все возможные числа, что крайне неэффективно.

def isHarshad(i):
    l = list(str(i))
    a = sum([int(e) for e in l])
    if a == 0:
        return False
    if i % a == 0:
        return True
    else:
        return False

def ithHarshad(i):
    a = []
    count = 0
    x = 0
    while True:
        x += 1
        if isHarshad(x):
            a = a + [x]
            count += 1

        if count == i: # Breaks when enough numbers are generated.
            break
    print(a)

ithHarshad(25)

Это будет добавлять 1 к x до тех пор, пока ваш счет не завершится.

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