Deteta produtos palíndromos num determinado intervalo.
Um número palíndromo é um número que continua igual quando se invertem os seus algarismos. Por exemplo, 121 é um número palíndromo, mas 112 não é.
Dado um intervalo de números, encontra o maior e o menor palíndromos que sejam produtos de dois números dentro desse intervalo.
A tua solução deve devolver o maior e o menor palíndromos, juntamente com os fatores de cada um dentro do intervalo. Se o maior ou o menor palíndromo tiver mais do que um par de fatores dentro do intervalo, devolve todos os pares.
Dado o intervalo [1, 9] (ambos inclusive)...
E dada a lista de todos os produtos possíveis dentro deste intervalo:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 21, 24, 27, 20, 28, 32, 36, 25, 30, 35, 40, 45, 42, 48, 54, 49, 56, 63, 64, 72, 81]
Os produtos palíndromos são todos números de um só algarismo (neste caso):
[1, 2, 3, 4, 5, 6, 7, 8, 9]
O menor produto palíndromo é 1.
Os seus fatores são (1, 1).
O maior produto palíndromo é 9.
Os seus fatores são (1, 9) e (3, 3).
Dado o intervalo [10, 99] (ambos inclusive)...
O menor produto palíndromo é 121.
Os seus fatores são (11, 11).
O maior produto palíndromo é 9009.
Os seus fatores são (91, 99).
smallest e largest:Ambas as funções têm de receber dois argumentos nomeados:
max_factor: intmin_factor: int, por omissão 0O valor devolvido por ambas tem de ser um tuple -- (value, factors), em que value é o próprio palíndromo e factors é um iterable que contém os dois fatores do palíndromo, por ordem arbitrária.
Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro significativa que indique qual é a origem do erro. Isto torna o teu código mais legível e ajuda imenso a depurar. Nas situações em que sabes que a origem do erro é de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem significativa.
Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError quando a função largest() ou smallest() recebe um par de fatores que não estão no intervalo correto. Os testes só passam se tanto fizeres raise da exception como incluíres uma mensagem com ela.
Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo exception:
# if the max_factor is less than the min_factor
raise ValueError("min must be <= max")
Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.