python - 模拟选举
问题描述
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 在每个区域都有以下获胜机会:
- 地区1:87%的获胜机会
- Region2:65%的获胜机会
- 地区3:17%的获胜机会
编写一个程序,模拟一万次选举,并打印出候选人 Awins 的次数百分比。
我从运行上面的代码只得到 1.0 或 0,我曾期望在 0 和 1 之间得到更多的品种,谁能告诉我有什么问题吗?
解决方案
您的代码仅生成三个随机值,然后检查它们 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
推荐阅读
- python - Django log_update() 为参数“用户”获取了多个值
- angular - 无法使用 Angular 客户端在 Spring Security 中注销
- java - GradleConnector:无法从“11.0.5”确定 java 版本
- asp.net-web-api - Signalr 不适用于 Autofac 和 WebAPI + MVC + OWIN
- file - 为什么 heroku 应用程序正在为我的源文件提供服务?
- java - Java 剪贴板在机器人执行期间未更新
- javascript - 如何实现 zoom.js 到 turn.js?
- python - 使用 Reportlab 为 PDF 设置作者、标题和主题
- sql - 使用 Laravel/Eloquent 进行嵌套搜索/过滤
- pyspark - 谷歌云笔记本 - Pyspark:java.lang.ClassNotFoundException:找不到数据源:xml