不知道有多少人被这张头图骗了:)原因是这样的。上周有同学问小编。代码,感觉自己可以写。如果不看,我可能会七七八八地写出来,但是一旦我独立写了一个程序,我就觉得无从下手。其实,这是很正常的。刚开始学写代码的时候,我是跟着别人的套路,写下来的。我看到的套路很少,很难形成自己的套路。这个题目的可能性很小,可以通过大量的练习找到自己的套路。恰好临近春节,各家公司都会举办一些抽奖活动。小编今天就来说说。如果要写一个简单的抽奖程序,小编是怎么写的。分析需求,我们先梳理一下思路。目标是什么?目标是写一个抽奖程序,那么抽奖程序的核心是什么?当然,如何判断一个人中了彩票。那么你怎么知道有人中了彩票呢?是否可以通过随机函数进行操作?获胜方法是循序渐进。我们先用random函数来判断是否中奖了。代码能不能这样写:importrandom#判断中奖函数deflottery():flag=random.randint(0,9)ifflag<2:returnTrueelse:returnFalse首先我们得到0到9之间的数字随机正整数(这里不讨论随机是否真的随机,狭义上可以认为是随机),如果中奖率为20%,我们可以认为小于2的数为中奖,其余为不中奖.然后中奖返回True,没中奖返回False。下面我们添加一个入口测试函数,测试一下上面的代码是否可以正常运行,中奖率是否可以保持在20%左右。if__name__=='__main__':#中奖次数a=0#无中奖次数b=0foriinrange(1000000):if(lottery()):a+=1else:b+=1print('total中奖:',a,',未中奖:',b)执行结果:总中奖:200145,未中奖:799855以上测试一共循环了100万次,执行时间大概2~3秒,而且速度还是挺快的。可见中奖结果确实接近20%左右。动态胜率就到此为止了吗?当然不是,这仅仅是个开始。如果这时候老板说,你的概率不能调整,需要动态调整胜率。活动开始时中奖率应该很高,但随着时间的推移,中奖率会降低。这时候怎么回事,我傻眼了。由于中奖率应该是可调的,所以我们无法在程序中固定中奖率。这个胜率需要有个地方存起来,我们每次做随机的时候就把它拿出来。简单易行的方法是将中奖率放在数据库中,或者放在缓存服务中,这要看实际业务场景。通常,技术选择基于估计的访问压力。如果压力不是特别大,放在数据库里也是可以的。如果并发比较高,建议放在缓存中。下面写一个从数据库获取中奖概率的方法(为了直观展示,小编直接使用Mysql数据库作为数据存储),先看数据库中的数据:简单设计了一张表,里面有有意义的字段它有两种,一种用作中奖率的分子部分,另一种用作中奖率的分母部分。分母部分最好设置为100、1000、10000,这样会更容易计算中奖率。defget_lottery_rate():conn=pymysql.connect(host='localhost',user='root',password='password',database='test',charset='utf8mb4')try:sql='SELECTfenzi,fenmuFROMrate'cursor=conn.cursor()cursor.execute(sql)result=cursor.fetchone()returnresultexceptExceptionasex:print(ex)finally:conn.close()运行该方法的测试结果如下如下:(10,100)可以看出我们得到了一个元组,元组的内容就是我们从数据库中取出的分子和分母。我们把之前抽奖的方法改一下,从数据库中获取中奖率。修改后的代码如下:deflottery():rate=get_lottery_rate()flag=random.randint(1,rate[1])ifflag
