Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 独特的引脚发生器_Python - Fatal编程技术网

Python 独特的引脚发生器

Python 独特的引脚发生器,python,Python,任务是生成给定长度的给定数量的数字管脚。 下面是我为不以0开头的数字管脚的特殊情况编写的代码: def generate_pins(length, count): return random.sample(range(int('1' + '0' * (length - 1)), int('9' * length)), count) 您将如何实施它 编辑:引脚不应重复 EDIT2:也许让我们扩展这个示例,使pin可以包含任何字母数字符号。随机。根据,采样保证无需替换就不会重复采样;这是你

任务是生成给定长度的给定数量的数字管脚。 下面是我为不以0开头的数字管脚的特殊情况编写的代码:

def generate_pins(length, count):
    return random.sample(range(int('1' + '0' * (length - 1)), int('9' * length)), count)
您将如何实施它

编辑:引脚不应重复

EDIT2:也许让我们扩展这个示例,使pin可以包含任何字母数字符号。

随机。根据,采样保证无需替换就不会重复采样;这是你的规格的一部分吗

如果没有任何明显的词语来表示没有重复,我会:

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_小写+string.digits或其一些变体,例如,如果需要小写和大写ascii字母,则应在onepin中使用。您应该更准确地指定要从哪个字母表字符串中提取字符,或者将其作为参数传递给generate_pins,无表示generate_pins应选择默认字母表,例如string.digits


进一步编辑:添加可选的alphabet参数,并检查给定长度和该字母表可以生成的不同管脚的数量。

由于OP没有提到随机管脚,唯一的标准似乎是唯一管脚 这是最快的方法

def generate_pins(length, count):
  start=10**length
  return range(start,start+count,1)
此外,您也不能总是保证统一性,相同的长度和计数在同一时间
e、 g.试着为Alex的答案生成1,11。

否。我太老了,不能做家务了学习Python并寻找一种正确的方法来做事情。pins可以从一个前导的0开始吗?@Greg编辑了最初的帖子。对于最后2个要求,没有重复和alphnums,Alex Martelli的解决方案2可以工作,只需要另外一个字符串,而不是string.digits。向大师学习!set使用得很好,我总是忘记它们。关于最上面的例子,有一点需要注意:OP的引脚没有零作为第一个数字;这是故意的还是仅仅为了方便。。。此外,Alex的解决方案不受引脚长度的限制,这与最初剪下的不同,因为需要int-Guess的范围不应该期望更多的答案@mjv,tx用于定位,编辑以修复。实际上,最近有一些JavaScript,虽然大部分是Python——没有C++或java,但这只是一个真正的类型;阿努拉格:是的,你做的,几乎让我疯狂地去理解为什么那个支架刚刚消失了-抱歉,请尝试生成\u pins2,101