On 2021-03-09 20:16, Victor Dib wrote:
Olá, comunidade do Python!

[snip]

def num_perf_inf(n):
     divisors = []
     perfects = []
     limit = n - 1
     for i in range(1, limit):
         dividend = i + 1
         for j in range(i):
             divisor = j + 1
             if dividend % divisor == 0:
                 divisors.append(divisor)
         print(f'Divisors of {i + 1}: {divisors}')

         divisors.pop()
         if sum(divisors) == dividend:
             perfects.append(i)
         divisors.clear()
     print(perfects)


num_perf_inf(28)

E o resultado da execução desse código, em Python 3.9.2 e em Python 3.8.7 (como 
já mencionado, testei as duas versões da linguagem:


Divisors of 2: [1]
Divisors of 3: [1]
Divisors of 4: [1, 2]
Divisors of 5: [1]
Divisors of 6: [1, 2, 3]
Divisors of 7: [1]
Divisors of 8: [1, 2, 4]
Divisors of 9: [1, 3]
Divisors of 10: [1, 2, 5]
Divisors of 11: [1]
Divisors of 12: [1, 2, 3, 4, 6]
Divisors of 13: [1]
Divisors of 14: [1, 2, 7]
Divisors of 15: [1, 3, 5]
Divisors of 16: [1, 2, 4, 8]
Divisors of 17: [1]
Divisors of 18: [1, 2, 3, 6, 9]
Divisors of 19: [1]
Divisors of 20: [1, 2, 4, 5, 10]
Divisors of 21: [1, 3, 7]
Divisors of 22: [1, 2, 11]
Divisors of 23: [1]
Divisors of 24: [1, 2, 3, 4, 6, 8, 12]
Divisors of 25: [1, 5]
Divisors of 26: [1, 2, 13]
Divisors of 27: [1, 3, 9]
[23]

You're omitting one of the factors by popping it from the list.

You're also appending 'i' to the list of perfect numbers instead of 'i + 1' (the dividend).
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to