用python做一个简单的发红包抢红包的小代码块

    技术2022-07-11  106

    #___Author___:FENG #___DATE_____:2020/6/30 # 需求:设计一个发随机红包的程序 # 01 定义一个类:发红包的人和抢红包的人 # class People() # 发红包: 人 发一个红包 ,里面存着send_m元,分成send_n份。 红包金额不得小于0.01,份数不得小于1 # 抢红包: 抢红包的金额是随机的,保留小数点2位。 # 未完成需求项 # 1/ 当发的金额足够小时,抢的金额大于发的金额 例如 0.03的红包,发4份.分别为:0.01,0.01,0.01,0.02 # 2/ 抢红包结束时,在最后输出全场手气最好的人 #红包未被抢完,不显示 全场手气最好的人 # 知识点总结: # 1/ 面向对象---实例化,方法的调用,方法内变量的调用----------封装性 # 属性可以在内部更改,但无法通过对象调用新值 局部变量和全局变量 # 2/ max 函数 # 3/ for /if /while / break 的应用 # 4/ 格式化输出 # 5/ 随机数--import random random.randint random.uniform random.choice # 6/ 取概率值 # 7/ 小数的应用 round(值,保留的小数位数) # 8/ input 输入为字符串类型 # 9/ 列表 字典的简单应用 # 10/ 异常处理 import random class People(): #定义一个人类,可以抢红包,也可以发红包 def __init__(self,name): self.name = name # 定义属性:name def send_money(self): # 定义发红包方法行为 while True: self.send_m = float(input('请输入红包金额:')) # 输入发红包金额 if self.send_m < 0.01 : print('您输入的金额不符合规范,请输入≥0.01的金额') #金额最小数额为0.01 else:break while True: try: self.send_n = int(input('请输入红包个数:')) # 输入发红包个数 except ValueError: print('您输入的数量为小数,请输入整数') #红包个数对应抢红包的人数,故不得为小数 continue if self.send_n <= 0 : print('您输入的数量不符合规范,请输入大于零的红包个数') #红包个数不得为负数 elif self.send_m/0.01 < self.send_n: print('请输入小于等于%s的红包个数' % (int(self.send_m/0.01))) #红包的个数需保证每人最少分得的金额≥0.01 else:break print('%s老板发了一个总金额%s元的红包,共分成%s份' % (self.name, self.send_m, self.send_n)) global list1 list1 = [] # 定义全局变量,存放随机优化后的钱 list2 = [] #存放随机数 global nb_m #定义变量 值等于金额最大红包 nb_m = 0 global nb_name nb_name = 0 i = 0 sum_num = 0 while True: while i < self.send_n: # 定义循环,发一次红包,每人随机抢到金额 r_num = random.randint(1,100) list2.append(r_num) sum_num += r_num i += 1 j = 0 for j in range(0,len(list2)): list1_m = round(self.send_m*list2[j]/sum_num,2) list1.append(list1_m) j+=1 if 0 in list1: i = 0 sum_num = 0 list2 = [] list1 = [] else:break nb_m = max(x for x in list1) def recieve_money(self): # 定义抢红包方法 self.recieve_m = random.choice(list1) # 在列表中随机抽取一个红包 print('%s抢到了%s元钱'% (self.name,self.recieve_m)) list1.remove(self.recieve_m) # 在列表中去掉已经抢走的金额 if len(list1) != 0: # 显示剩余未被抢红包数量 print('还有%s个红包没有被抢' %len(list1)) else: print('最后一个红包被%s抢走了!'%self.name) # 提示红包已经被抢光了 if self.recieve_m == nb_m: nb_name = self.name print('%s全场手气最佳,抢得最大红包%s元'%(nb_name,nb_m)) if __name__ == '__main__': try: dict_1 = {'xm':'小明','xg':'小刚','xh':'小红','xl':'小亮'} xm = People('小明') xm.send_money() for key,value in dict_1.items(): key = People(value) key.recieve_money() except Exception: pass

     

    Processed: 0.013, SQL: 9