我正在试图找出一个随机数量的计算器,但很少见:
choices = [10,100,1000,10000]
10
是最常见的,100
更常见,1000
罕见,10000
非常罕见
我试过这个
import random
def getAmmounts():
choices = [10, 100, 1000, 10000]
values = [random.choice(choices) for i in range(10)]
return values
返回了大量的值,但它们不是那么随机出现的10000
,当我在调用我收到的数据时它几乎不会出现时:
[1000, 10000, 100, 1000, 10000, 10, 1000, 10000, 100, 100]
当10000's
和10
应该最常见,而偶然10s
在混合中时,两个100s
位于那里且几乎没有任何1000
值永远10000的价值。有没有办法设置执行此操作的优先级类型函数?在完成所述之后应该返回的一些很好的示例数据将是:
[10,10,100,10,10,100,1000]
偶尔10000
,但它应该是非常罕见的,关于如何设置它的任何想法?
答案 0 :(得分:4)
您的代码未分配任何概率。你可能希望10
比10000
更少见,但Python不会知道这一点。
您可以使用random.random模拟概率,以生成0到1之间的随机数,并根据生成的数字返回相应的数字。
例如
import random
def make_number():
val = random.random()
if val < 0.1: #10%
return 10000
elif val < 0.3: # 20%
return 1000
elif val < 0.6: # 30%
return 100
else: # 40%
return 10
values = [make_number() for i in range(10)]
print (values)
答案 1 :(得分:2)
输入列表对每个项目的概率相等。给它一个包含你想要的比例的列表。
choices = [10, 10, 10, 100]
将使得10倍于100倍。
答案 2 :(得分:2)
您可以生成随机数
import random
x = random.random() % this produces a random number between 0 and 1
您可以使用随机生成的数字在10,100,1000和10000之间进行选择:
if x < 0.5: # x is between 0 and .50, so 50% chance
choice = 10
else if x < 0.75: # x is between .50 and .75, so 75-50 = 25% chance
choice = 100
else if x < 0.9: # x is between .75 and .90, so 90-75 = 15% chance
choice = 1000
else:
choice = 10000 # x is between .90 and 1, so 100-90 = 10% chance (5 times less likely than the first one)
这会在50%的运行中输出10
,在25%的运行中输出100
,在15%的运行中输出1000
,在10%的运行中输出10000
跑步。您可以将范围自定义为您希望[10,100,1000,10000]
以上的任何分布!
答案 3 :(得分:2)
为什么不生成数字然后根据范围进行分配:
x = randint(1,11)
if x == 10:
#This is the rarest, occurring only 10% of the time
elif x < 10 and x >= 8:
#9 or 8 aka 20%
elif x < 8 and x >= 5:
#7, 6, 5 aka 30%
你可以随心所欲地调整它,或者让范围更长,以获得更具体的机会。
答案 4 :(得分:0)
快速(但不一定是最好的)解决方案是在列表中粘贴您希望更频繁出现的数字的多个副本:
import random
def getAmmounts():
choices = [10] * 80 + [100] * 15 + [1000] * 4 + [10000] * 1
values = [random.choice(choices) for i in range(10)]
return values
答案 5 :(得分:0)
import random
def getAmounts():
amount = random.random(1,10)
if amount == 10:
return 10000
elif amount > 8:
return 1000
elif amount > 5:
return 100
else:
return 10
或者,如果你想使用一个列表,你可以做一些事情(我没有IDLE打开,加载需要很长时间,所以如果我稍微离开,我道歉。)
import random
def getAmounts():
values = [10, 100, 1000, 10000]
amount = random.random(1,10)
if amount == 10:
return values[3]
elif amount > 8:
return values[2]
elif amount > 5:
return values [1]
else:
return values[0]
使用列表,您可以随时更改返回的实际值,因此,如果不是10,100,1000,10000,而是要返回50,500,500和50000,则可以重新分配值列表,代码仍然有效,无需通过并更改每一行。