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.