Bom dia, Diego!
O problema está dentro do seu for. O que acontece é que o seu parâmetro de entrada para comparação com as vogais se chama letter, assim como a variável auxiliar dentro do for. Desta forma, a cada iteração do for, essa variável será sobrescrita para um dos valores dentro da lista vowel.
Exemplo:
# Chamada da função check para a letra 'g'
check('g', ['a', 'e', 'i', 'o', 'u'])
# Dentro da função acontecerá isso:
def check(letter, vowel): # neste ponto, letter = 'g' e vowel = ['a', 'e', 'i', 'o', 'u']
for letter in vowel: # neste ponto, letter receberá uma letra da vowel pra cada iteração
# iteração 1: letter = 'a', iteração 2: letter = 'e', iteração 3: letter = 'i' ...
if str(letter).lower() in str(vowel).lower(): # a condição sempre será satisfeita
return False
return True
O que deve ser feito é simplesmente retirar-se laço for que o programa funcionará devidamente. Isso acontece porque, ao utilizar o in, você não precisa percorrer letra por letra da lista vowel para fazer a checagem, ele faz isso automaticamente.
'a' in 'banana' # True
'b' in 'maçã' # False
'c' in 'abacaxi' # True
Para otimizar seu código, sugiro alterar a função "check" para:
def check(letter, vowels = 'aeiou'):
return letter.lower() in vowels.lower()
Essa implementação da função já seta como default sua variável vowels como a palavra 'aeiou', não precisando definir ela toda vez que for chamar a função. Porém, se você quiser comparar a letra com alguma outra lista de letras, pode passar vowels como parâmetro também.
# Aqui comparamos letras com a string 'aeiou'
check('a') # True
check('b') # False
# Aqui sobrescrevemos vowels para ser a string 'abcde' ao invés de 'aeiou'
# sem passar o nome da variável
check('c', 'abcde') # True
# passando o nome da variável
check('c', vowels='abcde') # True
E como a comparação letter.lower() in vowels.lower()
já nos retorna True ou False, é possível apenas dar um return letter.lower() in vowels.lower()
. Se você quiser fazer uma lógica invertida (True se não for vogal e False se for, como no seu programa) pode-se retornar a mesma coisa mas invertendo ela, fazendo: return not letter.lower() in vowels.lower()
.
Espero ter ajudado e não te confundido mais, hahaha.
Um abraço e bons estudos!