0

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?

+0

Ajouter le contenu de votre testfile.txt à la question. –

+0

Bien sûr. Je l'ai ajouté entre les sections d'entrée et de sortie. –

Répondre

0

En supposant que votre fichier d'entrée est comme ci-dessous:

-bash-4.1$ cat testfile.txt 
1,2, 3, 4 
, 23, 
9,-8 
these people! 
4, ,4,4 
5,5,,5,5 

Votre programme simplifié un peu:

def getPapers(f): 
    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.split(",") for item in strippedPaper] #remove whitespace in ballots 
    print(strippedBallot) #print w/out white space 
    print() 

    for item in strippedBallot: 
     print(item) 

getPapers(open("testfile.txt", 'r')) 
+0

Cela semble aider, la sortie est maintenant dans un format qui rendra la vérification de la validité plus facile. –

+0

@CamAtkinson Veuillez répondre à votre question si vous avez trouvé ce que vous cherchez. –