You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Plurality程序:如何输出得票最多的候选人?

修正Python版CS50 Plurality投票程序

问题分析

你的代码核心错误是max(vote_count.keys())——这是对候选人名字按字符串字典序取最大值,和得票数量完全无关,所以会输出错误结果。另外还有两个潜在问题:未处理无效选票、未支持并列胜者的情况。

修正后的代码

from collections import Counter

candidates = ["Bob", "Steve", "Ross"]
# 简化候选人列表打印
print(" ".join(candidates))

v = []
voters = int(input("\nNumber of voters: "))
for _ in range(voters):
    vote = input("Vote: ").strip().capitalize()
    # 只计入有效选票
    if vote in candidates:
        v.append(vote)
    else:
        print(f"警告:'{vote}' 不是有效候选人,选票不计入")

vote_count = Counter(v)
print("\n得票统计:", vote_count)

# 获取最高得票数,无有效票时默认0
max_vote_num = max(vote_count.values(), default=0)
# 筛选出所有得票等于最高票数的候选人
winners = [name for name, count in vote_count.items() if count == max_vote_num]

# 输出结果
if len(winners) == 1:
    print(f"\n胜者是:{winners[0]}")
else:
    print(f"\n并列胜者:{'、'.join(winners)}")

关键修正点

  • 正确计算最高得票:用max(vote_count.values())获取真实最高票数,再匹配对应候选人,彻底解决原代码的逻辑错误。
  • 处理无效选票:添加判断逻辑,仅当选票属于候选人列表时才计入,避免无效票干扰统计。
  • 支持并列胜者:如果多个候选人得票相同且最高,会全部输出,符合投票程序的合理逻辑。
  • 代码细节优化:用" ".join(candidates)简化打印;用_代替未使用的循环变量;添加strip()去除输入前后空格,避免因空格导致的误判。

内容的提问来源于stack exchange,提问作者Mayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 09:00:59