大洋彼岸的大选,简直在国内是春晚一样的存在。
看到朋友圈有预测大选比分的,突然好奇,最终比分会是如何,出于吃瓜群众的好奇,敲了如下代码,博自己一乐,也让自己有点参与感。
先简单介绍下如何算赢得大选:
选举人制度:根据人口不同,每个州的选举人数量也不同,人数越多,选举人越多。
赢家通吃:以州为单位,获得票数更多的赢家,通吃这州的所有选举人票。
最终选举人票多的赢得大选胜利(所以不用关注支持率,只看候选人的选举人票数即可)。
一共538张选举人票,谁到270谁就赢了。
我看时候是238:213,拜登领先,如果只论摇摆州(浅色)的胜负,那么如下代码成立(深色的有反转则代码失效)。
#!/usr/bin/python3 # -*- coding:utf-8 -*- """ @author: lms @file: predict_votes_results.py @time: 2020/11/4 23:29 @desc: """ import itertools def predict(): votes = [3, 6, 10, 15, 16, 16, 20] votes_len = list(map(str, list(range(len(votes))))) # 票的单个字符序列 res = {} for repeat in range(len(votes) + 1): for i, val in enumerate(list(itertools.combinations(''.join(votes_len), repeat))): trump_votes = 213 # 川普初始票 biden_votes = 238 # 拜登初始票 v = [int(i) for i in val] a_vote = [votes[int(i)] for i in v] # a组合票 b_vote = [votes[int(i)] for i in votes_len if int(i) not in v] # b组合票(剔除单字符中的a组合) # print(a_vote, b_vote) a_sum = sum(a_vote) # a组合票和 b_sum = sum(b_vote) # b组合票和 trump_votes += a_sum # 川普最终得票 biden_votes += b_sum # 拜登最终得票 res[trump_votes] = biden_votes # 双方组合去重 for t, b in res.items(): if t > b: winner = 'Trump' else: winner = 'Biden' print(f'【{winner}】Win! Biden: {b} Trump:{t}') print(res) if __name__ == '__main__': predict()