Enviar um café pro programador

Números Perfeitos em Python

Neste tutorial de nosso Curso de Python Online, vamos aprender o que são os números perfeitos, como descobrir se um número é e vamos gerar todos os números perfeitos em uma determinada faixa de valores.

É um exercício resolvido de nossa lista de questões de funções.
Leia também:

Como Descobrir um Número Perfeito em Python


Vejamos o enunciado da questão:

Um número é dito perfeito quando ele é igual a soma de seus fatores. Por exemplo, os fatores de 6 são 1, 2 e 3 (ou seja, podemos dividir 6 por 1, por 2 e por 3) e 6=1+2+3, logo 6 é um número perfeito. Escreva uma função que recebe um inteiro e dizer se é perfeito ou não. Em outra função, peça um inteiro n e mostre todos os números perfeitos até n.

Ou seja, temos que fatorar o número para saber se ele é um número perfeito.
Para isso, vamos usar o operador % de resto da divisão.

Na função perfeito( n ), devemos pegar o argumento passado n e fazer o resto da divisão por 1, 2, 3, 4, ..., até n. Fazemos isso com a função range(1, n+1), que vai testar de 1 até n.

Se der 0 o resto da divisão, é porque esse valor é um divisor de n.
Vamos somar esse valor a uma variável chamada soma, que inicializamos com valor 0, no início da função perfeito().

No final, pegamos o valor contido em soma e comparamos com n.
Se forem iguais, retornamos True, pois é perfeito.
Se não forem iguais, não é um número perfeito e retornamos False.



Exibindo números perfeitos

Agora vamos para a função exibe(), que inicialmente pede um número inteiro ao usuário, n,

O que essa função vai fazer é jogar de 1 até n na função perfeito() e exibir os números que retornarem True, ou seja, que são perfeitos!

Fazemos isso com um simples laço for com range(1,n+1) e um IF dentro do laço, para testar o retorno da função perfeito().

Teste o código abaixo com os seguintes valores: 28, 496, e 8128. São perfeitos?



Código Python

def perfeito(n):
    soma=0
    for val in range(1,n):
        if n % val == 0:
            soma += val

    if soma==n:
        return True
    else:
        return False
        
def exibe():
    n = int(input('Exibir perfeitos até o número: '))
    
    for val in range(1,n+1):
        if(perfeito(val)):
            print(val)
    
while True:
    exibe()

4 comentários:

  1. 7. (Função com retorno sem parâmetro) Faça uma função/método retorne um vetor com os três primeiros números perfeitos. Sabe-se que um número é perfeito quando é igual a soma de seus divisores (exceto ele mesmo). Exemplo: os divisores de 6 são 1, 2 e 3, e 1 + 2 + 3 = 6, logo 6 é perfeito. gostaria de ajuda

    ResponderExcluir
  2. Tem como fazer algo assim sem o for? Só com o while por exemplo?

    ResponderExcluir
  3. def éperfeito(n):
    soma = 0
    for valor in range (n):
    soma += valor
    if soma == n:
    return True
    return False

    def perfectibilidade():
    n = int(input("Entre com um valor: "))
    if éperfeito(n) == True:
    print(n,"é perfeito :)")
    else:
    print(n,"não é perfeito :(")

    perfectibilidade()

    ResponderExcluir