GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

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

programação
python
Tags: #<Tag:0x00007fbf1b1ad7b8> #<Tag:0x00007fbf1b1ad600>

#1
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?


#2

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


#3

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.’)