在解决项目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
答案 0 :(得分:1)
是的,有问题。实际上,其中三个。
首先,如果一个数字包含多个相同面额的数字(重复项),则g
不等于l
,因为l
每个数字只有一个副本。您应该在比较之前将l
和g
转换为集合。
第二,如果数字不是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)
。