Condições Aninhadas - Excessão não funcionando

media = float(input('Digite a média do usuario: '))
if (media < 7.0):
    print('Recomendação de 0%')
elif (media >= 7.0 or media <= 8.0):
    print('Recomendação de 5%')
elif (media >= 8.0 or media <= 9.0):
    print('Recomendação de 10%')
elif (media >= 9.0):
    print('Recomendação de 30%')
else:
    print('Erro. Média incorreta.')

Este é meu código, se eu digitar, por exemplo, 8.5 ele entra na condição de recomendação de 5%
O que eu faço?

O principal problema é que você está usando or ao invés de and

Ainda, há um bug sutil que seus intervalos se sobrepoem: um valor de 8.0 poderia entrar no 5% ou no 10%, dependendo do que vier antes.

Um jeito mais idiomático em python de escrever esses ifs seria

elif 7.0 <= media < 8.0:

Ou se você tem certeza que a ordem dos ifs sempre será a mesma, você pode só testar pelo limite super, já que o if anterior já cobriu o inferior: < 7, < 8, <9, else

1 curtida

AND
Operador lógico no qual a resposta da operação é verdade (1) se ambas as variáveis de entrada forem verdade.

OR
Operador lógico no qual a resposta da operação é verdade (1) se pelo menos uma das variáveis de entrada for verdade.

Seria mais fácil usar o AND

media = float(input('Digite a média do usuario: '))
if (media < 7.0):
print(‘Recomendação de 0%’)
elif (media >= 7.0 and media <= 8.0):
print(‘Recomendação de 5%’)
elif (media >= 8.0 and media <= 9.0):
print(‘Recomendação de 10%’)
elif (media > 9.0):
print(‘Recomendação de 30%’)
else:

print(‘Erro. Média incorreta.’)

1 curtida