Introducción
Hoy veremos cómo implementar un algoritmo para saber si un entero es narcisista usando el lenguaje de programación Python.
Si no sabes cómo funciona este algoritmo o qué cosa es un número narcisista, te recomiendo leer esto.
Por cierto, recuerda que debes tener instalado el intérprete de Python. Si no sabes cómo, mira cómo instalar Python 3 y ponerlo en la PATH.
Función para comprobar si un número es narcisista
Definimos la siguiente función aquí y más abajo la explico:
def es_narcisista(numero):
numero_como_cadena = str(numero)
longitud_de_numero = len(numero_como_cadena)
suma = 0
for letra in numero_como_cadena:
# Convertir carácter a entero
cifra_actual = int(letra)
# Elevar ese carácter a la potencia dada por la longitud del número
elevado = pow(cifra_actual, longitud_de_numero)
# El resultado lo añadimos a suma
suma = suma + elevado
# Comprobar si la suma al elevar es igual al número que recibimos
if numero == suma:
return True
else:
return False
Aunque Python es de tipado fuerte, nos permite convertir variables de manera fácil. Para ello usamos int
y str
. Más tarde para elevar un número usamos pow
.
Así de fácil es hacer esa función. Veamos cómo podemos implementarla
Implementación de la función
La función mencionada anteriormente recibe un entero y regresará True o False. Aquí un ejemplo de cómo podemos invocarla:
"""
Determinar si un número es narcisista usando Python
parzibyte.me/blog
"""
def es_narcisista(numero):
numero_como_cadena = str(numero)
longitud_de_numero = len(numero_como_cadena)
suma = 0
for letra in numero_como_cadena:
# Convertir carácter a entero
cifra_actual = int(letra)
# Elevar ese carácter a la potencia dada por la longitud del número
elevado = pow(cifra_actual, longitud_de_numero)
# El resultado lo añadimos a suma
suma = suma + elevado
# Comprobar si la suma al elevar es igual al número que recibimos
if numero == suma:
return True
else:
return False
# Hora de probar
numeros = [1, 2, 3, 4, 153, 28, 11, 96, 407, 1634, 54748]
for numero in numeros:
print("¿{} es narcisista? {}".format(numero, es_narcisista(numero)))
Lo que hacemos es probar un arreglo de enteros y llamar a la función por cada uno de ellos.
En mi caso la salida se ve así:
Pingback: Solución a algoritmo para determinar número narcisista en muchos lenguajes - Parzibyte's blog