PT--random模块

 

 

# 验证码
import random
def r_code(n,alpha = True):
    s = ''
    for i in range(n):
        num = str(random.randint(0,9))
        if alpha:
            alpha1 = chr(random.randint(65,90))
            alpha2 = chr(random.randint(97,122))
            num = random.choice([num,alpha1,alpha2])
        s = s + num
    return s
a =r_code(6)  # 默认alpha为True
print(a)


# 发红包
    # 红包数量 钱数
    # 拼手气红包

#方法一
import random
def hongbao(money,num):
    money = money * 100  # 换成分 用整数来计算
    ret = random.sample(range(1,money),num-1)  # 取9个值分成10段
    ret.sort()
    ret.insert(0,0)
    ret.append(money)  #11个点  分为10段
    print(ret)
    for i in range(len(ret)-1): # 做成生成器
        yield (ret[i+1] - ret[i])/100
ret = hongbao(200,10)  # 生成器  循环领一个 发一个
for money in ret:
    print(money)

# 方法二
import random
def Bonus(person,money):  # 5,200
    dict_person_money = {}
    for i in range(person):
        num = random.randint(1,100)  # 99 99 99 99 99
        dict_person_money["Person%s"%(i+1)] = num  # person1:99
    num_sum = 0
    for i in dict_person_money:
        num_sum += dict_person_money[i]  # 5 * 99 = 495
    for i in dict_person_money:    # 99/495 1/5 * 200 = 40
        x =round(dict_person_money[i]/num_sum*money,2)
        dict_person_money[i] = '$%s'%x
    return dict_person_money
result = Bonus(10,1)
print(result)

# 方法三  此方法不太公平
import random
def hb(n,money):
    li = []
    s =0
    for i in range(n-1):  # 取n-1次
        # 平均值为1/n  则范围取 1/n+2 和  1/n-2之间的数
        num = round(random.uniform(money/(n+2),money/(n-2)),2)
        li.append(num)
        s = s + num
    num = round(money - s,2)    # 最后一次通过相减得到
    li.append(num)
    random.shuffle(li)  # 打乱列表
    return li
ret = hb(10,100)
print(ret)

 

posted @ 2018-08-22 16:57  葡萄想柠檬  Views(105)  Comments(0)    收藏  举报
目录代码