请以此公式“单人最小金额为0.01,最大金额为[(总金额-总使用的金额)/总红包数量]*2构建出一个微信抢红包模拟器。提示:随机数可导入random获得,且UI界面不重要。并防止用户输入无效信息导致

请以此公式“单人最小金额为0.01,最大金额为[(总金额-总使用的金额)/总红包数量]*2构建出一个微信抢红包模拟器。
提示:随机数可导入random获得,且UI界面不重要。并防止用户输入无效信息导致程序报错

解析:

# 导入random,easygui,pygame
import random as random
import easygui as easygui
# 由于Mac.Os系统中无法在easygui提示框中输入中文,所以在控制台打印需要的字符'抢',当需要时只需要复制粘贴即可
print('抢')
# 创建空列表总金额
total_amount = []
# 创建变量'次数'
times = 0

# 创建变量'人数'
qty_persons = easygui.enterbox('请选择抢红包总人数')
# 死循环(line.13--line30为检验数据部分)
while True:
    # 创建变量'人数布尔值'赋值为:查看变量'人数'是否完全由整数组成
    qty_pers_bool = qty_persons.isdigit()
    # 如果变量'人数'等于零
    if qty_persons == '0':
        # 重新赋值变量'人数'
        qty_persons = easygui.enterbox('数据错误,总人数不能为零,请再次选择抢红包总人数')
    # 如果变量'人数布尔值'不为真(即变量'人数'不完全由整数组成)
    if not qty_pers_bool:
        # 重新赋值变量'人数'
        qty_persons = easygui.enterbox('数据错误,请再次选择抢红包总人数')
    # 否则(即变量'人数'完全由整数组成)
    else:
        # 将变量'人数'重新赋值为整型后变量'人数'
        qty_persons = int(qty_persons)
        # 终止死循环
        break

# 创建变量'红包数量'
qty_package = easygui.enterbox('请发红包者选择红包数量')
# 死循环(line.34--line51为检验数据部分)
while True:
    # 创建变量'红包数量布尔值'赋值为:查看变量'红包数量'是否完全由整数组成
    qty_pac_bool = qty_package.isdigit()
    # 如果变量'红包数量'等于零
    if qty_package == '0':
        # 重新赋值变量'红包数量'
        qty_package = easygui.enterbox('数据错误,红包数量不能为零,请发红包者再次选择红包数量')
    # 如果变量'红包数量布尔值'不为真(即变量'红包数量'不完全由整数组成)
    if not qty_pac_bool:
        # 重新赋值变量'红包数量'
        qty_package = easygui.enterbox('数据错误,请发红包者再次选择红包数量')
    # 否则(变量'红包数量'完全由整数组成)
    else:
        # 将变量'红包数量'重新赋值为整型后变量'红包数量'
        qty_package = int(qty_package)
        # 终止死循环
        break

# 如果变量'人数'小于变量'红包数量'(line.53--line.55为数据检验部分)
if qty_persons < qty_package:
    # 重新赋值变量'qty_package'
    qty_package = easygui.enterbox('数据错误,红包数量不能大于人数,请再次选择红包数量')

# 创建变量'金额'
amount = easygui.enterbox('请发红包者选择红包总金额')
# 创建变量'amo_bool'赋值为:查看变量'amount'是否完全由整数组成
amo_bool = amount.isdigit()
while True:
    # 如果变量'总金额'等于零
    if amount == '0':
        # 重新赋值变量'总金额'
        amount = easygui.enterbox('数据错误,红包总金额不能为零,请发红包者再次选择红包数量')
    # 否则(即总金额不等于零)
    else:
        break
# 如果变量'amo_bool'不为真(即变量'amount'不完全由整数组成)
if not amo_bool:
    # 将变量'amount'重新赋值为浮点化变量'amount'
    amount = float(amount)
# 否则(变量'amount'完全由整数组成)
else:
    # 将变量'amount'重新赋值为整型后变量'amount'
    amount = int(amount)

# 提示信息"如想抢红包,请输入'抢'"
easygui.msgbox("如想抢红包,请输入'抢'")
# 提示信息'开始'
easygui.msgbox('开始')


# 创建'储存'类
class Storage:
    # 实例化方法
    def __init__(self, amount, qty_package):
        self.amount = amount
        self.qty_package = qty_package

    # 创建'储存'方法
    def storage(self):
        # 全局化列表'总金额'
        global total_amount
        # 添加元素'金额'
        total_amount.append(self.amount)


# 死循环
while True:
    # 创建变量'人物'
    person = easygui.enterbox('现在抢吗?')
    # '次数'+1
    times += 1
    # 如果'次数'小于等于'红包数量'
    if times <= qty_package:
        # 如果人物等于'抢'
        if person == '抢':
            # 如果'次数'小于'红包数量'
            if times < qty_package:
                # 创建变量'单人最小金额'(单位:元)
                person_amount_Min = 0.01
                # 创建变量'单人最大金额'(这个金额的大小来源于某微信内部工程师给出的最大金额公式,即:剩余金额平均值[(总金额-总使用的金额)/总红包数量]的2倍)
                person_amount_Max = (amount - sum(total_amount)) / qty_package * 2
                # 创建变量'单人金额',取出金额最小值与最大值间的随机数
                person_amount_eight = random.uniform(person_amount_Min, person_amount_Max)
                # 将变量'单人金额'去其四舍五入两位小数
                person_amount = round(person_amount_eight, 2)
                # 提示信息'恭喜您获得了'单人金额'元'
                easygui.msgbox('恭喜您获得了' + str(person_amount) + '元')
                # 注意!此处在死循环中
                # 由于死循环的影响,不停地传入参数'单人最小金额'与'红包数量'
                s = Storage(person_amount, qty_package)
                # 不停地调用'储存'方法,使列表内不停地添加元素,从而储存每次抢到的金额
                s.storage()

            # 如果次数等于红包数量(即这是最后一个红包了)
            elif times == qty_package:
                # 获取列表'总金额'的总数,并赋值给变量'其他金额'
                other_amount = sum(total_amount)
                # 创建变量'最后金额'赋值为金额-其他金额
                final_last_amount = amount - other_amount
                # 提示信息'恭喜您获得了'最后金额'元'
                final_last_amount = round(final_last_amount, 2)
                easygui.msgbox('恭喜您获得了' + str(final_last_amount) + '元')
                # 如果红包数量等于人数(即所有人都能抢到红包)
                if qty_package == qty_persons:
                    # 终止死循环
                    break

    # 如果次数大于红包数量(即有人没法抢到红包)
    elif times > qty_package:
        # 如果人物等于抢(即这时[见上]有人要抢)
        if person == '抢':
            # 提示信息'手慢了,红包派完了'
            easygui.msgbox('手慢了,红包派完了')
            # 如果次数等于人数(即所有人都抢红包了)
            if times == qty_persons:
                # 终止死循环
                break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G11176593

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值