import random
def func_word(): # 红包留言模块,
user=input('恭喜发财,大吉大利')
def leave_word(word=' 恭喜发财,大吉大利 '):
print('-' * 15)
print('\033[31;0m %s \033[0m' %word)
print('-' * 15)
if user=='':
leave_word()
else:
leave_word(word=user)
def rob_func(lst): # 抢红包模块
def rob(lst):
for i in lst:
yield i
obj = rob(lst)
try:
while True:
user_o = input('>>>')
if user_o == ' ':
print('红包:\033[31;0m %s\033[0m 元' % (obj.__next__()))
except StopIteration:
print('\033[31;0m 你来晚啦 \033[0m')
def ran(): # 随机红包模块
while True:
money = float(input('>>>总金额 '))
if money < 0.01:
print('红包金额应大于0.01')
else:
break
while True:
numbers = int(input(' 红包个数 ')) # 异常化处理
if numbers * 0.01 > money:
print('单个红包必须大与0.01')
else:
break
# 产生随机的红包值 (怎样能够尽量的随机化呢 产生的红包有个特别大的,不合理,钱越大越明显)
lst = []
for i in range(numbers - 1): # 直接money这样的算法第一个抢的一定是最大的红包,但微信不是这样的
res = round(random.uniform(0, money / (numbers - i)), 2) # money/2这样的算法是不是也有的规律呢,不行这样的话,出现的错误更多
lst.append(res) # 这个算法里有一个不正常的数
money -= res
lst.append(round(money, 2))
random.shuffle(lst)
func_word()
rob_func(lst)
def ord(): # 普通红包模块 (基本能够按照预想的实现)
while True:
money = float(input('>>>单个金额 '))
if money < 0.01:
print('红包金额应大于0.01')
else:
break
numbers = int(input('红包个数 ')) # 这里可以加入一个异常化处理,可以只给用户一个输入数字的键盘,这是如何实现的
lst = []
for i in range(numbers):
lst.append(money)
func_word()
rob_func(lst)
def red_packet(): # 红包的选择模块
lst = ['随机红包', '普通红包']
for i in enumerate(lst, 1):
print(i[0], i[1])
while True:
try: # 这里可以加入一个异常处理,但是微信上是不会让你输数字以外的
num = int(input('>>>>'))
print('-' * 10)
print(lst[num - 1])
print('-' * 10)
break
except IndexError:
print('你输入的数不对')
except ValueError:
print('请输入数字')
except Exception:
print('请重新输入')
if num == 1:
ran()
if num == 2:
ord()
red_packet()
存在的问题 想不到怎样产生一组合理的随机数,上面提到的会有特别明显的一红包产生的是特别的大,并且总的金额数越大越明显,(请教^-^)