Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida sobre IF

Olá! Estou com um questionamento que já foi descrito no fórum, porém não sanou ainda minha dúvida.

Sobre o seguinte código:

media = float(input('Digite a média: '))

if media >= 6.0:
  print('Aprovado(a)')
if 6.0 > media >= 4.0:
  print('Recuperação')
if media < 4.0:
  print('Reprovado(a)')

No segundo item, qual o motivo da linguagem não aceitar a seguinte forma de escrita:

media = float(input('Digite a média: '))
if media>=6.0:
  print('Aprovado(a)')
if 4.0 >= media < 6.0:
  print('Recuperação')
if media < 4.0:
  print('Reprovado(a)')

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Na verdade, ele aceita, mas não retorna a função print.

2 respostas
solução!

O motivo pelo qual a segunda forma de escrita não funciona como esperado está relacionado à maneira como as comparações são avaliadas em Python. A expressão 4.0 >= media < 6.0 não é avaliada como você pode estar imaginando.

Quando você escreve 4.0 >= media < 6.0, a linguagem Python avalia isso como (4.0 >= media) and (media < 6.0). Ou seja, ela verifica se 4.0 é maior ou igual a media e, ao mesmo tempo, se media é menor que 6.0.

Isso pode levar a resultados inesperados, especialmente quando a média é exatamente 4.0. Nesse caso, a expressão será avaliada como (True) and (True), o que não é o resultado desejado para a condição de recuperação.

A forma correta de expressar essa condição seria usando and de maneira explícita ou reorganizando as comparações:

media = float(input('Digite a média: '))
if media >= 6.0:
  print('Aprovado(a)')
elif 4.0 <= media < 6.0:
  print('Recuperação')
else:
  print('Reprovado(a)')

Neste exemplo, elif 4.0 <= media < 6.0 garante que a condição seja avaliada corretamente, sem ambiguidade. Além disso, o uso de elif evita a avaliação desnecessária das condições subsequentes quando uma condição anterior já foi verdadeira.

4.0 >= media < 6.0

É porque aí existem duas operações, vamos supor que media=5:

(4>=5) and (5 <6)

 False and True
 
         False