Función que devuelva True si es vocal y de lo contrario False

publicado por: Anonymous

Es un ejercicio, estoy tratando de que un usuario coloque una letra, si es una vocal, será True, de lo contrario, será False, lo he escrito pero tanto si se coloca una vocal o una consonante, me sale False:

es_vocal=input("introduce una letra por favor: ")

def es_vocal ():

    if es_vocal == "a" or es_vocal == "e" or es_vocal == "i" or es_vocal == "o" or es_vocal == "u":

    print(True)

    elif es_vocal == "A" or es_vocal == "E" or es_vocal == "I" or es_vocal == "O" or es_vocal == "U":
        print(True)
    else:
        print(False)

es_vocal()

solución

El error se debe a que usas el mismo nombre para la variable a la que le asignas el retorno de input y para la función. Como la definición de la función es posterior a la de la variable, el identificador al final apunta a la función no a la cadena. Esto ocasiona que dentro de la función es_vocal hace referencia a la propia función no a la cadena ingresada mediante el input:

>>> es_vocal = input("introduce una letra por favor: ")

>>> def es_vocal ():
        print(es_vocal)
>>> es_vocal()
<function es_vocal at 0x0000020060BE9E18>

No uses por tanto el mismo nombre, además lo normal es hacer que la función tome como argumento la cadena y retorne True o False, siguendo tu misma lógica:

def es_vocal (c):
    if c == "a" or c == "e" or c == "i" or c == "o" or c== "u":
        return True

    elif c == "A" or c == "E" or c == "I" or c == "O" or c == "U":
        return True

    return False

caracter = input("introduce una letra por favor: ")
print(es_vocal(caracter))
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *