题目:请设计一个计票器程序,通过输入有效候选人列表和投票结果,计算出1.每个有效候选人的票数;2.无效票数;3.获得票数最多的人。
注意:如果候选人的票数相同,则通过候选人列表中候选人的顺序决定谁胜出。如果票数中的无效票多于最高票候选人的票数或者票数为空,则无人获胜。
举例:
- 例1:
Input:
Valid Candidates Name ["A","B","C"]
Vote Casted["A","F","A","B","A","B","A","C","E"]
Output:
A=4 B=2 C=1 incalidVotes=2 Winner = A
- 例2:
Input:
Valid Candidates Name["A","C","B"]
Vote Casted["A","F","B","B","B","C","C","C","E"]
Output:
A=1 B=3 C=3 invalidVotes=2 Winner = C
(B、C票数相同,但是候选人列表中C的位置靠前,所以C获胜)
- 例3:
Input:
Valid Candidates Name["A","C","B"]
Vote Casted["R","F","G","B","B","K","L","C","E"]
Output:
A=0 C=1 B=2 invalidVotes=6 Winner = N/A
代码:
def sum_char(string, char):
str1 = list(string)
count = 0
for i in range(len(string)):
if str1[i] == char:
count += 1
return count
def counting_machine(valid_candidates_name, vote_casted):
valid_candidates_name = list(valid_candidates_name) # 候选人列表
vote_casted = list(vote_casted) # 投票情况列表
unless_vote = (list(set(vote_casted).difference(set(valid_candidates_name)))) # 无效列表,取差集获得
vote_casted_str = ','.join(str(i) for i in vote_casted)
vote_casted_list = list(vote_casted_str)
unless_vote_count = len(unless_vote) # 无效票数
vote_count = {} # 统计投票情况字典:候选人:票数,eg.A:5
vote_count_str = ""
winner = [] # 胜出者
winner_index = [] # 胜出者在候选者列表中的index
for item in valid_candidates_name:
vote_count.setdefault(item, sum_char(vote_casted_list, item))
for key, value in vote_count.items():
if value == max(vote_count.values()):
winner.append(key)
for item in winner:
winner_index.append(valid_candidates_name.index(item))
for key, value in vote_count.items():
vote_count_str = str(vote_count_str) + str(key) + "=" + str(value) + " "
winner = valid_candidates_name[min(winner_index)]
if vote_count[winner] == 0 or vote_count[winner] < unless_vote_count:
winner = "N/A"
result = vote_count_str + "invalidVotes=" + str(unless_vote_count) + " " + "Winner = " + winner
print(result)
if __name__ == '__main__':
num1 = int(input())
i = 0
valid = ""
vote = ""
while i != num1:
valid = valid + input()
i = i + 1
i = 0
num2 = int(input())
while i != num2:
vote = vote + input()
i = i + 1
counting_machine(valid, vote)
测试:
- 例1:
输入:
3
A
B
C
9
A
F
A
B
A
B
A
C
E
输出:
- 例2:
输入:
3
A
C
B
9
A
F
B
B
B
C
C
C
E
输出:
- 例3:
输入:
3
A
C
B
9
R
F
G
B
B
K
L
C
E
输出: