Questão 14: Crie uma função e_palindromo (n) que retorne True se n for um palíndromo (lido da mesma forma de trás para frente) e False caso contrário.
Exemplo: e_palindromo (121) → True. e_palindromo (123) → False.
Passo 1
O enunciado pede que eu crie uma função
que retorne
se o número
for um palíndromo (lido da mesma forma da esquerda para a direita e da direita para a esquerda) e
caso contrário. Exemplos dados:
e
.
Informações relevantes fornecidas: o argumento é um número (interpreto como um inteiro) e a saída deve ser um booleano indicando se é palíndromo ou não.
Informações relevantes fornecidas: o argumento é um número
Passo 2
O que significa ser palíndromo (explicação básica): um número é palíndromo se sua sequência de dígitos for igual quando lida de trás para frente. Ex.:
tem dígitos
que lidos ao contrário continuam
. Já
lido ao contrário vira
, diferente.
Passo 3
Opções de método (breve comparação):
- Converter
em string e comparar a string com a sua reversa. Este método é simples, direto e usa operações básicas de strings. - Fazer a reversão digit-a-digit com operações aritméticas (usar resto e divisão inteira) — método “numérico”. Funciona sem converter para string, mas exige manipulação de dígitos manualmente.
Vou escolher o método da string porque é o mais direto e menos sujeito a erros na hora da prova; é baseado em coisas básicas (converter para string e aplicar slicing), fáceis de escrever e entender sem calculadora.
Passo 4
Explicando passo a passo a ideia usando strings (a “aula” prática):
- Converter o número
para a representação em texto: isso é . Aqui é uma string contendo todos os caracteres do número, por exemplo, para temos . - Tratar o caso de números negativos: se
for negativo, a string começa com o caractere , e normalmente não consideramos como palíndromo (porque o sinal muda a leitura). Então, se começa com , retornamos . - Reverter a string
. Em Python existe uma forma curta de fazer isso com slicing: . Vou explicar o slicing: - Em uma expressão
, é o índice inicial, é o índice final (não incluso) e é o passo. - Quando usamos
, estamos pedindo para percorrer a string do fim para o início com passo , ou seja, geramos a string invertida. - Exemplo: se
, então .
- Em uma expressão
- Comparar
com . Se iguais, é palíndromo; caso contrário, não é. - Retornar o resultado da comparação como booleano (
ou ).
Passo 5
Detalhando com pseudo-passo a passo que você pode escrever na prova:
- Recebo
. - Faço
. - Se
começa com , retorno . - Se
, retorno , senão retorno .
Comentário sobre complexidade: esse método gasta tempo proporcional ao número de dígitos (ou seja,
, onde
é a quantidade de dígitos), e memória adicional para a string invertida também proporcional a
. Para a prova isso é suficiente e rápido.
Passo 6
Vou mostrar também, por completude, a ideia do método numérico (caso você prefira não usar strings):
- Se
, não é palíndromo. - Guardar
(cópia do número). - Construir
. Enquanto , pegar o último dígito com , atualizar , e reduzir (divisão inteira). No fim, comparar se .
Esse método exige entender resto e divisão inteira, mas dá o mesmo resultado. É um pouco mais trabalhoso de escrever à mão, por isso na prova prefira a versão por strings se permitido.
Passo 7
Implementação final (explicada linha a linha):
- Linha 1: definimos a função com o nome pedido
. - Linha 2: convertemos para string com
. - Linha 3: checamos se tem sinal negativo; se tiver, retornamos
. - Linha 4: comparamos
com e retornamos o resultado dessa comparação.
Também vou mostrar uns testes rápidos (você pode executar na sua cabeça ou num interpretador Python):
-
→ . -
→ . -
→ (decisão: sinais tornam negativo não-palíndromo). -
→ (um dígito é sempre palíndromo).
Resposta
def e_palindromo(n):
s = str(n)
if s.startswith(’-’):
return False
return s == s[::-1]
s = str(n)
if s.startswith(’-’):
return False
return s == s[::-1]