如何在Python3中的范围板中或在Python3中的特定范围内生成随机数?

时间:2017-12-30 14:24:37

标签: python-3.x random

假设我想在1到100之间生成10个随机数。但是我想从1-10,11-20,21-30等每个数量的集合中随机选择数字。所以它不会像这样出来: 1,7,26,29,51,56,59,89,92,95。 我想随机选择数字: 7,14,22,39,45,58,64,76,87,93

我创建了一个代码示例。但我无法弄清楚问题的后期部分。

import random

def getInteger(prompt):
    result = int(input(prompt))
    return result

range1 = getInteger("Please Enter Initial Range: ")
range2 = getInteger("Please Enter Ending Range: ")
range3 = getInteger("Please Enter the Range size: ")

myList = random.sample(range(range1, range2), range3)

myList.sort()

print ("Random List is here: ", myList)

我是编程新手。我用Google搜索,但没有找到任何解决方案。提前谢谢你们......

3 个答案:

答案 0 :(得分:2)

在您的情况下,您需要在0到9之间选择10次随机数,并在每个步骤中添加10个。

import random

random_numbers = []

for i in range(0, 10):
    random_number = random.randrange(10) # pick a number between 0-9
    random_number += 10*i # add 10 in each iteration
    random_numbers.append(random_number)

print(random_numbers)

编辑: 如果你想设置自己的值,这可能有效:

import random

random_numbers = []
begin = 100
end = 200
interval = 10

for i in range(0, round((end-begin)/interval)):
    random_number = random.randrange(interval)
    random_number += round(interval)*i + begin
    random_numbers.append(random_number)

print(random_numbers)

答案 1 :(得分:1)

考虑使用random.choicefor循环:

>>> for i in range(1, 100, 10):              
...     print(random.choice(range(i, i + 10))) 
...                                          
10                                           
19                                           
21                                           
34                                           
45                                           
51                                           
68                                           
74                                           
88                                           
98                                           
>>> for i in range(1, 100, 10):              
...     print(random.choice(range(i, i + 10))) 
...                                          
6                                            
14                                           
30                                           
37                                           
50                                           
56                                           
65                                           
79                                           
85                                           
94    

答案 2 :(得分:1)

你可以用这个:

import random

start = 1
stop = 100
interval = 10

ran = [random.choice( range(start + i*interval, start + (i+1)*interval-1))
for i in range(len(range(start,stop,interval)))]
print(ran)

说明:

i0len(...)中选择start使用stopinterval / {{1} }

对于此问题,它会返回10,从i0会产生9的数字。

random.choic e使用此i来计算/填充start大小的整个数字范围,从stopinterval - choice然后在此子范围中为您的结果列表绘制其中一个数字。

range(start + i*interval, start + (i+1)*interval-1)
# evaluaters to   
#    i = 0:     1+0, 1+(0+1)*10-1 = 1,10
#    i = 1:     1+10, 1+(1+1)*10-1 = 11,20
#    etc.

编辑: 这可能会超出上限 - 可以使用

来修复
ran = [random.choice( range(start + i*interval,min(stop, start + (i+1)*interval-1))) for i in range(len(range(start,stop,interval)))]

使用min(stop, calculated end)

限制上限