Calculando a média em Python - Precedência de Operadores

Você tem uma tia professora línguas.
Ela é tão fera, que é professora tanto de Português e Inglês.

Mas ela tem uma turma muito grande, e dá muito trabalho ficar somando e dividindo por 2, pois geralmente fica número quebrado no meio.

Vamos ajudar sua tia?
Crie um script que pede a nota de Português e a de Inglês, e forneça a média das duas notas.

Precedência de operadores
Sua tia. Sim, sua tia toca baixo, qual o problema ?



Calculando Média em Python

Vamos criar a variável 'port', para a notar de Português e armazenar um número float nela, através das funções float() e input().

Depois, fazemos o mesmo para a variável 'ing', de Inglês.

Por fim, somamos as duas e dividimos por 2. O resultado dessa operação, armazenamos na variável 'media' e simplesmente damos um print mostrando a média.

Digite e teste o código abaixo:
# Pedindo as notas
port = float( input("Digite a nota de Português, tia: ") )
ing = float( input("Tia, agora a de Inglês: ") )

# Cálculo da média
media = port + ing / 2

print("A média desse estudante foi: ",media)

Vamos ver o resultado dando uma nota 8 e uma 10 (logo a média deve dar 9):

Precedência de operadores em Python
 Peraí!!!!! Média 13 ???

Curso de Python

O que foi isso que aconteceu? Que tiro foi esse, viado ???
Calma, por incrível que pareça, este resultado está correto.

Sim, correto. Mas do ponto de vista do Python. Do seu, que quer calcular uma média, tá errado...e o grande culpado dessa confusão é um sujeito chamado "Precedência de operadores".

Sua tia ficou chateada com o bug no seu programa

Precedência de operadores em Python

Quanto dá: 1 + 1 * 2 ?

Alguém pode pensar: 1 + 1 * 2 = 1 + 2 = 3
Outro pode fazer:      1 + 1 * 2 = 2 * 2 = 4

E aí, qual o certo?
Pra não haver essa confusão, o Python tem uma regra, sobre qual operação fazer primeiro.

Na ordem de importância, maior pra menor:
  • Exponenciação: **
  • Multiplicação, divisão e resto da divisão: *  / %
  • Adição e subtração: + -

Tem exponenciação? Não, ok.
Tem multiplicação, divisão ou resto da divisão? Sim, tem multiplicação. Então multiplica primeiro 1 * 2 = 2
Só depois faz a soma: 1 + 2 = 3

Parêntesis pra evitar confusão

Vamos rever nosso código da média:

media = port + ing / 2

Huuum! Taí o erro! Primeiro ocorre a divisão da nota de inglês por 2.
Mas, na verdade, a gente queria que a soma ocorresse antes, só depois divide tudo por 2.

Uma maneira de resolver isso é simplesmente colocando parêntesis, pra deixar bem claro o que deve ser feito.

Assim, o correto seria:

# Pedindo as notas
port = float( input("Digite a nota de Português, tia: ") )
ing = float( input("Tia, agora a de Inglês: ") )

# Cálculo da média
media = (port + ing) / 2

print("A média desse estudante foi: ",media)

Aaaaaagora sim! Vai dar direitinho!

Curso de Python online grátis
Agora sua tia ficou feliz!


Exercício: Média e Precedência

Devido a crise que está ocorrendo no Brasil, demitiram o professor de Matemática.

E adivinhe para quem sobrou? Claro, pra sua tia.
Agora ela vai dar aula de Matemática também.

Faça um programa em Python que receba as notas de Português, Inglês e Matemática de um aluno, e em seguida forneça a média aritmética dessas notas.

Não se esqueça de usar parêntesis no cálculo da média, para não ter problemas de precedência de operadores.

Digite o código no seu script nos comentários.

Apostila de Python grátis para download
Cara da sua tia quando você disser que é profissional Python e não trabalha mais de graça! Vai ter que pagar tia, preciso custear minha mansão e minha BMW adora que sou programador Python

3 comentários:

  1. math =float(input('Tia coloque a note de matematica: '))
    port =float(input('Tia coloque a nota de portugues: '))
    ingl =float(input('Tia coloque a nota de ingles: '))

    media =(math+port+ingl)/3
    print('A média desse aluno é:',media)

    Abaixo ainda coloquei um if para ela ter a resposta se o aluno foi aprovado ou não no cursinho

    ResponderExcluir
  2. port = float(input("Nota de Português: "))
    ing = float(input("Nota de Inglês: "))
    mat = float(input("Nota de Matemática: "))

    # Cálculo da média
    media = (port + ing + mat) / 3

    print("A média desse estudante foi: ",media)

    ResponderExcluir
  3. portN1 = float(input('Insira a primeira nota de Português: '))
    ingN2 = float(input('Insira a segunda nota de Inglês: '))
    matN3 = float(input('Insira a segunda nota de Matemática: '))


    print ('A média das notas: ', (portN1 + ingN2 + matN3)/3)

    ResponderExcluir