Compare variables in Python

0

Hello, people! I am starting to learn python and I decided to do a voting program. How do I, for example, compare the results of the votes and print that there was a tie between two candidates?

print('Votação')
print('Candidatos: ')
print('1-Candidato 1\n2-Candidato 2\n3-Candidato 3\n4-Candidato 4\n5-Candidato 5\n')
cand1 = 0
cand2 = 0
cand3 = 0
cand4 = 0
cand5 = 0
cont: int = 0
v = 0
venc = 0
voto_nulo = 0
resp = 'Sim'
while resp == 'Sim':
     resp = str(input('Deseja votar? '))
     if resp == 'Sim':
        cont += 1
        v = int(input('Digite o seu voto: '))
        if (v == 1) or (v == 2) or (v == 3) or (v == 4) or (v == 5):
            if v == 1:
               cand1 += 1
            elif v == 2:
                cand2 += 1
            elif v == 3:
                cand3 += 1
            elif v == 4:
                cand4 += 1
            elif v == 5:
                cand5 += 1
        else:
            voto_nulo += 1
else:
     print('\nFim da votação')
if (cand1 > cand2) and (cand1 > cand3) and (cand1 > cand4) and (cand1 > cand5):
    venc = 'Candidato 1'
if (cand2 > cand1) and (cand2 > cand3) and (cand2 > cand4) and (cand2 > cand5):
     venc = 'Candidato 2'
if (cand3 > cand1) and (cand3 > cand2) and (cand3 > cand4) and (cand3 > cand5):
     venc = 'Candidato 3'
if (cand4 > cand1) and (cand4 > cand2) and (cand4 > cand3) and (cand4 > cand5):
     venc = 'Candidato 4'
if (cand5 > cand1) and (cand5 > cand2) and (cand5 > cand3) and (cand5 > cand4):
    venc = 'Candidato 5'
print('\nO total de votos foi: {}'.format(cont))
print('Votos nulos: {}'.format(voto_nulo))
print('O candidato 1 obteve {} votos'.format(cand1))
print('O candidato 2 obteve {} votos'.format(cand2))
print('O candidato 3 obteve {} votos '.format(cand3))
print('O candidato 4 obteve {} votos'.format(cand4))
print('O candidato 5 obteve {} votos'.format(cand5))
print('O candidato vencedor foi ---> {}'.format(venc))
    
asked by anonymous 04.05.2018 / 18:11

1 answer

0

A list in python can contain an item twice, a set ( set ) does not. Then you can put the votes in a set and check if the size of the list decreases.

len([1,1,2,3])
>>> 4
len(set([1,1,2,3]))
>>>3

The comparison would be made as follows

if len(set([cand1,cand2,cand3,cand4,cand5])) < 5:
    print("Existe pelo menos um empate")

Now just print the votes and check the tie. This is not a good solution as it will still depend on a person to do the verification. If you just want to identify if there is a tie in the first place, and you want to point out which candidates are tied, one option is as follows:

concorrentes = [cand1,cand2,cand3,cand4,cand5]  #lista com os votos de todos os candidatos
ganhador = max(concorrentes)  #maior número de votos (não sabemos quem)
n = concorrentes.count(ganhador)  #quantas vezes o maior número de votos aparece na lista
for i in range(5):
    if concorrentes[i] == ganhador:  #Este candidato é vencedor
        if n == 1:  #Há apenas um vencedor
            print("O vencedor é o candidato {} com {} votos".format(concorrentes[i]
        else:  #Há multiplos vencedores
            print("O candidato {} está empatado com {} votos".format

JustasIsimplifiedvotecountingusingthelistorder,youcanalsosimplifycounting.

print('Votação')print('Candidatos:')print('1-Candidato1\n2-Candidato2\n3-Candidato3\n4-Candidato4\n5-Candidato5\n')votos=[0,0,0,0,0]#5candidatos,0votoscadavoto_nulo=0whileTrue:#loopinfinitoresp=str(input('Desejavotar?'))ifresp=='Sim':v=int(input('Digiteoseuvoto:'))ifv<5:votos[v-1]=votos[v-1]+1#Aumentaem1onúmerodevotosatualdocandidatoescolhidoelse:voto_nulo+=1else:#Quebramosoloopinfinitosearespostafordiferentede"Sim"
        print('\nFim da votação')
        break

ganhador = max(votos)  #maior número de votos (não sabemos quem)
n = votos.count(ganhador)  #quantas vezes o maior número de votos aparece na lista
for i in range(5):
    if votos[i] == ganhador:
        if n == 1:
            print("O vencedor é o candidato {} com {} votos".format(i+1,ganhador))
        else:
            print("O candidato {} está empatado com {} votos".format(i+1,ganhador))

print('\nO total de votos foi: {}'.format(sum(votos)+voto_nulo))
print('Votos nulos: {}'.format(voto_nulo))
for i in range(5):
    print('O candidato {} obteve {} votos'.format(i+1,votos[i]))

A more elegant solution would be to create a dictionary with the keys being the candidates, and values the votes. The comparison would work almost the same, and your candidates may have names, not just ordinal numbers.

    
11.05.2018 / 19:46