前几天看了一本书名字叫《慢思考》,书中的最后提到了自我奖励和惩罚,主要说的时用奖励来促进自己完成计划,完成自我的约束,有惩罚来约束自己的过错。
其实类似这样的奖励和惩罚在很多书中都有提到,这次又一次的遇到这个提法,我突然产生一个想法:
我要用python来实现一个随机奖励的小程序。
为什么要随机呢?因为有相关研究表明,随机的奖励比固定的奖励更加的吸引人,这也是游戏中随机奖励的根本原因。
经过这两天断断续续的编码,在今天我把这个功能实现了,现在分享给大家。
先看一下我的奖励文件,我把所有的奖励内容都放在了一个json文件里,大概的内容如下,大家可以自行修改想要的奖励:
{"喝一杯星巴克咖啡":10,
"买一本喜欢的书":10,
"玩一次炉石传说":10,
"玩一次巫师3":8,
"买游戏《血污:夜之仪式》":3,
"个人奖励金钱账户增加若干":120,
"个人奖励时间账户增加若干":120,
"看一部电影":2,
"15分钟无目的放松":10,
"买一双鞋":2}
上面左边都是奖励内容,右边是奖励的权重,权重越大,随机先出的概率就越大,注意有两个奖励权重特别大,分别是“个人奖励金钱账户增加若干” 和"个人奖励时间账户增加若干" 这个其实就是给自己一定的金钱或时间奖励。
最后主程序:
import random
import json
import time
import openpyxl
def lottery():
filepath=r"个人奖励清单.json"
with open(filepath,encoding='utf-8') as f:
data_dict = json.load(f)
population = [i for i in data_dict.keys()]
weights = [j for j in data_dict.values()]
t=random.choices(population,weights,k=1)
add_money,add_time = 0,0
reward_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
reward = ""
if t[0]=="个人奖励金钱账户增加若干":
add_money = round(random.normalvariate(15,5))
reward = f"个人奖励金钱账户增加{add_money}元"
elif t[0]=="个人奖励时间账户增加若干":
add_time = round(random.normalvariate(15,5))
reward = f"个人奖励时间账户增加{add_time}分钟"
else:
reward = t[0]
return reward_time,reward,add_time,add_money
def save(reason,reward_time,reward,add_time,add_money,res_excel):
wb = openpyxl.load_workbook(res_excel)
ws = wb.active
ws.append([reason,reward_time,reward,add_time,add_money])
wb.save(res_excel)
if __name__ == '__main__':
res_excel = r'个人奖励记录.xlsx'
str = input("是否要进行奖励::")
if str.upper()=='Y':
reason = input("请输入奖励原因:")
reward_time,reward,add_time,add_money=lottery()
save(reason,reward_time,reward,add_time,add_money,res_excel)
else:
exit("输入异常,程序正常退出")
最终的奖励结果我保存在excel里,大致格式如下:
本来准备传个附件的,结果没找到地方,就直接贴图了。
ps:这个小程序虽然简单,但是确是我最近写的最满意的一段代码了,希望以后我能每天给自己奖励。