2016-06-28 92 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