Exercícios Resolvidos de Expressões e saída de dados

Ver Teoria

Enunciado

Determine, sem executar, qual o resultado do código abaixo:

Passo 1

Fala aí, meu compatriota!!! Esse exercício é malandrinho, e tem algumas coisas que a gente precisa pensar sobre o funcionamento de Python pra resolver.

Mas, cara, antes de tudo, talvez você não saiba o conceito de comentários em Python. Por isso, é a primeira coisa que eu vou te contar.

Cara, quando a gente escreve o caractere “#” (hashtag), tudo que vier depois vai ser desconsiderado pelo Python, isso significa que a gente pode fazer anotações no código! Olha um exemplo da utilidade dos comentários:

Quando você executar esse programa, seu computador vai cagar e andar pras linhas que começam com #, assim como no enunciado. A partir do #, tudo fica vermelhinho, tá vendo? Significa que o Python NÃO VAI LER. Comentários só são úteis pra gente mesmo.

Beleza! Agora vamo continuar o exercício falando da matemática na primeira linha do código do enunciado.

Cara, esse é tranquilo. A precedência aqui é igual ao da matemática que a gente costuma usar, então a gente primeiro faz o 3*2, que vai dar 6. Depois a gente soma mais 2, que vai dar 8.

Beleza! Essa foi mais tranquila. Vamos pra segunda!

Passo 2

Se liga nessa aqui! É a mesma equação de antes, mas com parênteses no 2+2.

É bom pra lembrar que, assim como na matemática, os parênteses têm a mais alta precedência dentre os operadores matemáticos. Isso significa que os parênteses sempre vão ser resolvidos antes dos outros operadores matemáticos, e são usados pra forçar precedência nas expressões.

Nesse caso, será resolvido primeiro o (2+2), que vai virar 4.

Logo depois, a conta a ser resolvida vai ser 3*4, que vai dar 12. Beleza?? Vamo ver a terceira linha agora.

Passo 3

Essa é mais complicada, porque o operador de exponenciação (**) é meio doido! O operador de segunda maior precedência é o **, isso significa que quando não houver parênteses (), as potenciações serão as próximas a serem resolvidas. Porém, diferente de todos os outros operadores, a associatividade do ** é feita da direita pra esquerda. Hmmm, mas o que isso significa?!

Calma! Vem comigo que eu te explico. Olha essa expressão:

Cara, repara que quando a gente tem vários operadores de mesma precedência, a gente resolve da esquerda pra direita. A resposta dessa conta é 9, porque primeiro a gente resolveria o 7-1.

Se a gente tivesse feito o 1 + 3 primeiro, o resultado seria diferente.

Tô te falando isso pra te dizer que, quando a gente tem vários operadores de mesma precedência juntos, a gente geralmente vai resolvendo as contas da esquerda pra direita (left-associative), a menos que tenha um parênteses, beleza??

Porém, o operador ** tem a peculiaridade de ter a associatividade da direita pra esquerda (right-associative). Então, quando a gente tem mais de um ** ligado um no outro, igual a gente tá tendo em

primeiro vai ser resolvido o mais a direita. Ou seja, o resultado dessa conta vai ser:

Agora que a gente já resolveu os operadores de maior precedência, não podemos esquecer o humilde 1 que tinha ali na frente. Então, o resultado vai ser:

Ufa! Acabouuuu! Te vejo no próximo.

Resposta