python 微信紅包生成器

2022-06-16 09:00:08 字數 3105 閱讀 3998

#紅包生成思路

#200 塊錢 10個紅包

#0-200 的乙個軸,隨機取9個點,分成10段, 每一段的值表示乙個紅包的大小

#把輸入的 money值 * 100 拿到的數值就是分, 不用再考慮單位是元的時候 保留2位小數

import

random

defred_pocket(money,num):

money = money * 100 #把元 換算成分

ret = random.sample(range(1,money),num-1)

#random.sample 要在列表中取值,所以要range一下,range(1,money)1是1分,再隨機抽取9個數

ret.sort()

#***沒有返回值***

#對抽取的數進行排列 [3016, 8109, 12859, 13762, 14179, 14329, 15012, 17230, 19200]

#在列表中插入 0 和200, 等會做減法算每乙個紅包的大小用

ret.insert(0,0)

#return ret [0, 2146, 2299, 2303, 5749, 8003, 8968, 14713, 17829, 19375, 20000]

for i in range(len(ret)-1):

gap = (ret[i+1] - ret[i])/100 #

算出每一段的差值,再除以100 轉換成單位元

yield gap #

分回乙個生成器, 在抽紅包之前就已經分好了,然後按照抽的順序彈出紅包金額

red_g = red_pocket(200,10)

for i in

red_g:

print(i)

#

對生成器迴圈10次,檢視金額的分配情況

for j in range(10):

red_g = red_pocket(200,10)

lst =

for i in

red_g:

print

(lst)

#結果:

[8.8, 8.83, 55.25, 34.3, 7.5, 18.83, 25.88, 5.05, 5.44, 30.12]

[25.83, 26.8, 15.77, 50.31, 1.86, 30.71, 2.73, 14.76, 29.07, 2.16]

[2.22, 62.77, 2.76, 7.02, 2.7, 34.73, 7.72, 16.13, 21.74, 42.21]

[20.62, 2.85, 13.56, 19.2, 35.54, 13.35, 15.78, 10.49, 67.04, 1.57]

[23.94, 27.86, 6.54, 69.68, 0.64, 5.5, 2.87, 14.26, 44.74, 3.97]

[21.69, 8.92, 22.33, 8.22, 13.65, 38.69, 15.82, 3.33, 9.88, 57.47]

[32.61, 8.4, 0.14, 5.47, 4.09, 48.72, 30.4, 13.32, 12.6, 44.25]

[2.56, 31.74, 38.63, 4.93, 45.22, 10.95, 7.8, 15.75, 13.96, 28.46]

[11.31, 10.21, 1.09, 7.8, 30.58, 43.52, 29.68, 55.75, 7.05, 3.01]

[19.96, 53.82, 8.67, 18.44, 6.52, 11.43, 38.6, 1.93, 20.37, 20.26]

可以對比一下不同的思路:

#

方法二:

#發紅包

#紅包數量 錢數

#拼手氣紅包

import

random

deffunc(x,y):

count = 1lst =

while count <=num:

for i in

range(num):

global

money

bonus = random.uniform(0.01,money-(0.01*num)) #

取隨機小時, 範圍是0.01 - money

bonus = round(bonus,2) #

取小數點後保留兩位

money = money -bonus

random.shuffle(lst)

#對生成的結果重新洗牌

#但是缺點還是存在, 這種演算法的缺點是因為一開始會有人先抽取乙個大數,剩餘的人在剩下的小範圍內抽數

#很少再有人抽到的數比第乙個人的大. 雖然shuffle 把抽取結果重新洗牌了,但是還會看到數字分布有極端

return

lstnum = 5 #

int(input("紅包個數:"))

money = 20 #

int(input("金額:"))

print(func(num,money))

for i in range(10):

num = 5 #

int(input("紅包個數:"))

money = 20 #

int(input("金額:"))

print

(func(num,money))

結果: 可以發現有乙個兩個比較大的數,剩餘的都很小

[1.11, 0.14, 6.44, 0.19, 11.55]

[6.29, 0.04, 10.68, 0.76, 1.21]

[2.58, 0.02, 14.79, 1.01, 1.24]

[0.01, 9.85, 0.04, 9.04, 0.96]

[0.02, 2.13, 0.83, 13.3, 3.64]

[0.32, 0.25, 5.12, 3.04, 11.19]

[18.83, 0.36, 0.07, 0.05, 0.62]

[0.07, 17.4, 2.29, 0.16, 0.02]

[10.23, 1.37, 0.98, 2.31, 4.4]

[2.59, 0.12, 1.75, 0.65, 13.51]

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...