Considere o código Python a seguir. def F(a, b, c): for k in range(a,b): print k ** c Dado que uma execução da função F exibiu os números 16, 9, 4, 1, 0, 1, é correto afirmar que os valores dos parâmetros a, b, c empregados foram, respectivamente:
- A)-4, 1, 2;
Errada, porque range(-4, 1) geraria apenas -4, -3, -2, -1 e nao produziria a saida com 0 e 1.
- B)-4, 2, 2;
Certa, pois range(-4, 2) gera -4, -3, -2, -1, 0, 1 e, com c = 2, a impressao vira 16, 9, 4, 1, 0, 1.
- C)-4, 0, 4;
Errada, porque range(-4, 0) nao incluiria 0 nem 1 na sequencia exibida.
- D)4, -1, 1;
Errada, pois o primeiro valor de k seria 4 e nao apareceriam os numeros negativos nem essa ordem de saída.
- E)4, 2, 2.
Errada, porque range(4, 2) é vazio e a função nao exibiria nenhum numero.
Gabarito: B
A funcao usa range(a, b), e isso significa que o Python gera valores começando em a e indo até b - 1. Ou seja, o limite inicial entra na conta, mas o final fica de fora. Depois, cada valor de k é elevado a c com o operador **, que faz exponenciação, nao multiplicacao repetida nem XOR, que muita gente confunde em outras linguagens. Aqui, a saida foi 16, 9, 4, 1, 0, 1. Esses numeros sao exatamente os quadrados de -4, -3, -2, -1, 0 e 1. Isso mostra que k percorreu de -4 ate 1, e que o expoente foi 2. Se k vai de -4 até 1, entao o intervalo veio de range(-4, 2), porque o 2 nao aparece na execucao. Logo, a = -4 e b = 2. Como os valores impressos sao quadrados perfeitos, c = 2. Portanto, o trio correto é -4, 2, 2, que corresponde à alternativa B. Questao classica de prova: basta lembrar que range exclui o limite superior e que ** é potencia.