这是检查泛数字最大为9的正确方法吗?

时间:2019-05-12 01:21:36

标签: python-3.x

在解决项目eular的问题32时,我使此功能可以检查Pandigital编号,这是检查Pandigital编号的正确方法吗?我认为有一些问题,但我本人无法解决。

def pandigital(number, digit): # digit: n-digit pandigital number
    l = ['{}'.format(j) for j in [i for i in range(1,digit+1)]]
    g = list(str(number))
    g.sort()
    if g == l:
      return True

1 个答案:

答案 0 :(得分:1)

是的,有问题。实际上,其中三个。

首先,如果一个数字包含多个相同面额的数字(重复项),则g不等于l,因为l每个数字只有一个副本。您应该在比较之前将lg转换为集合。

第二,如果数字不是pandigital,则您的函数不会返回任何内容。

最后,range(1,digit+1)不包含0(除非您想要 zeroless 泛数字)。

请考虑以下解决方案:

def pandigital(number, digit)
    return {f'{i}' for i in range(digit)} == set(str(number))

如果要坚持使用更多“经典”的Python,请用f'{i}'替换'{}'.format(i)