python中 1%2等于什么_穷人和富人就差1%的努力——python模拟社会财富分配游戏

社会资金流是持续而有目的性的,你是否曾想过,为何富人会出现,穷人又为何会出现?穷人和富人究竟如何形成,是否努力就一定能获得成功,赢得更多金钱?今天,让我们用python代码,来模拟一个小社会,看看财富的分配到底是怎样的。

游戏规则:

房间里有100个人,每人都有100元钱,他们在玩一个游戏。每轮游戏中,每个人都要拿出一元钱随机给另一个人,最后这100个人的财富分布是怎样的?

游戏一:没有借贷的社会

1.1 模型假设

每个人初始基金100元

从18岁到65岁,每天玩一次,简化运算按照一共玩17000轮

每天拿出一元钱,并且随机分配给另一个人

当某人的财富值降到0元时,他在该轮无需拿出1元钱给别人,但仍然有机会得到别人给出的钱

游戏一,我们假设分配到财富值为0时可不用出钱,可看做社会前期,没有借贷的日子。

1.2 搭建模型

1.2.1 导入所需函数库

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import os

import time

import warnings

warnings.filterwarnings('ignore')

# 不发出警告

1.2.2 第一轮游戏

第一轮游戏,先不考虑某人财富值会出现0元或以下的情况,这里是100轮内。

person_n = [x for x in range(1,101)]

fortune = pd.DataFrame([100 for i in range(100)], index = person_n)

fortune.index.name = 'id'

# 设定初始参数:游戏玩家100人,起始资金100元

round_r1 = pd.DataFrame({'pre_round':fortune[0],'lost':1})

# 设定第一轮分配财富之前的情况

choice_r1 = pd.Series(np.random.choice(person_n,100))

gain_r1 = pd.DataFrame({'gain':choice_r1.value_counts()})

# 这一轮中每个人随机指定给“谁”1元钱,并汇总这一轮每个人的盈利情况

round_r1 = round_r1.join(gain_r1)

round_r1.fillna(0,inplace = True)

fortune[1] = round_r1['pre_round'] - round_r1['lost'] + round_r1['gain']

# 合并数据,得到这一轮每个人“盈亏”多少钱 → 得到这一轮财富分配的结果

数据展示

1.2.3 第二轮游戏

第二轮游戏,需要考虑当某人财富值降到0元时,他在本轮无需拿出1元,同时可以有机会拿到1元。

person_n = [x for x in range(1,101)]

fortune = pd.DataFrame([100 for i in range(100)], index = person_n)

fortune.index.name = 'id'

# 设定初始参数:游戏玩家100人,起始资金100元

round_r1 = pd.DataFrame({'pre_round':fortune[0],'lost':0})

round_r1['lost'][round_r1['pre_round'] > 0] = 1

# 设定第一轮分配财富之前的情况 → 该轮财富值为0的不需要拿钱给别人

round_players = round_r1[round_r1['pre_round'] > 0]

# 筛选出参与游戏的玩家:财富值>0

choice_r1 = pd.Series(np.random.choice(person_n,len(round_players)))

gain_r1 = pd.DataFrame({'gain':choice_r1.value_counts()})

# 这一轮中每个人随机指定给“谁”1元钱,并汇总这一轮每个人的盈利情况

round_r1 = round_r1.join(gain_r1)

round_r1.fillna(0,inplace = True)

fortune[1] = round_r1['pre_round'] - round_r1['lost'] + round_r1['gain']

# 合并数据,得到这一轮财富分配的结果

1.2.4 构建模型

把前两轮游戏汇总成一个函数模型

def game1(data, roundi):

if len(data[data[roundi - 1] ==0]) > 0:

# 当数据包含财富值为0的玩家时

round_i = pd.DataFrame({'pre_round':data[roundi-1],'lost':0})

con = round_i['pre_round'] > 0

round_i['lost'][con] = 1 # 设定每轮分配财富之前的情况 → 该轮财富值为0的不需要拿钱给别人

round_players_i = round_i[con] # 筛选出参与游戏的玩家:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值