首页 > 解决方案 > 模拟选举

问题描述

import random

def trial_election(win_chance):
  if random.random() < win_chance:
    return 'win'
  else:
    return 'lose'

region_1 = trial_election(0.87)
region_2 = trial_election(0.65)
region_3 = trial_election(0.17)
  
tally = 0
for trial in range(10_000):
  if region_1 == 'win':
    if region_2 == 'win':
      tally+=1
    elif region_3 == 'win':
      tally+=1
  elif region_2 == 'win':
    if region_3 == 'win':
      tally+=1
    
print(f'The winning percentage is {tally/10_000}')

对这段代码的请求是这样的:假设有两个候选人,CandidateA 和 CandidateB,正在一个有三个投票区域的城市竞选市长。最近的民意调查显示,CandidateA 在每个区域都有以下获胜机会:

编写一个程序,模拟一万次选举,并打印出候选人 Awins 的次数百分比。

我从运行上面的代码只得到 1.0 或 0,我曾期望在 0 和 1 之间得到更多的品种,谁能告诉我有什么问题吗?

标签: pythonrandomsimulate

解决方案


您的代码仅生成三个随机值,然后检查它们 10k 次,您希望在循环内绘制值,例如:

tally = 0
for trial in range(10_000):
  region_1 = trial_election(0.87)
  region_2 = trial_election(0.65)
  region_3 = trial_election(0.17)
  if region_1 == 'win':
    if region_2 == 'win':
      tally+=1
    elif region_3 == 'win':
      tally+=1
  elif region_2 == 'win':
    if region_3 == 'win':
      tally+=1

推荐阅读