2017-07-31 129 views
-1

我想獲得(65,90)和(97,122)範圍之間的隨機數。我可以選擇範圍內的隨機數使用生成兩個範圍之間的隨機整數

import random 
random.randint(65,95) 

但'randint`採取唯一的整數,所以我怎麼辦?任何想法

在此先感謝

+1

您可以生成2個範圍,然後選擇random.choice([first range rand,second range rand])' – depperm

+0

'i = randint(65,115); i + = 7如果我> 90 else 0' – Alfe

+11

你確定你不是真的在'random.choice(string.ascii_letters)'之後嗎? –

回答

1
def random_of_ranges(*ranges): 
    all_ranges = sum(ranges, []) 
    return random.choice(all_ranges) 

print(random_of_ranges(range(65, 90), range(97, 122))) 

這是處理這是一個非常普遍的方式。您可以傳遞任意數量的範圍(或它們的子集)。但它相當昂貴,特別是對於非常大的套件(如range(1, 100000000))。對於你的用例(可能還有其他幾個人),這就足夠了。

+0

你爲什麼要在這裏建立'all_ranges'? 'random.choice(random.choice(ranges))'同樣沒有每次重建列表... –

+1

如果所有範圍的大小相同(在上面的Q中就是這種情況),它也是一樣的。在一般情況下,這不一定是正確的,'選擇(選擇([範圍(1,100),範圍(200,202)]))'將比e更頻繁地返回200和201。 G。 50或37.但是,當然,建立這個列表只需要一次,然後在所有調用中使用它都是一個很好的優化。 – Alfe

+0

好點 - 做得好:) –

-1

做你自己的?

import random 

def my_rand(): 
    numbers = list() 
    numbers.append(random.randint(65,95)) 
    numbers.append(random.randint(97,122)) 
    return numbers[random.randint(0,1)] 
+0

如果範圍大小不一樣,那不是什麼可能。 – Alfe

+3

加上代碼有語法錯誤。 –

+0

@ Jean-FrançoisFabre固定,感謝您花時間抱怨而不是修復它;) – Nicoretti

0

或者:

def random(): 
    arr1 = np.random.randint(65,90) 
    arr2 = np.random.randint(97,122) 
    out = np.stack((arr1,arr2)) 
    out = np.random.choice(out) 
    return out 
相關問題