利用Python制作一个发红包的小游戏

        本系统的内容是综合应用python程序设计的知识,实际并实现了一款简单发红包的小游戏,具体功能如下:

(1)拼手气红包:随机金额

(2)普通红包:能够通过输入的红包人数与红包金额实现平均分配

(3)专属红包:记录专属人的姓名,输入专属金额

(4)查询红包发放情况:主要能查询到专属金额的人员以及红包金额信息

红包的金额不能出现负值。

一、页面部分代码:

import random
import time


def main_content():
    print()
    print("------------------------------")
    print("************ 红包类别 ************")
    print("1. 随机红包")
    print("2. 普通红包")
    print("3. 专属红包")
    print("4. 查询专属人金额信息")
    print("5. 退出")
    print()

# 退出系统模块
def quit_back():
    print("欢迎下次使用!!!")
    quit()

二、随机红包代码:

# 随机红包
def random_red_package():
    list_random_num=[]
    while True:
        try:
            num = int(input("请输入随机红包的分配人数:"))
            if num>=20000:
                print("人数超出范围,不符合分配要求,请重新输入")
                print()
                continue
            break
        except:
            print("输入分配人数不为整数,重新输入")

    # 循环判断是否超出当前人数生成随机红包的范围要求(0.01-200)
    while True:
        money=f"{random.uniform(0.01,200.0):.2f}"
        money=float(money)
        if money/num<0.01:
            continue
        else:
            break

    money = int(input("请输入红包金额:"))
  # print(f"随机红包总金额为:{money}元")
    # 为每个人分配随机红包
    for i in range(num):
        if i!=num-1:
            # 判断下次单人随机红包剩余的红包金额是否小于剩余待分配人数的最小分配额度:即0.01
            while True:
                div_money=f"{random.uniform(0.01,money):.2f}"
                div_money=float(div_money)
                if money-div_money<0.01*(num-i-1):
                    continue
                else:
                    break
            money-=div_money
            print(f"第{i+1}个人的随机红包大小为:{div_money}元,剩余红包金额为:{money:.2f}元")
            list_random_num.append(div_money)
        else:
            print(f"第{i+1}个人的随机红包大小为:{money}元,剩余红包金额为:{0}元")
            list_random_num.append(money)
            money-=money


    # print(list_random_num)
    print("出现红包大小相同时,只提示先出现的!")
    print(f"最大红包为第{list_random_num.index(max(list_random_num))}个, 红包大小为:{max(list_random_num)}元")
    print(f"最小红包为第{list_random_num.index(min(list_random_num))}个, 红包大小为:{min(list_random_num)}元")

三、普通红包代码:

# 普通红包
def commond_red_package():
    while True:
        try:
            num = int(input("请输入普通红包的分配人数:"))
            if num >= 20000:
                print("人数超出范围,不符合分配要求,请重新输入")
                print()
                continue
            break
        except:
            print("输入分配人数不为整数,重新输入")
    div_money=float(input("请输入红包金额:"))
    # div_money=f"{random.uniform(0.01,200):.2f}"
    # div_money=float(div_money)
    print(f"随机生成的普通红包总金额为:{div_money}")
    print(f"每个人平均每人分得{div_money/num:.2f}元")

# 读取info.txt商品列表清单文件---# 文件读取操作---return count, info_all  ---over
def read_list(file_name):
    info_all = []
    # 可读可写文件打开模式
    try:
        with open(file_name, "r", encoding="utf-8") as f:
            lines = f.readlines()
            count = 0
            # if lines:
            for line in lines:
                if line != "\n":
                    line=line[:-1]
                    info_all.append(line)
                    count += 1

        return count, info_all
    # 不存在时创建    即不存在文本文件就创建------此处为在桌面创建一个文件夹
    except IOError:
        with open(file_name, "w", encoding="utf-8") as f:
            count = 0
        return count, info_all


# info.txt用户信息文件存储操作---over
def save_list(list,file_name):
    with open(file_name, "w", encoding="utf-8") as f:
        for i in list:
            f.write(f"{i[0]},{i[1]}\n")
        print("\t\t\t保存成功!!!")

四、专属红包代码:

# 专属红包
def exclusive_red_package():
    name=input("请输入专属红包的对象名:")
    while True:
        try:
            money=float(input("请输入专属金额的金额大小:"))
            money=f"{money:.2f}"
            money=float(money)
            break
        except IOError:
            print("金额输入有误请重新输入金额")

    # 读取txt中的人名以及金额信息
    count,info_list=read_list("专属红包个人信息.txt")
    # 判断是否存在此人
    if count==0:# 不存在---添加该专属人信息
        list_split=[]
        list_split.append([name,money])
    else:
        # 存放name
        list_split_pep = []
        # 存放name和money
        list_split=[]
        for i in info_list:
            # 人名
            list_split_pep.append(i.split(",")[0])
            # 人名+对应专属红包金额
            list_split.append(i.split(","))
        if name not in list_split_pep:# 不存在---添加该专属人信息
            list_split.append([name,money])
        else:# 存在---则累加金额
            # 由于name唯一,所以可以通过index方法定位下标对应的索引元素作为一维数组的索引以此定位到name对应的专属红包金额
            list_split[[list_split_pep.index(name)]][1]+=money
    # 保存信息
    save_list(list_split,"专属红包个人信息.txt")

五、查询功能代码:

# 查询专属人金额信息
def find_exclusive_info():
    count,info=read_list("专属红包个人信息.txt")
    print("当前查询到的专属红包相关信息如下:")
    print()
    print(info[0])
    for i in range(count):
        info_=info[i].split(",")
        print(f"第{i+1}个人的信息为:name:{info_[0]};\tmoney:{info_[1]}")
    print()
    print("五秒后回到主页!!!")
    time.sleep(5)

主程序:

# 主程序---over
def main():
    while True:
        global cart_list_all
        main_content()
        option=input("请输入红包类别序号:")
        if option=="1":
            random_red_package()
        elif option=="2":
            commond_red_package()
        elif option == "3":
            exclusive_red_package()
        elif option == "4":
            find_exclusive_info()
        elif option=="5":
            quit_back()
        else:
            print("序号输入错误,请重新输入序号!!!")


if __name__=="__main__":
    main()

运行结果如下:

 

 

以上即是本文的全部内容,喜欢可以点赞收藏~

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值