2010-04-20 109 views

回答

109

要獲得一個隨機的3位數字:

from random import randint 
randint(100, 999) # randint is inclusive at both ends 

(假設你的真正用意三位數,而不是「高達三位數」。)

要使用的數字的任意數目:

from random import randint 

def random_with_N_digits(n): 
    range_start = 10**(n-1) 
    range_end = (10**n)-1 
    return randint(range_start, range_end) 

print random_with_N_digits(2) 
print random_with_N_digits(3) 
print random_with_N_digits(4) 

輸出:

33 
124 
5127 
+4

有了這個解決方案,您將消除從隨機池10 **(N-1)數字 – 2012-02-03 13:29:15

+3

@NicolaeSurdu:是的,這就是爲什麼我說*假設你真的意味着三位數字,而不是「最多三位數」。* – RichieHindle 2012-02-03 15:39:15

+2

037這是一個3位數字,小於100 :)。我正是這個意思。但是,對於非彩票申請,你的解決方案就好了) – 2012-02-07 15:12:56

3

請問0計數作爲一個可能的第一個數字?如果是這樣,那麼你需要random.randint(0,10**n-1)。如果沒有,random.randint(10**(n-1),10**n-1)。如果零是從不允許允許,那麼你必須明確拒絕其中有零的數字,或者繪製nrandom.randint(1,9)數字。

另外:有趣的是,randint(a,b)使用了一些非pythonic「索引」來獲得一個隨機數a <= n <= b。有人可能預計它會像range那樣工作,併產生一個隨機數a <= n < b。 (注意關閉的上部井段。)

鑑於在評論有關randrange的答覆,注意,這些可以用清潔劑random.randrange(0,10**n)random.randrange(10**(n-1),10**n)random.randrange(1,10)所取代。

+0

@Andrew:'a <= n <= b'也讓我吃驚。我不喜歡在我的代碼中加入額外的'-1'。 :-) – RichieHindle 2010-04-20 07:53:46

+1

@Andrew - 有趣的是,'randint'的Python代碼(它在Lib/random.py中)實際上只是調用'randrange(a,b + 1)'! – 2010-04-20 07:55:38

+0

是的,'randrange'應該是新代碼的首選。 – bobince 2010-04-20 08:01:10

3

你可以寫你自己的一些功能做你想要什麼:

import random 
def randomDigits(digits): 
    lower = 10**(digits-1) 
    upper = 10**digits - 1 
    return random.randint(lower, upper) 

基本上,10**(digits-1)爲您提供了最小{}位數字位數字,並10**digits - 1給你最大的{}位數字位數字(這恰好是最小的{digit + 1} -digit減1!)。然後我們從這個範圍取一個隨機整數。

17

如果你想把它當作一個字符串(例如,一個10位數的電話號碼),您可以使用此:

n = 10 
''.join(["%s" % randint(0, 9) for num in range(0, n)]) 
0

我真的很喜歡RichieHindle的答案,但是我很喜歡這個問題作爲一個練習。下面是使用字符串:)

import random 
first = random.randint(1,9) 
first = str(first) 
n = 5 

nrs = [str(random.randrange(10)) for i in range(n-1)] 
for i in range(len(nrs)) : 
    first += str(nrs[i]) 

print str(first) 
2

如果你不想記住所有的不同看似隨意的命令蠻力實現(像我一樣),你可以隨時使用:

import random 
Numbers = range(1, 10) 
RandomNumber = random.choice(Numbers) 
print(RandomNumber) 
#returns a number 
0

official documentation, sample()方法是否適合於此目的?

import random 

def random_digits(n): 
    num = range(0, 10) 
    lst = random.sample(num, n) 
    print str(lst).strip('[]') 

輸出:

>>>random_digits(5) 
2, 5, 1, 0, 4 
0

您可以創建誰消耗爲int的列表功能,在字符串來連接和流延改造也再次詮釋,這樣的事情:

import random 

def generate_random_number(length): 
    return int(''.join([str(random.randint(0,10)) for _ in range(length)])) 
0

如果你需要一個3位數的數字,並且希望001-099是有效的數字,你應該仍然使用randrange/randint,因爲它比其他選項更快。轉換爲字符串時只需添加前面的零。

import random 
num = random.randrange(1, 10**3) 
num_with_zeros = '{:03}'.format(num) 

另外,如果你不想隨機數另存爲你可以做它作爲一個oneliner一個int:

'{:03}'.format(random.randrange(1, 10**3)) 

蟒蛇3.6+只有oneliner:

f'{random.randrange(1, 10**3):03}' 

以上示例輸出爲:

  • '026'
  • '255'
  • '512'