随机验证码&发红包

参考女神博客链接:https://www.cnblogs.com/Eva-J/articles/11266790.html?tdsourcetag=s_pcqq_aiomsg#_label6

随机验证码小白版本

# -*- coding: utf-8 -*-
# 2019/8/5 13:56
import random
# 小白版
yan=''
for i in range(4):
    #current=random.randint(0,9) #生成0-9的随机数
    current=random.randrange(0,4) # 生成0-4的随机数,如果和i相等,随机添加字母或数字
    if current == i:
        tmp = chr(random.randint(65,90))
    else:
        tmp = random.randint(0,9)
    yan+=str(tmp)
print("生成的4位随机验证码为:", yan)

随机验证码女神版本

# -*- coding: utf-8 -*-
# 2019/8/5 13:56
import random
# 女神版
def verification_code():
    '''生成随机验证码'''
    code = ''  # 初始化验证码的值为空
    for i in range(4):  # 循环获取4个随机数,生成4位随机验证码
        num = random.randint(0, 9)  # 生成0-9的随机数
        alf = chr(random.randint(65, 90))  # 随机生成大小写字母,通过字母的ascii值获取
        tmp = random.choice([num, alf])  # 随机在数字和字母中获取一位字符
        # code = "".join([code, str(tmp)])  # 将随机获取的字符拼接
        code +=str(tmp)

    return code

yan = verification_code()
print("生成的4位随机验证码为:", yan)

随机验证码女神升级版本,可以自定义验证码的模式,可以是纯数字,或者是带大小写字母的

# -*- coding: utf-8 -*-
# 2019/8/5 13:56
import random

# 升级版
def code(n=4,alpha=True):
    '''自定义版'''
    s = ''
    for i in range(n):
        num = random.randint(0,9)
        if alpha:
            alpha_lower = chr(random.randint(97,122))
            alpha_upper = chr(random.randint(65,90))
            num = random.choice([num,alpha_lower,alpha_upper])
        s += str(num)
    return s
# 默认生成4位,带大小写的随机验证码
ret = code()
print(ret)
# 生成8位带数字大小写字母的随机验证码
ret = code(8)
print(ret)
# 生成4位随机数字验证码
ret = code(alpha=False)
print(ret)
# 生成8位随机数字验证码
ret = code(8,False)
print(ret)

 随机验证码终极版本

# -*- coding: utf-8 -*-
# 2019/8/5 13:56
import random
import string
from random import choice

# 终极版
def Makepass(length=8, chars=string.ascii_letters+string.digits):
    return ''.join([choice(chars) for i in range(length)])

ret = Makepass()
print(ret)
ret = Makepass(4)
print(ret)
ret = Makepass(4,chars=string.digits)
print(ret)

抢红包基础版本

# -*- coding: utf-8 -*-
#
2019/8/9 10:22 ''' # 2.发红包 拼手气红包 # 200元 10个 每个人抢到的钱都是随机的 # 每一个人抢到多少钱的概率都平均 ''' import random # 0-20000之间随机取n个不重复的整数 def send_money(money,n): lst = [] money = money*100 ret = random.sample(range(1,money),n-1) ret.sort() ret.insert(0,0) ret.append(money) for i in range(len(ret)-1): val = ret[i+1] - ret[i] val = val/100 lst.append(val) return lst

print(send_money(100,5))

抢红包升级版本,利用生成器来节省内存使用。

# -*- coding: utf-8 -*-
# 2019/8/9 10:22
'''
# 2.发红包 拼手气红包
# 200元 10个 每个人抢到的钱都是随机的
# 每一个人抢到多少钱的概率都平均
'''
import random

def red_envelope(money=200,n=10): # money表示要发多少钱 ,n表示要发几个红包
    '''抢红包'''
    money = money * 100 # 可以抢到分,将钱数乘以100,返回值时再除以100就能取到分了。
    line_list = random.sample(range(1,money),n-1) # sample不重复 的从1-199中随机取9个数,返回list。
    line_list.sort() # 将list从小到大排序
    line_list.insert(0,0) # 在list最前面插入0
    line_list.append(money) # 在list最后面加入200,list的长度为11,这样就能完整的在0-200区间获取10个红包了,list之间的值加起来刚好为200。
    for i in range(len(line_list)-1):
        red = line_list[i+1] - line_list[i] # 第二个点减去第一个点的值作为第一个红包,以此类推。
        red = red/100 # 再把分转换成元
        yield red # 利用生成器来节省内存使用
        # money = money - red*100
        # print('红包余额:',money/100)


if __name__ == '__main__':
    money=50
    n=10
    red = red_envelope(money,n)
    for i in range(n):
        print('第%s个红包%s元!'% (i+1,red.__next__()))

    # res=list(red)
    # print(res)
    # print(sum(res))
原文地址:https://www.cnblogs.com/hulk-1029/p/11327031.html