Faça um programa que simule uma urna eletrônica. Para ter acesso ao sistema deve ser inserido o login (admin) e senha (chave). A tela a ser apresentada deverá ser da seguinte forma:
ELEIÇÕES 2021
---------------------------------
Escolha uma opção:
1. Candidata Maria Rodrigues
2. Candidato Carlos Luz
3. Nulo
4. Branco
5. Finalizar votação
O programa deverá solicitar os votos dos eleitores indeterminadamente, e exibir a mensagem “voto registrado com sucesso”, limpando a tela e exibindo o menu novamente. O programa só deve parar quando for informado a opção 5. Ao finalizar, o programa irá apresentar as seguintes informações:
a) O número de votos para Maria, Carlos, nulos e brancos, com a respectiva porcentagem. Ex.: Maria: 20 votos (50%);
b) O candidato vencedor. Em caso de empate, ou votos nulos ou brancos com maior número de votos, exibir a mensagem “Eleição cancelada”.da as questões a seguir:
Soluções para a tarefa
Resposta:
import time # Biblioteca para manipular tempo
import os # Biblioteca para manipular o OS
# Função que valida o acesso
def acesso():
while True:
os.system('cls' if os.name == 'nt' else 'clear') # Limpa a tela
login = input('Login > ')
senha = input('Senha > ')
if login == 'admin' and senha == 'chave':
break # Quebra o loop
else:
print('Login ou Senha incorretos!')
time.sleep(1) # Aguarda 1 segundo para prosseguir
# Função que contém as opções do menu
def menu():
os.system('cls' if os.name == 'nt' else 'clear') # Limpa a tela
print("""ELEIÇÕES 2021
---------------------------------
Escolha uma opção:
1. Candidata Maria Rodrigues
2. Candidato Carlos Luz
3. Nulo
4. Branco
5. Finalizar votação
"""
)
op = int(input('Opção > '))
return op
# Função que mostra o resultado da eleição
def resultado(vencedor, votos_vencedor, p_v, perdedor, votos_perdedor, p_d, nulo, p_n, branco, p_b):
print('--- RESULTADO ---')
print('{}: {} votos ({:.2f}%)'.format(vencedor, votos_vencedor, p_v))
print('{}: {} votos ({:.2f}%)'.format(perdedor, votos_perdedor, p_d))
print('Nulo: {} votos ({:.2f}%)'.format(nulo, p_n))
print('Branco: {} votos ({:.2f}%)'.format(branco, p_b))
# Função principal
def main():
try:
acesso() # Chamada da função acesso criada anteriormente
maria_rodrigues = 0
carlos_luz = 0
nulo = 0
branco = 0
while True:
op = menu() # Cria uma variavel com base na opção da função menu
if op == 1:
maria_rodrigues += 1
elif op == 2:
carlos_luz += 1
elif op == 3:
nulo += 1
elif op == 4:
branco += 1
elif op == 5:
os.system('cls' if os.name == 'nt' else 'clear') # Limpa a tela
total = maria_rodrigues + carlos_luz + nulo + branco # Calcula o total de votos
mr_porc = (maria_rodrigues * 100) / total # Calcula a porcentagem da Maria Rogrigues
cl_porc = (carlos_luz * 100) / total # Calcula a porcentagem do Carlos Luz
n_porc = (nulo * 100) / total # Calcula a porcentagem dos votos nulos
br_porc = (branco * 100) / total # Calcula a porcentagem dos votos brancos
if maria_rodrigues > carlos_luz and maria_rodrigues > nulo and maria_rodrigues > branco:
resultado('Maria Rodrigues', maria_rodrigues, mr_porc, 'Carlos Luz', carlos_luz, cl_porc, nulo, n_porc, branco, br_porc)
break
elif carlos_luz > maria_rodrigues and carlos_luz > nulo and carlos_luz > branco:
resultado('Carlos Luz', carlos_luz, cl_porc, 'Maria Rodrigues', maria_rodrigues, mr_porc, nulo, n_porc, branco, br_porc)
break
else:
print('Eleição cancelada!')
break
else:
print('Opção inválida!')
time.sleep(1) # Aguarda 1 segundo para prosseguir
except KeyboardInterrupt: # Caso o usuário aperte Ctrl + C é exibida a seguinte mensagem
print('\nEleição cancelada!')
if __name__ == '__main__': # Controle de escopo
main()
Explicação:
Eu fiz e postei em um fórum a resposta, fiz utilizando laço de repetição while, conceitos básicos de matemática e lógica.
Abraços :D