python:返回布尔值和字符串的错误

2024-10-05 13:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python做这个编程问题,我遇到了一些问题。 问题:取一个数字串并将其拆分,插入*和+运算符(或连接一些数字),以便得到的表达式计算结果为给定的数字。如果没有解决方案,请打印“找不到解决方案”。你知道吗

解决方案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也从“真”变成了“假”。有人能告诉我哪里错了吗?如果可能的话,你能告诉我一种打印进度字符串的方法吗?更重要的是,我的编程风格可能不清楚。如果你有什么建议,我很高兴听到!谢谢!你知道吗


Tags: 代码falsetruelenreturnif解决方案ss
3条回答

您的版本依赖于findResult()的返回值在这里返回一个布尔值:

gg,prog = findResult(s[i:len(s)], goal / num,prog+"*"+str(num)) or findResult(s[i:len(s)], goal - num,prog+"+"+str(num))

注意这个表达式中的or(False, somestring)(True, somestring)总是正确的!这是因为非空元组总是被认为是真的。你知道吗

你需要把它分开:

if goal%num == 0:
    gg,prog = findResult(s[i:len(s)], goal / num,prog+"*"+str(num))
    if not gg:
        gg, prog = findResult(s[i:len(s)], goal - num,prog+"+"+str(num))

注意,使用gg == False测试假值并不被认为是Pythonic。改用not gg。你知道吗

我认为问题在于:

gg,prog = findResult(s[i:len(s)], goal / num,prog+"*"+str(num)) or findResult(s[i:len(s)], goal - num,prog+"+"+str(num))

这里,对元组使用or运算符。然而,在布尔上下文中,非空元组的计算结果总是True。你应该这样写:

gg,prog = findResult(s[i:len(s)], goal / num,prog+"*"+str(num))
if gg == False:
    gg,prog = findResult(s[i:len(s)], goal - num,prog+"+"+str(num))

感谢阿巴和玛蒂恩·皮尔斯!我的代码工作了。我的代码是:

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)

        num = int(s[0:i])
        if goal%num == 0:
            gg,prog = findResult(s[i:len(s)], goal / num,prog+str(num)+"*") 
            if gg == False:
                gg,prog =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
    if gg == True:
        return (gg,prog)
    else:
        return (gg,"")

ss = '12345'
goal = 691
gg,result = findResult(ss, goal,"")
result += "=" + str(goal)
print result if gg else "No solution"

谢谢你们!你知道吗

相关问题 更多 >

    热门问题