我在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