任務是生成給定長度的給定數量的數字引腳。 這是我想出了的數字管腳的特定情況下,代碼不以0開頭:唯一引腳生成器
def generate_pins(length, count):
return random.sample(range(int('1' + '0' * (length - 1)), int('9' * length)), count)
你將如何實現呢?
編輯:引腳不應該重複。
編輯2:可能讓我們擴展此示例,以便引腳可以包含任何字母數字符號。
任務是生成給定長度的給定數量的數字引腳。 這是我想出了的數字管腳的特定情況下,代碼不以0開頭:唯一引腳生成器
def generate_pins(length, count):
return random.sample(range(int('1' + '0' * (length - 1)), int('9' * length)), count)
你將如何實現呢?
編輯:引腳不應該重複。
編輯2:可能讓我們擴展此示例,以便引腳可以包含任何字母數字符號。
random.sample
保證不重複(「無取代無取樣」,根據the docs);這是你的規格的一部分嗎?
所表達的(不加任何詞「不同」表示缺乏重複的),我會做:
import random
import string
def generate_pins(length, count):
return [''.join(random.choice(string.digits) for x in xrange(length))
for x in xrange(count)]
隨着一個附加條件,即所有的引腳返回是唯一的:
def generate_pins(length, count, alphabet=string.digits):
alphabet = ''.join(set(alphabet))
if count > len(alphabet)**length:
raise ValueError("Can't generate more than %s > %s pins of length %d out of %r" %
count, len(alphabet)**length, length, alphabet)
def onepin(length):
return ''.join(random.choice(alphabet) for x in xrange(length))
result = set(onepin(length) for x in xrange(count))
while len(result) < count:
result.add(onepin(length))
return list(result)
假設規格要求您返回一個列表。
編輯:鑑於OP的後期澄清和規範的變化,第二個答案看起來不錯,除了string.ascii_lowercase + string.digits
(或一些變體,例如,如果小寫和大寫ASCII字母都需要)應在onepin
使用。您應該更準確地指定您想要繪製字符的「字母」字符串(可能將其作爲參數傳遞給generate_pins
,None
表示generate_pins
應選擇默認字母表,例如string.digits
)。
進一步編輯:增加了可選的字母參數,並檢查可以生成給定長度和字母表的不同引腳的數量。
從大師學習! set()的大用途,我一直在忘記它們。一個關於頂部例子的警告詞:OP的引腳是這樣的,它們沒有零作爲第一位;這是由設計或只是一種方便...此外,亞歷克斯的解決方案是不受限制的針腳長度,不像原來的剪切,由於範圍()需要int(?) – mjv 2009-09-17 03:36:15
猜測不應該期待更多的答案。 :) – yanchenko 2009-09-17 03:44:43
@mjv,tx爲發現,編輯修復。 (實際上,最近有一些Javascript,雖然大部分是Python--不過一段時間沒有C++或Java--但這只是一個真正的錯字;-)。 – 2009-09-17 04:09:27
由於OP沒有說隨機PIN,唯一的標準似乎是唯一的PIN 這裏是最快的方法
def generate_pins(length, count):
start=10**length
return range(start,start+count,1)
你也不能總是保證uniqeness,相同的長度,並在同一時間 例如數嘗試generate_pins(1,11)爲亞歷克斯的答案。
正在做作業嗎? – SingleNegationElimination 2009-09-17 03:21:13
沒有。家庭作業我太老了。 :) 學習Python並尋找合適的方式來做事情。 – yanchenko 2009-09-17 03:26:24
引腳可以以'0'開頭嗎? – 2009-09-17 03:29:19