python

Pangrama en Python

Hoy veremos cómo saber si una cadena u oración es un pangrama en Python.

Un pangrama es un texto que usa todas las letras posibles del alfabeto de un idioma.

Voy a explicar dos maneras de saber si una cadena es un pangrama usando Python; la primera forma recorre el alfabeto y comprueba si cada letra está dentro de la cadena, en caso de que todas las letras estén dentro de la cadena, se dice que sí es pangrama.

El segundo método utiliza conjuntos (tutorial aquí), comparando si todos los elementos del alfabeto están dentro del conjunto de la cadena.

Nota: este es un ejercicio de Codewars.

El alfabeto

Como hablamos español, vamos a añadirle la letra ñ al alfabeto que nos da string.ascii_lowercase; si no quieres que soporte el español, simplemente no agregues la ñ.

Por otro lado, vamos a convertir la cadena a minúscula para poder comparar bien con el alfabeto que ya estará en minúscula.

Pangrama en Python: recorriendo alfabeto

Este enfoque es sencillo. Recorremos todo el alfabeto letra por letra (o sea, primero la a, luego la b y así, sin importar el orden) y vamos comprobando que cada letra esté en la cadena que estamos probando.

Puse todo en una función llamada es_pangrama y queda como se ve a continuación:

def es_pangrama(cadena):
    import string
    cadena = cadena.lower()  # Convertir a minúscula
    alfabeto = string.ascii_lowercase + "ñ"  # Hablamos español, si no, quítale la ñ
    for letra in alfabeto:  #Recorrer el alfabeto
        if letra not in cadena:  # Si una letra del alfabeto no está, sabemos que no es pangrama
            return False
    # Si recorrimos todas las letras, terminamos el ciclo
    # y por lo tanto todas estuvieron, así que:
    return True


cadenas_para_probar = [
    "El cadáver de Wamba, rey godo de España, fue exhumado y trasladado en una caja de zinc que pesó un kilo",  # No
    "Hola",  # No
    "aeiou",  # No
    "parzibyte",  # No
    "abcdefghijklmnñopqrstuvwxyz",  # Sí
    "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja",  # Sí,
    "abcdefghijklmnopqrstuvwxyz",  #No, porque no lleva ñ
    "Mi hijo degustó en el festival de bayas una extraña pizza de kiwi con queso",  #Sí
]

for cadena in cadenas_para_probar:
    print("¿'{}' es un pangrama? {}".format(cadena, es_pangrama(cadena)))

Si dentro del ciclo la letra no está, sabemos de una vez que la cadena no es un pangrama porque no tiene una letra del alfabeto.

Al terminar el ciclo, si no salimos antes, entonces significa que todas las letras del alfabeto estuvieron; por lo tanto regresamos True.

Pangrama usando conjuntos en Python

Ahora veamos el método “complejo“. Este no lleva mucha explicación, creamos dos conjuntos, uno de la cadena y otro del alfabeto, y comprobamos que todos los elementos del alfabeto estén dentro del conjunto de la cadena.

def es_pangrama(cadena):
    import string
    cadena = cadena.lower()  # Convertir a minúscula
    conjunto_cadena = set(cadena)  # Crear conjunto de la cadena
    alfabeto = string.ascii_lowercase + "ñ"  # Hablamos español, si no, quítale la ñ
    conjunto_alfabeto = set(alfabeto)  # Crear conjunto de letras del alfabeto
    # comparar si todos los elementos de conjunto_alfabeto están
    # dentro de conjunto_cadena; es decir, si TODAS las letras del alfabeto
    # están dentro de la cadena
    return conjunto_cadena.issuperset(conjunto_alfabeto)


cadenas_para_probar = [
    "El cadáver de Wamba, rey godo de España, fue exhumado y trasladado en una caja de zinc que pesó un kilo",  # No
    "Hola",  # No
    "aeiou",  # No
    "parzibyte",  # No
    "abcdefghijklmnñopqrstuvwxyz",  # Sí
    "El veloz murciélago hindú comía feliz cardillo y kiwi. La cigüeña tocaba el saxofón detrás del palenque de paja",  # Sí,
    "abcdefghijklmnopqrstuvwxyz",  #No, porque no lleva ñ
    "Mi hijo degustó en el festival de bayas una extraña pizza de kiwi con queso",  #Sí
]

for cadena in cadenas_para_probar:
    print("¿'{}' es un pangrama? {}".format(cadena, es_pangrama(cadena)))

También incluí (como en el primer ejemplo) la forma de probarlo con unas cadenas que he tomado de la Wikipedia.

Probar ejemplos

Eres libre de descargar los ejemplos y probarlos ya sea en Windows o Android.

Te invito a leer más sobre Python en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.