import csv
import os
main_csv = os.path.join("..","Pypoll", "Resources", "election_data.csv")
dataFile = os.path.join("BallotAnalysis.txt")
totalBallots = 0
candidates = []
ballots = []
with open(main_csv) as csvFile:
csvReader = csv.reader(csvFile, delimiter=",")
csvHeader = next(csvFile)
for row in csvReader:
totalBallots += 1
if row[2] not in candidates:
candidates.append(row[2])
ballots[row[2]] = 1
else:
ballots[row[2]] += 1
voteOutput = ""
for ballots in candidates:
votes = candidates.get(ballots)
votePCT = (float(votes) / float(totalBallots)) * 100.00
voteOutput += f"\t{candidates}: {votePCT:.2f}% \n"
print(voteOutput)
data = (
f"\nElection Results\n"
f"_____________________________________\n"
f"\tTotal Votes: {totalBallots}\n"
f"\t \n"
)
print(data)
with open(dataFile, "w") as textFile:
textFile.write(data)
我试图为所有 3 名候选人投票,但总是遇到错误: 类型错误:列表索引必须是整数或切片,而不是 str
它在第 22 行,但我猜它会出现在所有这些选票上[行[2]] = 1。我需要修复什么才能获得我想要的输出?
TypeError:列表索引必须是整数或切片,而不是 str
您使用
ballots
作为 list
类型,并且要在“选票”中设置新变量,您需要使用整数。例如,ballots[1] = 1
ballots = []
with open(main_csv) as csvFile:
...
for row in csvReader:
...
ballots[row[2]] = 1
else:
ballots[row[2]] += 1
...
在这种情况下,您可以将 row[2] 转换为整数。