我正在制定一项计划,以确定选举中的投票是否有效,并计算选票以找到胜利者。预警,我对python和编码很新。
目前,我正在阅读逗号分隔的文本文件中的投票 - 每一行都是一张选票,并且需要检查投票中的每个投票的有效性,其中有效投票是任何正整数且金额相同有候选人的选票(有5名候选人)。投票将通过其他功能进行标准化。
还有另一个函数将候选名称读入列表 - 投票索引在计票时与候选索引匹配。用于确定有效性的rubrick有一些例外,例如,对该候选人的投票空白投票被转换为零,并且完全忽略超过5票的投票。
以下是阅读选票的代码部分。
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)
testfile.txt的内容
1,2, 3, 4
,23,
9,-8
these people!
4, ,4,4
5,5,,5,5
这是输出
#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']
每个单独的投票将被传递给另一个函数以检查有效性和标准化。问题是输出后每个选票的格式化方式,例如['1,2,3,4']被转换为['1','','2','','3','',' 4'] - 第一个问题是如何在不创建空格的情况下消除列表中的逗号?在检查投票时将计算这些空格,并且投票将因为票数多于投票而无效候选人! (空格转换为零投票)。
其次,,['','2','3','']需要读作['','23','']或者它将计为0,2 ,3,0而不是0,23,0,最终的投票结果将是错误的,['9','',' - ','8']应该读作['9','',' -8']或' - ','8'将被视为两票而不是一票无效-8。
是否有比我用于检索逗号分隔项目更好的方法,这不会创建空格并错误地分解列表项?
答案 0 :(得分:0)
假设您的输入文件如下:
-bash-4.1$ cat testfile.txt
1,2, 3, 4
, 23,
9,-8
these people!
4, ,4,4
5,5,,5,5
你的程序简化了一点:
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'))