(0.5) Um sistema de eleição prevê 2 turnos. No segundo turno são classificados 3 candidatos. A escolha do eleito só acontece se o total de votos daquele candidato for superior à soma dos votos dos outros 2 candidatos. Você deve fazer um programa em Python que leia o nome dos 3 candidatos e o número de votos de cada um deles e informar qual candidato foi eleito (se a condição for satisfeita) ou informar que deverá haver nova eleição.
Passo 1
O enunciado diz o seguinte:
- Há uma eleição em dois turnos; no segundo turno há exatamente
candidatos classificados. - Cada candidato tem um nome (string) e recebeu um certo número de votos (um número inteiro).
- A regra para eleger é: um candidato é eleito somente se o número de votos desse candidato for estritamente maior que a soma dos votos dos outros
candidatos. Em símbolos, para um candidato com votos, ele é eleito se e somente se
onde
e
são os votos dos outros dois candidatos.
- O programa deve ler os nomes e os votos dos
candidatos e informar qual candidato foi eleito (se a condição acima for satisfeita) ou informar que deverá haver nova eleição.
Informações dadas que usaremos:
- nomes dos
candidatos (uma string por candidato); - número de votos de cada candidato (um inteiro não-negativo por candidato).
O que o programa deve entregar:
- o nome do candidato eleito, se existir um que satisfaça a condição;
- caso contrário, uma mensagem indicando que deverá haver nova eleição.
Passo 2
Como vamos ler os dados: vou assumir um formato simples e robusto para a entrada (isso precisa estar claro no programa):
- para cada candidato, o programa lê primeiro uma linha com o nome (pode conter espaços) e em seguida outra linha com o número de votos (um inteiro). Ou seja, serão lidas
linhas no total: nome1, votos1, nome2, votos2, nome3, votos3.
Justificativa da escolha: esse formato evita problemas com nomes que contêm espaços e é fácil de implementar com a função built-in
do Python.
Passo 3
Tipos de dados e funções básicas que usaremos:
-
retorna uma string com o conteúdo da linha lida. - Para transformar a string de votos em inteiro usamos
. - Guardamos cada candidato como um par
. - Em Python, soma de valores é feita com
e soma de elementos de uma lista pode ser feita com . - Comparação estrita “maior que” é feita com o operador
. A condição de eleição que precisamos testar, escrita em Python para um candidato , é equivalente a verificar se
onde
é um inteiro.
Exemplo numérico simples (didático):
- Suponha votos
, , . Para o candidato com votos verificamos se . Como é verdade, esse candidato seria eleito.
Passo 4
Algoritmo passo a passo (em linguagem natural):
- Ler
e . - Ler
e . - Ler
e . - Para cada candidato
(dos ): - calcular a soma dos votos dos outros dois candidatos,
; - verificar se
. - se a condição for verdadeira, esse candidato é eleito; imprimir o nome e terminar.
- calcular a soma dos votos dos outros dois candidatos,
- Se nenhum candidato satisfizer a condição, imprimir que deverá haver nova eleição.
Por que esse algoritmo é suficiente e eficiente:
- Há só
candidatos; testar cada um custa pouco trabalho computacional. - A desigualdade estrita garante que, se existir um candidato eleito, ele é único. (Uma explicação curta: se
, então e , logo nenhum dos outros pode ter votos maiores que a soma dos outros dois ao mesmo tempo.)
Passo 5
Detalhes de implementação em Python (linha a linha, com explicação do que cada parte faz):
- Lemos nomes com
para eliminar espaços extras nas extremidades. - Lemos votos com
para converter a string para inteiro. - Guardamos os pares em uma lista
. - Iteramos com um laço
. - Calculamos
. - Testamos
. Se verdadeiro, imprimimos e saímos. - Se acabar o laço sem achar eleito, imprimimos
.
Passo 6
Casos especiais e observações práticas:
- Se algum número de votos for negativo ou não for inteiro, a conversão
dará erro; em um cenário de prova, normalmente assume-se que as entradas são válidas (inteiros não-negativos). - Se dois ou mais candidatos tiverem a mesma quantidade de votos, a desigualdade estrita
não é satisfeita, então não haverá eleito (logo, nova eleição). - Como estamos testando a condição estrita, não elegemos em caso de igualdade (por exemplo,
não é suficiente).
Passo 7
Vou agora fornecer o programa Python completo, pronto para ser usado com o formato de entrada que descrevi (para cada candidato: uma linha com o nome, seguida de uma linha com o número de votos).
Resposta
# Leitura dos 3 candidatos: para cada um, uma linha com o nome e a próxima linha com os votos (inteiro).
nome1 = input().strip()
votos1 = int(input().strip())
nome2 = input().strip()
votos2 = int(input().strip())
nome3 = input().strip()
votos3 = int(input().strip())
candidatos = [(nome1, votos1), (nome2, votos2), (nome3, votos3)]
eleito = None
for i, (nome, votos) in enumerate(candidatos):
soma_outros = sum(v for j, (n, v) in enumerate(candidatos) if j != i)
if votos > soma_outros:
eleito = nome
break
if eleito is not None:
print(f"Eleito: {eleito}")
else:
print("Deve haver nova eleição")