Je travaille sur un programme pour déterminer si les votes d'une élection sont valides et compte les votes pour trouver un gagnant. Prévenir, je suis assez nouveau pour python et le codage en général. Actuellement, je lis les votes d'un fichier texte séparé par des virgules - chaque ligne est un bulletin unique, et chaque vote dans le bulletin de vote doit être vérifié pour la validité, où un vote valide est un entier positif et il y a le même nombre de voix puisqu'il y a des candidats (il y a 5 candidats). Les votes seront normalisés par une autre fonction.Ne pas obtenir la sortie requise de la compréhension de la liste
Il existe une autre fonction qui lit les noms de candidats dans une liste - l'index de vote correspond à l'index candidat lors du comptage des votes. La case à cocher pour déterminer la validité a quelques exceptions, par exemple, les votes vierges sur un bulletin de vote sont convertis en zéro pour ce candidat, et les bulletins avec plus de 5 votes sont entièrement ignorés.
Voici la partie du code qui lit les bulletins de vote.
def getPapers(f, n):
x = f.readlines() #read f to x with \n chars
strippedPaper = [line.strip("\n") for line in x] #stores ballot without \n chars.
print(strippedPaper)#print without \n chars
print()
strippedBallot = [item.replace(' ', '') for item in strippedPaper] #remove whitespace in ballots
print(strippedBallot) #print w/out white space
print()
#Deal with individual ballots
m = -1
for item in strippedBallot:
m += 1
singleBallot = [item.strip(',') for item in strippedBallot[m]]
print(singleBallot)
getPapers(open("testfile.txt", 'r'), 5)
Contenu de testfile.txt
1,2, 3, 4
,23,
9,-8
these people!
4, ,4,4
5,5,,5,5
C'est la sortie
#Output with whitespace.
['1,2, 3, 4 ', '', ', 23, ', '9,-8', 'these people!', '4, ,4,4', '5,5,,5,5']
#Output with whitespace removed.
['1,2,3,4', '', ',23,', '9,-8', 'thesepeople!', '4,,4,4', '5,5,,5,5']
#Output broken into single ballots by singleBallot.
['1', '', '2', '', '3', '', '4']
[]
['', '2', '3', '']
['9', '', '-', '8']
['t', 'h', 'e', 's', 'e', 'p', 'e', 'o', 'p', 'l', 'e', '!']
['4', '', '', '4', '', '4']
['5', '', '5', '', '', '5', '', '5']
Chaque seul vote sera transmis à une autre fonction pour vérifier la validité et la normalisation . Le problème est la façon dont chaque bulletin a été formaté après la sortie, par exemple ['1,2,3,4'] est converti en ['1', '', '2', '', '3', '', ' 4 '] - première question est de savoir comment puis-je éliminer les virgules de la liste sans créer d'espaces vides? Ces espaces seront pris en compte lors de la vérification des votes, et le bulletin de vote sera invalidé, car il a plus de voix que les candidats! (les espaces vides sont convertis en un vote de zéro).
Ensuite,, ['', '2', '3', ''] doit être lu comme ['', '23', ''] ou compter 0, 2, 3, 0 au lieu de 0, 23, 0, et le décompte final des votes sera faux, et ['9', '', '-', '8'] devrait se lire comme ['9', '', '-8'] ou '-', '8' se lira comme deux votes au lieu d'un vote invalide de -8.
Existe-t-il une meilleure méthode que celle que j'utilise pour extraire des éléments séparés par des virgules, ce qui ne créera pas d'espaces vides et ne divisera pas correctement les éléments de la liste?
Ajouter le contenu de votre testfile.txt à la question. –
Bien sûr. Je l'ai ajouté entre les sections d'entrée et de sortie. –