如何用Python编写一个值得收藏的简单彩票程序

电脑杂谈  发布时间:2020-05-05 06:08:49  来源:网络整理

抽奖比例设置_怎么设置抽奖箱内比例_微博抽奖抽奖设置

我不知道有多少人被这张照片欺骗: )

原因是这样的. 上周,一些同学问小编,并看了小编的示例代码以敲打该代码. 我觉得我会写. 如果我不阅读,可能是我写的. 但是一旦我独立编写了程序,便感到无法上手.

实际上,这是很正常的. 当我第一次开始学习编写代码时,我遵循了其他人的例程来写下来. 几乎没有例程可供阅读. 很难形成我自己的例程. 这和做数学问题一样. 如果您想了解所有问题,则这种可能性很小,并且可以通过大量练习找到自己的套路.

这是新年. 所有公司都会参加一些彩票活动. 小编今天将讨论这个问题. 如果我想编写一个简单的彩票程序,编辑器将如何编写它?

注意: 无论您是从事Python还是业余爱好,请记住: 项目开发经验始终是核心. 如果您没有2020年最新的Python入门级高级实战视频教程,则可以转到编辑器的Python交流中心. 裙子: 齐一你可以在依九,七,七,五和五(数字同音)的转换下找到它,有许多新的python教程项目,还可以向旧驱动程序寻求建议!

让我们先整理一下想法,目标是什么?

目标是编写彩票程序,那么彩票程序的核心是什么?

当然,如何判断一个人赢了. 那么如何判断一个人获胜呢?

是否可以使用随机函数进行操作?

首先,我们首先使用随机函数来确定是否获胜. 代码可以编写如下吗?

import random
# 判断中奖函数
def lottery():
    flag = random.randint(0, 9)
    if flag < 2:
        return True
    else:
        return False复制代码

首先,如果获胜率为20%,我们将得到一个介于0到9之间的随机正整数(我不讨论随机是否真的是随机的,从狭义上讲,我们可以将其视为随机). ,我们可以认为少于2的数字是中奖者,其余的都不是中奖者. 然后在获胜后返回True,如果没有获胜,则返回False.

抽奖比例设置_怎么设置抽奖箱内比例_微博抽奖抽奖设置

我们添加了一个进入测试功能来测试上述代码是否可以正常运行,以及中奖率是否可以保持在20%左右.

if __name__ == '__main__':
    # 中奖次数
    a = 0
    # 没有中奖次数
    b = 0
    for i in range(1000000) :
        if (lottery()):
            a += 1
        else:
            b += 1
    print('共计中奖:', a, ',未中奖:', b)复制代码

执行结果:

共计中奖: 200145 ,未中奖: 799855复制代码

以上测试已经循环了100万次,执行大约需要2到3秒. 速度相当快. 可以看出,获胜的结果确实接近20%.

在这里吗?当然不是,这仅仅是开始.

如果老板此时说,您的概率无法调整,则需要使获胜率动态可调. 活动开始时获胜率较高,获胜率会随着时间下降.

这是怎么回事,傻眼了.

由于中奖率需要调整,因此我们的中奖率无法在程序中固定. 该获胜率需要存储在一个地方,每次随机取胜率都会被取出.

一种简单的方法是将此胜出率放入或缓存服务中,这取决于实际业务场景. 通常,技术选择基于估计的访问压力. 如果压力不是特别高,则可以将其放置在中. 如果并发性相对较高,建议将其放入缓存中.

让我们写一个方法来获取中奖的概率(为了直观显示,这里的编辑器直接将Mysql用作数据存储),首先查看中的数据:

设计一个包含两个有意义字段的表非常简单,一个字段用于赢率的分子,一个字段用于赢率的分母. 分母部分应设置为100、1000、10000,以便更好地计算获胜率.

def get_lottery_rate():
    conn = pymysql.connect(host='localhost', user='root', password='password', database='test', charset='utf8mb4')
    try:
        sql = 'SELECT fenzi, fenmu FROM rate'
        cursor = conn.cursor()
        cursor.execute(sql)
        result = cursor.fetchone()
        return result
    except Exception as ex:
        print(ex)
    finally:
        conn.close()复制代码

微博抽奖抽奖设置_怎么设置抽奖箱内比例_抽奖比例设置

运行此方法的测试结果如下:

(10, 100)复制代码

如您所见,我们获得了一个包含从中提取的分子和分母的元组.

我们更改了前期彩票的方法,以便从中获取中奖率. 修改后的代码如下:

def lottery():
    rate = get_lottery_rate()
    flag = random.randint(1, rate[1])
    if flag < rate[0]:
        return True
    else:
        return False复制代码

也运行上述测试方法. 这里要注意,因为我们现在是从中获取数据,因此每次执行该方法时,都必须添加链接的建立和销毁. 建议将周期数修改为少于1000,否则将被执行时间太长了.

将循环数编辑为1000后,执行结果如下:

共计中奖: 92 ,未中奖: 908复制代码

因此,在这里,我们可以修改中的数据以实时操作获胜率. 当然,可以使用连接池之类的技术来优化上述缓慢的问题.

就这样结束了吗?不,不,然后我们增加需求.

现在,我们只能知道每次都没有胜利,只有一个奖项,但是现在我们要成为三个奖项,例如: 一等奖,二等奖抽奖比例设置,三等奖,我们应该怎么做?

对以前的彩票抽奖方法的此更改有点大. 首先抽奖比例设置,我们首先向添加其他两个奖励配置:

最好使三个奖项的分母保持一致,否则后续的计算会增加复杂性.

怎么设置抽奖箱内比例_微博抽奖抽奖设置_抽奖比例设置

修改我们获取配置的方式:

def get_lottery_rate():
    conn = pymysql.connect(host='localhost', port = 3306, user='root', password='password', database='test', charset='utf8mb4')
    try:
        sql = 'SELECT * FROM rate order by id asc '
        cursor = conn.cursor()
        cursor.execute(sql)
        result = cursor.fetchall()
        return result
    except Exception as ex:
        print(ex)
    finally:
        conn.close()复制代码

测试调用后的结果如下:

((1, 10, 100), (2, 5, 100), (3, 1, 100))复制代码

我们需要做的第一件事就是将这种配置并入我们以前的取胜方法中,而无需费力,只需添加代码:

# 判断中奖函数
def lottery():
    config = get_lottery_rate()
    flag = random.randint(1, config[0][2])
    if flag <= config[0][1]:
        return 1
    elif flag > config[0][1] and flag <= (config[1][1] + config[0][1]):
        return 2
    elif flag > (config[1][1] + config[0][1]) and flag <= (config[2][1] + config[1][1]):
        return 3
    else:
        return 0复制代码

接下来,修改我们的测试代码:

def main():
    # 一等奖中奖次数
    a = 0
    # 二等奖中奖次数
    b = 0
    # 三等奖中奖次数
    c = 0
    # 未中奖次数
    d = 0
    # 循环次数
    e = 0
    for i in range(1000):
        e += 1
        print('当前循环次数:', e)
        result = lottery()
        print('当前中奖结果:', result)
        if (result == 1):
            a += 1
        elif (result == 2):
            b += 1
        elif (result == 3):
            c += 1
        else:
            d += 1
    print('一等奖中奖:', a, ',二等奖中奖次数:', b, ',三等奖中奖次数:', c, ',未中奖次数:', d)复制代码

调用我们的测试方法:

if __name__ == '__main__':
    main()复制代码

编辑器的运行结果如下:

我们在这里还没有完成,我们可以增加需求. 会员和会员. 如果不同的会员级别要求不同的获胜率,这是正常的. 一方面,编辑仍然清楚地记得大型互联网公司的代码中的注释: “脆弱的VIP(事件发送的那种)”.

我们假设会员的中奖率为总赢率的100%,黄金会员的中奖率为总赢率的50%,银会员的中奖率为总赢率的20%率.

微博抽奖抽奖设置_抽奖比例设置_怎么设置抽奖箱内比例

最简单的方法是直接判断最外层成员的获胜率. 我不知道你的想法.

小编在这里给出了自己的解决方案:

# 判断会员等级中奖率过滤
# 会员等级 1.白银会员 2.黄金会员 3. 会员
def vip_lottery(level):
    rate = random.randint(1, 10)
    # 如果是会员,直接进入抽奖函数
    if level == 3:
        return lottery()
    # 如果是黄金会员, 50% 概率进入抽奖函数
    elif level == 2:
        if rate <= 5:
            return lottery()
        else:
            return 0
    # 如果是白银会员, 20% 概率进入抽奖函数
    elif level == 1:
        if rate <= 2:
            return lottery()
        else:
            return 0
    # 如果是其他,直接返回未中奖
    else:
        return 0复制代码

我们添加了一种新的测试方法来增加成员资格过滤:

# 会员制中奖测试方法
def test_vip():
    print('请输入您当前的会员等级:1.白银会员 2.黄金会员 3. 会员')
    level = input()
    result = vip_lottery(int(level))
    if (result == 1):
        print('恭喜您中了一等奖')
    elif (result == 2):
        print('恭喜您中了二等奖')
    elif (result == 3):
        print('恭喜您中了三等奖')
    else:
        print('未中奖,谢谢惠顾')复制代码

在我们的输入函数中调用此方法:

if __name__ == '__main__':
    test_vip()复制代码

最终测试结果如下:

编辑的角色还可以,您可以直接获得三等奖.

那么,在这里,一个简单的彩票程序完成了吗?实际上,可以在以后添加. 如果每个奖项都有限制,并且可以随时调整限制等,我将不在此处列出.

整体代码稍长,我不会发布. 将其上传到代码仓库. 有兴趣的学生应该亲自访问它.

最后一点: 无论您是从事Python还是业余爱好,请记住: 项目开发经验始终是核心. 如果您没有2020年最新的Python入门级高级实用视频教程,则可以转到编辑器的Python交流中心. 裙子: 七个您可以在以yiyi 9.7巴和五个(数字同音)的转换下找到它,有许多新的python教程项目,还可以向旧驱动程序寻求建议!

本文中的文字和图片来自互联网以及您自己的想法. 它们仅用于学习和交流目的,没有任何商业用途. 版权属于原始作者. 如有任何疑问,请及时与我们联系以进行处理.


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-199300-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...