Determina se um número é perfeito, abundante ou deficiente, com base no esquema de classificação de Nicómaco (60 - 120 d.C.) para números inteiros positivos.
O matemático grego Nicómaco concebeu um esquema de classificação para os números inteiros positivos, identificando cada um como pertencendo de forma única às categorias de perfeito, abundante ou deficiente, com base na sua soma dos divisores próprios.
A soma dos divisores próprios é definida como a soma dos fatores de um número, sem incluir o próprio número.
Por exemplo, a soma dos divisores próprios de 15 é 1 + 3 + 5 = 9.
Um número é perfeito quando é igual à sua soma dos divisores próprios. Por exemplo:
6 é um número perfeito porque 1 + 2 + 3 = 6
28 é um número perfeito porque 1 + 2 + 4 + 7 + 14 = 28
Um número é abundante quando é menor do que a sua soma dos divisores próprios. Por exemplo:
12 é um número abundante porque 1 + 2 + 3 + 4 + 6 = 16
24 é um número abundante porque 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36
Um número é deficiente quando é maior do que a sua soma dos divisores próprios. Por exemplo:
8 é um número deficiente porque 1 + 2 + 4 = 7
Implementa uma forma de determinar se um determinado número é perfeito. Dependendo da linguagem que estás a aprender, podes também ter de implementar uma forma de determinar se um determinado número é abundante ou deficiente.
Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro esclarecedora para indicar qual é a origem do erro. Isto torna o teu código mais legível e ajuda bastante na depuração. Em situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem esclarecedora.
Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError se à função classify() for passado um número que não seja um inteiro positivo. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.
Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo de exception:
# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.