我在python中做这个编程问题,我有一些问题。 问题:取一串数字并将其分开,插入*和+运算符(或连接一些数字),以便得到的表达式计算为给定的数字。如果没有解决方案,打印“无解发现python:bug返回布尔值和字符串在一起
解决方案1:
def findResult(s, goal):
i = 1
gg = False
while gg ==False and i < len(s)+1:
if int(s) == goal:
gg = True
return True
num = int(s[0:i])
if goal % num == 0:
gg = findResult(s[i:len(s)], goal/num) or findResult(s[i:len(s)], goal - num)
else:
gg = findResult(s[i:len(s)], goal - num)
i += 1
return gg
ss = '12345'
goal = 691
print findResult(ss, goal)
当我测试此代码,它会告诉我们,如果字符串可以计入进球数(TRUE或FALSE)然后。我想返回的计算进度(1 + 2 * 345),我改变了这样的代码:
解决方案2:
def findResult(s, goal, prog):
i = 1
gg = False
while gg ==False and i < len(s)+1:
if int(s) == goal:
gg = True
prog += s
return (True,prog)
else:
num = int(s[0:i])
if goal%num == 0:
gg,prog = findResult(s[i:len(s)], goal/num,prog+"*"+str(num)) or findResult(s[i:len(s)], goal - num,prog+"+"+str(num))
else:
gg,prog = findResult(s[i:len(s)], goal - num,prog+"+"+str(num))
i += 1
return (gg,prog)
ss = '12345'
goal = 691
print findResult(ss, goal,"")
这段代码的输出是错的,什么是我不能明白的是, “gg”也从“真”变为“假”。谁能告诉我我的错误在哪里?如果可能,你能告诉我一种打印进度字符串的方法吗?更重要的是,我的编程风格可能并不清晰。如果您有任何建议,我很高兴听到!谢谢!
你的第二次尝试的输出是什么? – Kasramvd 2014-09-20 19:19:27
(假,* 1 + 2 + 3 + 4 + 5 + 45 + 34 * 5 + 345 + 23 * 4 + 5 + 45 + 234 + 5 + 2345 + 12 + 3 * 4 + 5 + 45 + 34 * 5 + 345 + 123 * 4 + 5 + 45 + 1234 + 5 + 12345') – user3329412 2014-09-20 20:09:38