【发布时间】:2013-10-31 19:12:21
【问题描述】:
假设有以下代码检查数字的相乘数字是否等于输入数字:
results = [a for a in range(10) if a == input]
results += [a*b for a in range(10) for b in range(10) if a*b == input]
results += [a*b*c for a in range(10) for b in range(10) for c in range(10) if a*b*c == input]
...
我希望它进行更改,以便在尚未找到结果时动态地继续搜索匹配项。所以:
- 如果一位数没有产生结果,请继续使用两位数
- 如果两位数没有产生结果,请继续使用三位数
- 等等...
我想以一种优雅的方式做到这一点,如果不是太内卷的话,即使是单线。如果根本没有匹配项,我还需要一个中断条件来避免无限循环。例如,如果输入是一个大于 10 的素数,则没有结果。中断条件应该是这样的:
if(math.pow(2, countOfDigits) > input):
return
其中countOfDigits 是当前在嵌套列表理解中检查的位数。换句话说,我的初始示例的第一行代表countOfDigits == 1,第二行代表countOfDigits == 2,第三行代表countOfDigits == 3。
【问题讨论】:
-
您的代码和您的文字不一致。您在谈论乘以数字,但您的代码添加了它们。另外,您只想要第一个结果,还是 n 位数字的所有结果(对于产生任何结果的第一个 n)?
-
“完全不匹配”是什么意思?停止条件是什么? (从您提出问题的方式来看,它似乎无限期地继续下去。
-
感谢您的 cmets。我编辑了我的帖子以使事情更清晰
-
我不明白你最后对
countOfDigits的定义。 -
我也很好奇这样做的目的是什么