本系统的内容是综合应用python程序设计的知识,实际并实现了一款简单发红包的小游戏,具体功能如下:
(1)拼手气红包:随机金额
(2)普通红包:能够通过输入的红包人数与红包金额实现平均分配
(3)专属红包:记录专属人的姓名,输入专属金额
(4)查询红包发放情况:主要能查询到专属金额的人员以及红包金额信息
红包的金额不能出现负值。
一、页面部分代码:
import random
import timedef 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()continuebreakexcept:print("输入分配人数不为整数,重新输入")# 循环判断是否超出当前人数生成随机红包的范围要求(0.01-200)while True:money=f"{random.uniform(0.01,200.0):.2f}"money=float(money)if money/num<0.01:continueelse:breakmoney = int(input("请输入红包金额:"))# print(f"随机红包总金额为:{money}元")# 为每个人分配随机红包for i in range(num):if i!=num-1:# 判断下次单人随机红包剩余的红包金额是否小于剩余待分配人数的最小分配额度:即0.01while True:div_money=f"{random.uniform(0.01,money):.2f}"div_money=float(div_money)if money-div_money<0.01*(num-i-1):continueelse:breakmoney-=div_moneyprint(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()continuebreakexcept: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 += 1return count, info_all# 不存在时创建 即不存在文本文件就创建------此处为在桌面创建一个文件夹except IOError:with open(file_name, "w", encoding="utf-8") as f:count = 0return 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)breakexcept IOError:print("金额输入有误请重新输入金额")# 读取txt中的人名以及金额信息count,info_list=read_list("专属红包个人信息.txt")# 判断是否存在此人if count==0:# 不存在---添加该专属人信息list_split=[]list_split.append([name,money])else:# 存放namelist_split_pep = []# 存放name和moneylist_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_allmain_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()
运行结果如下: