我正在用python做这个编程问题,我遇到了一些问题。 问题:取一个数字串并将其拆分,插入*和+运算符(或连接一些数字),以便得到的表达式计算结果为给定的数字。如果没有解决方案,请打印“找不到解决方案”。你知道吗
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)。我把代码改成这样:
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也从“真”变成了“假”。有人能告诉我哪里错了吗?如果可能的话,你能告诉我一种打印进度字符串的方法吗?更重要的是,我的编程风格可能不清楚。如果你有什么建议,我很高兴听到!谢谢!你知道吗
您的版本依赖于
findResult()
的返回值在这里返回一个布尔值:注意这个表达式中的
or
;(False, somestring)
或(True, somestring)
总是正确的!这是因为非空元组总是被认为是真的。你知道吗你需要把它分开:
注意,使用
gg == False
测试假值并不被认为是Pythonic。改用not gg
。你知道吗我认为问题在于:
这里,对元组使用
or
运算符。然而,在布尔上下文中,非空元组的计算结果总是True
。你应该这样写:感谢阿巴和玛蒂恩·皮尔斯!我的代码工作了。我的代码是:
谢谢你们!你知道吗
相关问题 更多 >
编程相关推荐