Comparing variables in Python

Asked

Viewed 2,703 times

0

Hello, people! I’m starting to learn python and decided to make a program about voting. As I do, for example, to 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))

1 answer

0


A python list can contain an item twice, a set (set) no. Then you can put the votes in a set and check if the list size 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 check. If you just want to identify if there is a tie in the first place, and want to point out which candidates are tied, one option is the following:

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

Algoitmo funcionando

In the same way that I simplified the count of votes using the list order, you can also simplify the count.

print('Votação')
print('Candidatos: ')
print('1-Candidato 1\n2-Candidato 2\n3-Candidato 3\n4-Candidato 4\n5-Candidato 5\n')
votos = [0,0,0,0,0] #5 candidatos, 0 votos cada
voto_nulo=0
while True:  #loop infinito
    resp = str(input('Deseja votar? '))
    if resp == 'Sim': 
        v = int(input('Digite o seu voto: '))
        if v < 5:
            votos[v-1] = votos[v-1]+1
            #Aumenta em 1 o número de votos atual do candidato escolhido
        else:
            voto_nulo += 1
    else: #Quebramos o loop infinito se a resposta for diferente de "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 the values the votes. The comparison would work almost the same, and your candidates may have names, not just ordinal numbers.

  • Shit, I was already giving up on solving this program. Vlw there, mate! Helped me a lot

  • You are welcome. Please accept the answer if it worked.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.