Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Resolução - Exercício 9

Bom dia a todos! Estou começando python por esse curso e decidi compartilhar a minha resolução da questão 9 pois foi a que mais me diverti montando, já que fui utilizando tudo o que aprendi nos exercícios anteriores pra chegar no código final. No mais, se houver espaço pra melhoria e/ou redução de informações no meu código, ficaria feliz em ouvir outras opiniões. Adicionei os comentários em cada etapa pra indicar a linha de raciocínio:

#Variáveis com cada opção de voto
c1 = 0
c2 = 0
c3 = 0
c4 = 0
nulo = 0
branco = 0
votos = 0 #Quantidade geral de votos

while votos < 20: #definido loop em até 20 votos válidos
  print('Olá! Digite seu voto entre 1 a 4 (5 para nulo e 6 para em branco)')
  #input de votação
  votacao = int(input('Digite seu Voto: '))
  #Acréscimos pra cada possibilidade de voto do usuário e no total de votos
  if votacao == 1:
    c1 += 1
    votos += 1
  elif votacao == 2:
    c2 += 1
    votos +=1
  elif votacao == 3:
    c3 += 1
    votos +=1
  elif votacao == 4:
    c4 += 1
    votos +=1
  elif votacao == 5:
    nulo += 1
    votos +=1
  elif votacao == 6:
    branco += 1
    votos +=1
  else:
    print('Digite um número válido') #Caso não esteja na lista de valores, solicita novamente...
    continue # ... E reinicia o loop
 
  #Imprime o vencedor da eleição através de if/elif/else
if (c1 > c2) and (c1 > c3) and (c1 > c4):
    print(f'|O cadidato eleito foi: Cadidato 1|!')
elif (c2 > c1) and (c2 > c3) and (c2 > c4):
    print(f'|O cadidato eleito foi: Cadidato 2|!')
elif (c3 > c1) and (c3 > c2) and (c3 > c4):
    print(f'|O cadidato eleito foi: Cadidato 3|!')
elif (c4 > c1) and (c4 > c2) and (c4 > c3):
    print(f'|O cadidato eleito foi: Cadidato 4|!')
else: #Caso empate ou os maiores votos sejam nulo/branco - mensagem aparece:
    print(f'|Devido a grandes votos em branco/nulo ou empate, haverá um Segundo turno|!')

  #Imprime os votos totais de cada candidato
print(f'|Candidato 1 - {c1}|')
print(f'|Candidato 2 - {c2}|')
print(f'|Candidato 3 - {c3}|')
print(f'|Candidato 4 - {c4}|')
print(f'|Votos nulo - {nulo}|')
print(f'|Votos em Branco - {branco}|')

#Imprime os votos totais
print(f'|Total de Votos - {votos}|')

#Mostra quantos % foram nulos e em branco
print(f'|Taxa de votos nulos - {round(nulo/votos*100 , 2)}%|')
print(f'|Taxa de votos em Branco - {round(branco/votos*100 , 2)}%|')
1 resposta

Oii Lucas, tudo bem?

Obrigado por compartilhar sua resolução aqui no fórum! É muito bacana ver que você foi acumulando o que aprendeu nos exercícios anteriores pra chegar nessa solução, e os comentários no código mostram que você pensou bem em cada etapa.

O código está funcionando corretamente e alguns detalhes chamaram atenção positivamente: o uso do continue para reiniciar o loop sem contar um voto inválido é uma escolha elegante, e o tratamento separado de nulo e branco deixa o resultado bem completo.

Tenho apenas uma observação para considerar: a lógica de vencedor compara apenas os candidatos entre si, mas não verifica se nulo ou branco superaram todos eles. Se o candidato 1 tiver 3 votos, mas branco tiver 10, o código ainda declara o candidato 1 eleito. Você já tratou esse cenário no else com a mensagem de segundo turno, mas só cairia lá em caso de empate entre candidatos. Incluir nulo e branco nas comparações resolveria isso, algo como:

if (c1 > c2) and (c1 > c3) and (c1 > c4) and (c1 > nulo) and (c1 > branco):

Fora isso, código limpo e bem estruturado. Parabéns por ir além do básico e pensar nos casos de borda!

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade