2016-06-28 31 views
1

可以說,我30號
我需要給它們分配隨機的,但有下降的機會
例如:有2%的1號,爲2號1.5%,1.1%對於3號,爲4號等1.7%...
我genereting隨機數與此
Python的 - 下降速度遊戲,隨機配備指派概率

from random import randint 
import string 
import random 

print(randint(1,30)) # generates random number from 1 to 30 

但需要爲每個號碼
我不介意手動分配比例分配概率每個號碼
只需要知道ho w至百分比分配給一個隨機數

回答

2

這工作,它可以讓你選擇的號碼和你的概率

from scipy import stats 
numbers = (1,2,3) 
probability = (0.02, 0.015, 0.011) 
test1 = stats.rv_discrete(name='test1', values=(numbers, probability)) 
test1_results = test1.rvs(size=30) 

這裏是如何讓非重複號碼

count = 0 
list = [] 
while count < 31: 
    test_result = test1.rvs(size=1) 
    if test_result not in list: 
     list.append(test_result) 
     count += 1 
+1

啊好回答:) +1 –

+0

任何可能的方法來使test1_results不重複數字?我試過了test1_results!= test1_results。不工作 – Aset

+0

scipy.rvs中沒有任何內容,但是你可以創建一個列表,並且如果x不在列表中,則可以創建'''x = test1.rvs(size = 1):list.append(x)'' '然後把它寫成一個循環,直到你有30個數字。但是,如果您以隨機順序生成數字1-30的列表,則每次只需將30個號碼的列表隨機洗牌 – SAMO

3
from numpy.random import choice 
items = "common","uncommon","rare","super rare" 
probabilities = [0.5,0.35,0.1,0.05] 
N_TESTS = 10 
for i in range(N_TESTS): 
    print choice(items,p=probabilities) 

然後你就可以抽象出每一個是「類別」的地方

items = {"common":["fork","spoon","twig"],"uncommon":["rake","shovel","coal"],"rare":["knife","mixing bowl"],"super rare":["dragon tears","some money","flaming sword"]} 
probabilities = {"rare":0.1,"super rare":0.05,"common":0.5,"uncommon":0.35} 
item = choice(items[choice(probabilities.keys(),p=probabilities.values())]) 
print "You Loot:",item 
+0

如何使數字不再重複。在結果有時我得到兩個項目 – Aset