任务是生成给定长度的给定数量的数字引脚.这是我提出的针对特殊情况的数字引脚的代码,它不以0开头:
def generate_pins(length, count):
return random.sample(range(int('1' + '0' * (length - 1)), int('9' * length)), count)
Run Code Online (Sandbox Code Playgroud)
你会如何实现它?
编辑:针不应重复.
EDIT2:可能让我们扩展这个例子,以便pin可以包含任何字母数字符号.
random.sample保证不重复(根据文件,"无需替换的抽样" ); 这个条件是你的规格的一部分吗?
如表达的那样(没有任何" 明显 "表示缺乏重复),我会这样做:
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)]
Run Code Online (Sandbox Code Playgroud)
有了附加条件,所有的引脚返回是唯一的:
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)
Run Code Online (Sandbox Code Playgroud)
假设规范要求您返回列表.
编辑:鉴于OP的最后澄清和规格变化,第二个答案看起来不错,除了string.ascii_lowercase + string.digits(或其某些变体,例如,如果需要小写和大写ASCII字母)应该使用onepin.您应该更准确地指定要从中绘制字符的"字母"字符串(可能将其generate_pins作为参数传递,None指示generate_pins应选择默认字母表,例如string.digits).
进一步编辑:添加可选的字母表参数,并检查给定长度和字母表可生成的不同引脚的数量.