1
resposta

Dúvida no exercício 9

Boa noite!

Ao me deparar com o exercício 9, percebi que o operardor for não permite que a variável atribuída a ele seja alterada por um operador posterior (diferente do que ocorre quando utilizamos while, no qual é possível subtrair ou adicionar valor, a depender da necessidade, para cessar a estrutura de repetição). Melhor exemplificando:

candidato_1 = 0
candidato_2 = 0
candidato_3 = 0
candidato_4 = 0
voto_nulo = 0
voto_branco = 0
voto_valido = 0

for i in range(20):
  voto = int(input('Insira o número referente ao candidato desejado\n(5 = nulo e 6 = branco): '))
  if voto == 1:
    candidato_1 += 1
    voto_valido += 1
  elif voto == 2:
    candidato_2 += 1
    voto_valido += 1
  elif voto == 3:
    candidato_3 += 1
    voto_valido += 1
  elif voto == 4:
    candidato_4 += 1
    voto_valido += 1
  elif voto == 5:
    voto_nulo += 1
  elif voto == 6:
    voto_branco += 1
  else:
    print('Voto inválido. Digite outro valor')
    i -= 1
    
p_nulo = (voto_nulo / 20) * 100
p_branco = (voto_branco / 20) * 100
print(f'O candidato 1 recebeu {candidato_1} votos\nO candidadto 2 recebeu {candidato_2} votos\nO candidato 3 recebeu {candidato_3} votos\nO candidato 4 recebeu {candidato_4} votos\nForam computados {voto_nulo} votos nulos\nForam computados {voto_branco} votos brancos')
print(f'Houve {p_nulo}% de votos nulos e {p_branco}% de votos brancos')

O código i -=1 não modifica o valor de i dentro da estrutura for i in range(20) quando o valor inserido pelo usuário é diferente daqueles pré-estabelecidos (número do candidato ou voto nulo/branco). Neste caso, acredito que não faria diferença, pois o número inserido fora daqueles pré-estabelecidos resulta em voto nulo numa votação real.

Mas e em outros casos: É isso mesmo? Não é possível modificar essa variável quando atrelada ao operador for? Qual é a razão de não ser possível modificá-la?

Vi algo no manual de python sobre essa variável criada pelo for ser uma variável "temporária". A sua inalterabilidade é em razão disso?

1 resposta

Olá Gustavo! Tudo ok contigo?

Vamos por partes ok.

Bom você está correto em sua observação quando afirma que no Python, a variável de iteração em um loop for é, de fato, uma espécie de variável temporária e não pode ser alterada dentro do bloco de código do loop. Mas isso só ocorre porque, a cada iteração do loop, o Python simplesmente pega o próximo valor do objeto iterável (neste caso, o objeto retornado por range(20)) e o atribui à variável i. Qualquer alteração que você faça em i dentro do loop será descartada na próxima iteração.

Vamos analisar isso mais detalhadamente.

Em Python, o for loop é usado para iterar sobre uma sequência (como uma lista, uma string, um range etc.) e executar um bloco de código para cada item na sequência. No seu exemplo, você utilizou um for i in range(20) para repetir o bloco de código 20 vezes.

No entanto, é importante entender que a variável i não é uma variável que você pode manipular diretamente dentro do loop for, como faria em um loop while. O for loop em Python é projetado para percorrer elementos de uma sequência, e a variável de controle (no caso, i) assume o valor do próximo elemento a cada iteração. Isso significa que, independentemente do que você faça para tentar modificar o valor de i dentro do loop, ele será automaticamente atualizado na próxima iteração para o próximo valor na sequência.

Aqui está um exemplo simples para ilustrar esse comportamento:

for i in range(5):
    print(i)
    i += 1  # Isso não afetará o valor de i na próxima iteração

Neste exemplo, mesmo que você tente adicionar 1 ao valor de i dentro do loop, o valor impresso ainda será 0, 1, 2, 3 e 4. Isso ocorre porque o valor de i é definido automaticamente pelo loop a cada iteração.

Agora, voltando ao seu código, quando você usa a expressão i -= 1, ela não tem impacto sobre o valor de i na próxima iteração, pois o loop for já determinou o valor de i para a próxima etapa da repetição. Essa é a razão pela qual você não consegue manipular diretamente a variável de controle i dentro do loop for.

Agora, quanto à sua observação sobre a variável criada pelo for ser "temporária", você está correto!

A variável de controle (i, no seu caso) é criada apenas para fins de iteração e não persiste após a conclusão do loop. Ela não é acessível fora do loop e não deve ser vista como uma variável tradicional que pode ser modificada como parte do fluxo de controle.

Se você deseja modificar a variável de controle em um loop, é mais apropriado usar o loop while. Aqui está um exemplo usando o loop while que se comportaria mais conforme sua expectativa:

i = 0
while i < 20:
    voto = int(input('Insira o número referente ao candidato desejado\n(5 = nulo e 6 = branco): '))
    if voto == 1:
        candidato_1 += 1
        voto_valido += 1
    # Restante do código...

    else:
        print('Voto inválido. Digite outro valor')
        i -= 1  # Agora essa modificação afetará o valor de i na próxima iteração

    i += 1  # Incrementar manualmente para avançar para a próxima iteração

Nesse exemplo, você tem mais controle sobre a variável de controle i e pode alterá-la conforme necessário.

Em resumo, sua observação é precisa: não é possível modificar diretamente a variável de controle de um loop for da maneira que você estava tentando. O for loop é projetado para iterar sobre sequências e sua variável de controle é gerenciada automaticamente pelo próprio loop. Se você precisa de mais flexibilidade para alterar a variável de controle durante a iteração, o while loop é mais apropriado.

Espero que esta explicação tenha esclarecido sua dúvida.

Se você tiver mais dúvidas ou precisar de mais esclarecimentos, não hesite em perguntar. Estou aqui para ajudar! ;)

Espero ter ajudado, abraços e bons estudos!