Pangrama#

Un pangrama es una frase que contiene todas las letras del abecedario. Vamos a usar el inglés, así nos evitamos los acentos y otras cuestiones del castellano. Por ejemplo

the quick brown fox jumps over the lazy dog

es un pangrama muy usado en la creación de fonts, es decir, fuentes o tipos de letra, justamente porque contiene todas las letras del abecedario.

El problema es escribir una función que determine si una frase es un pangrama o no.

s = "the quick brown fox jumps over the lazy dog"

abcd = 'abcdefghijklmnopqrstuvwxyz'




def is_pangram(frase):
   
    for x in abcd:
        letra = x
    
    letra = 'a'
    
    for c in frase:
        if letra == c:
            print('letra ', letra,' está en ',frase)
#         else:
#             print('letra ', letra,' no está.')
#         print(c)
        

is_pangram(s)
letra  a  está en  the quick brown fox jumps over the lazy dog

Versión 1 con contador#

s = "the quick brown fox jumps over the lazy dog"

hola = "hola mundo"

abcd = 'abcdefghijklmnopqrstuvwxyz'


def is_pangram(frase):
   
    cuenta_letras = 0
    # Loop en las letras del abecedario
    for x in abcd:
        letra = x
    
        # Loop en las letras de la frase
        for c in frase:
            if letra == c:
                # print('letra ', letra,' está en ',frase)
                cuenta_letras = cuenta_letras + 1
                # print(letra)
                break

    print("cuenta_letras: ",cuenta_letras)
    if(cuenta_letras == 26):
        return True  
    else:
        return False



print(is_pangram(s))
print(is_pangram(hola))
print(is_pangram("la bella y graciosa moza"))
cuenta_letras:  26
True
cuenta_letras:  8
False
cuenta_letras:  13
False

Versión 2 con .append#

s = "the quick brown fox jumps over the lazy dog"

hola = "hola mundo"

abcd = 'abcdefghijklmnopqrstuvwxyz'


def is_pangram(frase):
   
    resultado = []
    # Loop en las letras del abecedario
    for x in abcd:
        letra = x
    
        # Loop en las letras de la frase
        for c in frase:
            if letra == c:
                # print('letra ', letra,' está en ',frase)
                resultado.append(letra)
                # print(letra)
                break
    
    if(len(resultado) == 26):
        return True  
    else:
        return False


print(is_pangram(s))
print(is_pangram(hola))
print(is_pangram("la bella y graciosa moza"))
True
False
False

Versión 3 con string.join#

s = "the quick brown fox jumps over the lazy dog"

hola = "hola mundo"

abcd = 'abcdefghijklmnopqrstuvwxyz'


def is_pangram(frase):
   
    resultado = []
    # Loop en las letras del abecedario
    for x in abcd:
        letra = x
    
        # Loop en las letras de la frase
        for c in frase:
            if letra == c:
                # print('letra ', letra,' está en ',frase)
                resultado.append(letra)
                # print(letra)
                break

    nuevo_abcd = ""
    nuevo_abcd = nuevo_abcd.join(resultado)
    
    print("nuevo_abcd: ",nuevo_abcd)

    if(nuevo_abcd == abcd):
        return True  
    else:
        return False



print(is_pangram(s))
print(is_pangram(hola))
print(is_pangram("la bella y graciosa moza"))
nuevo_abcd:  abcdefghijklmnopqrstuvwxyz
True
nuevo_abcd:  adhlmnou
False
nuevo_abcd:  abcegilmorsyz
False

Versión 4 con sets#

Esta versión usa sets, que son conjuntos de elementos todos distintos entre sí, sin orden particular.

Para observar: la función len aplicada a un set devuelve el cardinal del elemento.

s = "the quick brown fox jumps over the lazy dog"

hola = "hola mundo"

# En esta versión ni siquiera hace falta la variable abcd
# abcd = 'abcdefghijklmnopqrstuvwxyz'

len_abcd = 26

def is_pangram(frase):
   
    resultado = frase.replace(" ","") # Borra los espacios de la frase, para no contarlo dentro del set
    resultado = set(resultado)        # Convierte la frase sin espacios (que es una lista) en un set, removiendo los
                                      # elementos iguales.
    print(resultado)

    if(len(resultado) == len_abcd):
        return True  
    else:
        return False



print(is_pangram(s))
print(is_pangram(hola))
print(is_pangram("la bella y graciosa moza"))
{'o', 'v', 'q', 'm', 'b', 'h', 'r', 'z', 'd', 'y', 'l', 't', 'i', 'e', 'a', 'x', 'w', 'g', 'u', 'j', 'k', 'f', 'p', 'c', 'n', 's'}
True
{'l', 'm', 'h', 'a', 'd', 'n', 'u', 'o'}
False
{'y', 'l', 'm', 'b', 's', 'r', 'i', 'e', 'g', 'z', 'a', 'c', 'o'}
False