Check if a string belongs to a list

Asked

Viewed 441 times

5

This program is only printing that the letter entered by the user is a consonant, even when it is a vowel. I think it has to do with the in and not in, but I’m not sure.

mensagem= list (input ("Digite qualquer letra\n"))
vogais = ['a', 'e', 'i', 'o', 'u']

if mensagem in vogais :
    print ("A letra é uma vogal")
if mensagem not in vogais :
    print ("A letra é uma consoante")

2 answers

6

mensagem receives a list of the characters typed by the user. Therefore, the comparison with vogais will only work if you compare using an index, thus:

mensagem = list(input("Digite qualquer letra\n")
if mensagem[0] in vogais:  # Se houver mais de um caractere, ele será ignorado
    # resto do código

Or if you fail to turn the result into a list, like this:

mensagem = input("Digite qualquer letra\n")
if mensagem in vogais:
    # resto do código

If you want to check other characters if the user types more than one, you can use a for:

for caractere in mensagem:
    if caractere in vogais:
        # resto do código

3


It is because you are turning the letter into a list. The operator in checks if something belongs to the list. Since the vowel list only has strings, it only makes sense to test if strings belong to it.

So to test if the letter belongs to the list, don’t turn it into a list, just do:

mensagem = input("Digite qualquer letra\n")

Another detail is that you can simplify the code using only if/else:

if mensagem in vogais:
    print("A letra é uma vogal")
else:
    print("A letra é uma consoante")

If the message is not in the vowel list, it already falls in the else. No reason to test again if the letter does not belong to the list.


Remember that this code is very "naive", because if I type "@", or "!" or "2", for example (or even a capital vowel) it says it is a consonant.

To be more precise, the ideal is also to have a list of consonants:

# transforma o que foi digitado em letra minúscula 
mensagem = input("Digite qualquer letra\n").lower()

vogais = ['a', 'e', 'i', 'o', 'u']
consoantes = ['b', 'c', etc...] # coloque todas as consoantes aqui

if mensagem in vogais:
    print("A letra é uma vogal")
elif mensagem in consoantes:
    print("A letra é uma consoante")
else:
    print("O que foi digitado não é uma vogal nem consoante")

Finally, it is worth remembering that this code does not consider accented letters (but simply add them to the list, if applicable).

Browser other questions tagged

You are not signed in. Login or sign up in order to post.