1
resposta

[Dúvida] Aula 4 - Questão 9

Montei o programa certinho e quando todos os votos são válidos, ele computa corretamente. Porém, quando eu digito algum valor abaixo de 1 ou acima de 6, ele computa também, mesmo aparecendo a mensagem de "voto inválido". Como pedir pra pessoa colocar um voto válido, nesse caso, e repetir o processo até que ela coloque um valor válido?

cand1 = 0
cand2 = 0
cand3 = 0
cand4 = 0
nulo = 0
branco = 0    


for i in range(1,21):
  voto = int(input('Digite o seu voto: '))

  if voto == 1:
    cand1 += 1
  elif voto == 2:
    cand2 += 1
  elif voto == 3:
    cand3 += 1
  elif voto == 4:
    cand4 += 1
  elif voto == 5:
    nulo += 1
  elif voto == 6:
    branco += 1
  else:
    print('Voto inválido.')
  

print(f'A porcentagem de votos nulos foi de {(nulo/20)}')
print(f'A porcentagem de votos em branco foi de {(branco/20)}')
1 resposta

Olá, Núria. Como vai?

Essa é uma dúvida muito comum quando estamos trabalhando com contadores e laços de repetição. O problema no seu código atual é que o for i in range(1, 21) vai rodar exatamente 20 vezes, independentemente de o voto ser válido ou não. Quando o voto é inválido, ele cai no else, exibe a mensagem, mas a "rodada" do loop é consumida e o programa passa para o próximo i.

Para resolver isso e garantir que o programa só avance quando receber um voto válido, você pode utilizar um laço while dentro ou no lugar do seu for.

Aqui estão duas formas de solucionar isso:

1. Utilizando while para validar cada entrada
Nesta abordagem, mantemos o seu for, mas criamos um "bloqueio" que só deixa o código sair do while quando o voto estiver entre 1 e 6:

for i in range(1, 21):
    voto = int(input(f'Votante {i}, digite o seu voto: '))
    
    # Enquanto o voto for menor que 1 ou maior que 6, ele pede novamente
    while voto < 1 or voto > 6:
        print('Voto inválido. Por favor, vote de 1 a 6.')
        voto = int(input(f'Votante {i}, digite o seu voto novamente: '))

    # Agora o processamento só acontece com votos garantidamente válidos
    if voto == 1:
        cand1 += 1
    elif voto == 2:
        cand2 += 1
    # ... (restante dos seus elifs)

2. Utilizando apenas o while com um contador manual
Outra forma elegante é controlar a contagem manualmente. O contador só aumenta (votos_computados += 1) se o voto entrar em uma das condições válidas:

votos_computados = 0
while votos_computados < 20:
    voto = int(input(f'Voto nº {votos_computados + 1}: '))
    
    if voto == 1:
        cand1 += 1
        votos_computados += 1
    elif voto == 2:
        cand2 += 1
        votos_computados += 1
    # ... (faça isso para todos os candidatos, nulo e branco)
    else:
        print('Voto inválido. Este voto não será computado, tente novamente.')

Dica extra sobre a porcentagem:
Notei que no seu print final você usou (nulo/20). Para exibir em formato de porcentagem real (ex: 10%), você pode multiplicar por 100 ou usar a formatação do Python:

print(f'A porcentagem de votos nulos foi de {(nulo/20):.0%}')

Escolha a opção que achar mais clara para o seu raciocínio. A primeira opção (com while dentro do for) é excelente para garantir que cada um dos 20 eleitores cumpra sua tarefa de votar corretamente.

Espero que possa ter lhe ajudado!