É um exercício resolvido de nossa lista de questões de funções.
Leia também:
- Certificado do Curso de Python (para quem deseja trabalhar como programador)
- Conteúdo do Python Progressivo em PDF
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()
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
ResponderExcluirQual sua dúvida?
ExcluirTem como fazer algo assim sem o for? Só com o while por exemplo?
ResponderExcluirdef éperfeito(n):
ResponderExcluirsoma = 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()