if __name__ == '__main__':
society = Society()
society.do_humans_meeting()
society.print_info()
在 .py
文件的末尾,添加如上的代码,然后运行整个 .py 文件,即可。
Python 中有不少 __
包裹的属性,有全局性的,比如 __name__
、__file__
,也有常是针对于某个 class(类)
的,比如 __init__
、__dict__
,__eq__
等等,都有其特别用处,本课程后面也会介绍到。
__name__
比较常用,如果当前 .py
是直接运行的,其值为 __main__
。一个 .py
也并不总是被直接运行的,也可能是作为 package/module 在其它地方被 import
。
鹰鸽博弈模拟的结果本身有不小的随机性,下面是一个运行的结果,仅供参考:
program costed seconds: 3.29087400436
init status: total 50, 38.0% are pigeon; money: pigeons 95, eagles 155
last status: total 22, 95.5% are pigeon; money: pigeons 5521076316, eagles 2403530
death: 50.0 humans, 56.0% dead, 14.0% are pigeon
写代码的时候,我们要尽可能让代码处于一个相对可变动的状态,从某种角度来说,是 可配置化
。
在具体工作中,如果作为程序员承接了一个项目的开发后,实现的过程中,其代码应该倾向于有较高的适应性,未来后续产品经理或者其他需求方,调整需求甚至产生新的需求,可能只需要在旧代码中改几个参数就可以了。
这个 可配置化
也有个 度,过分了,会让代码变得复杂,但如果没有这方面灵活性的考虑,又会让代码变得很死板。不过,在一些场合下,我们为了快速实现一些效果,临时代码而已,就不讲究了。
我们模拟鹰鸽博弈
的过程中,预先设定了一些参数,这些参数会对全局的结果有非常大的影响。
比如 INIT_MONEY
的数值比较大,那么相对不容易破产
而进入死亡的状态
。还有比如下面所示,初始 50 人
,但每人平均 10000 次
交锋,人少而交锋次数多,随着一些人的死亡,总的交锋次数 50 x 10000
并不会减少,意味着两两交互的次数实际上是非常高的,于是最终会进入鸽子居多数
的美好时代。
INIT_HUMAN_NUMBER = 50
MILESTORE_TIMES = 10000
INIT_MONEY = 5
PER_HUMAN_COST_BASE = 10
简而言之,你可以根据自己的想法,去调整这些参数,然后看最终的模拟结果如何。
当然,数值也不要过大,不然整个程序的运行时间会非常长。