Perfect Number Lister - PullRequest
       2

Perfect Number Lister

1 голос
/ 12 октября 2019

Я пытаюсь получить программу, которая перечисляет идеальные числа в определенном диапазоне.

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a minimum value: '))
thesum = 0

perfectnums = []

for val in range(minr, maxr + 1):
    for n in range(1, val):
        if val % n == 0:
            thesum += n
            if thesum == val:
                perfectnums.append(val)

print(perfectnums)

Я ожидаю, что 6 выскочит, когда я установлю минимальное значение в 1 и максимальное значение в 10

Ответы [ 6 ]

1 голос
/ 12 октября 2019

Для каждого val вы должны поставить thesum = 0

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a minimum value: '))
thesum = 0

perfectnums = []

for val in range(minr, maxr + 1):

    # here
    thesum = 0

    for n in range(1, val):
        if val % n == 0:
            thesum += n
            if thesum == val:
                perfectnums.append(val)

print(perfectnums)
0 голосов
/ 12 октября 2019

Вы забыли сбросить thesum обратно на 0:

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a maximum value: '))
thesum = 0

perfectnums = []

for val in range(minv, maxv + 1):
    for n in range(1, val):
        if val % n == 0:
            thesum += n
    if thesum == val:
        perfectnums.append(val)
    thesum = 0
0 голосов
/ 12 октября 2019

Собираем слова ГариО и Алекса и фиксируем текст в вопросах:

minv= int(input('Give me a minimum value: '))
maxv= int(input('Give me a maximum value: '))

perfectnums = []

for val in range(minv, maxv + 1):
    thesum = 0
    for n in range(1, val):
        if val % n == 0:
            thesum += n
            if thesum == val:
                perfectnums.append(val)

print(perfectnums)
0 голосов
/ 12 октября 2019

В первом для цикла необходимо сбросить переменную thesum. Вот рабочий код:

minv= int(input('Give me a minimum value: '))

maxv= int(input('Give me a minimum value: '))

perfectnums = []

for val in range(minv, maxv + 1): # right variables minv and maxv
    thesum = 0 # declare the variable here

    for n in range(1, val):

        if val % n == 0:

            thesum += n

            if thesum == val:

                perfectnums.append(val)


print(perfectnums)

Теперь, для minv = 1 и maxv = 10, вы получите [6] в результате!

0 голосов
/ 12 октября 2019

Вы никогда не сбросите thesum на 0. Следовательно, он переносится между числами.

0 голосов
/ 12 октября 2019

Попробуйте сбросить thesum внутри цикла for val .... В противном случае он просто растет. (Также я предполагаю, что ваши minv против minr и maxv против maxr - просто опечатка. Убедитесь, что они одинаковы.)

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