我必须根据模式生成整数 例如,我必须生成所有数字仅包含4和0 ,并且以一个或多个4开头,以0或0结尾(最多30位数字)结束 我只想要Python(2.7)中的代码。我不想检查模式。我想在模式中生成数字
答案 0 :(得分:1)
假设你关于4和0的评论只是一个例子而且你真的想要一个“基于模式生成整数”的通用解决方案,我建议使用regex生成器系列库中的字符串。这是python的一个:https://github.com/asciimoo/exrex
如自述文件中所示,您可以执行以下操作:
import exrex
(int(n) for n in exrex.generate('4+0*'))
答案 1 :(得分:0)
你的问题是低调的。您的模式中有无限数字,因此您无法将它们全部列出。为了表明你的问题应该如何改进,我会以一种可能不是你想要的方式回答你的问题,但满足要求。
您的模式可以写为4[40]*
。 4+
形式的无限数字满足您的模式。由于你永远不会完成这些数字,只输出那些数字的生成器满足你的条件(你不能所有但你可以有许多数字)。
from itertools import count, islice
numbers = (int('4' * i) for i in count(1))
# get 10 numbers
print list(islice(numbers, 10))
# [4, 44, 444, 4444, 44444, 444444, 4444444, 44444444, 444444444, 4444444444]
故事的道德:在寻求解决方案之前,你应该先了解你的问题。
答案 2 :(得分:0)
这应该有效:
[int("4"*i + "0"*(n-i)) for n in range(0,31) for i in range(1,n+1)]
它生成465个不同的整数:
4, 40, 44, 400, 440, ..., 444444444444444444444444444440, 444444444444444444444444444444
On Edit:递归方法适用于更一般的情况:
def multiRepeats(chars,n,initial = True):
strings = []
if len(chars) == 0 or n == 0: return [""]
c = chars[0]
rest = chars[1:]
base = 1 if initial else 0
for i in range(base,n+1):
head = c * i
strings.extend([head + tail for tail in multiRepeats(rest,n-i,False)])
return strings
def digitRepeats(digitString,n):
return sorted([int(s) for s in multiRepeats(digitString,n)])
例如
>>> digitRepeats("420",4)
[4, 40, 42, 44, 400, 420, 422, 440, 442, 444, 4000, 4200, 4220, 4222, 4400, 4420, 4422, 4440, 4442, 4444]
要回答您的原始帖子,请评估digitRepeats("40",30)
答案 3 :(得分:0)
生成满足您的模式的所有数字:
def mygen():
i = 1
while True:
# turn to binary, skip '0b' then change 1s to 4s and
# finally turn it back to int
yield int(bin(i)[2:].replace('1','4'))
i += 1
因为你基本上只有两位数字' 4'和' 0'您可以使用二进制表示来获得所有可能的结果
请注意,此生成器无限运行!
要获得前100个数字,请使用它:
gen = mygen()
first100 = [next(gen) for _ in xrange(100)]