相似的方法返回不同的结果

时间:2018-10-19 20:20:02

标签: python parentheses

我有2种方法都应该返回(20, 15, 3, 0, 7, -50),但是第二种方法返回(20, 15, 3, 0, 7, -200)。它可能与变量的顺序有关,但是我尝试更改它,但它们仍然没有返回相同的答案。

代码:

def method1():
    a = 10
    b = 3
    c = 2
    d = 5
    e = 5
    f = -30
    f, b, c, d, e, a = (2*a+f)*e, b*e, c+1, (a*(7*c+2)+f*e)//(b*e), e+2, a*c
    return (a,b,c,d,e,f)
def method2():
    a = 10
    b = 3
    c = 2
    d = 5
    e = 5
    f = -30
    g,h,i,j,k,l = a,b,c,d,e,f
    d = (g*(7*i+2)+l*k)//(h*k)
    f = 2*(g+l)*k
    a = g*i
    b = h*k
    c = i+1
    e = k + 2
    return (a,b,c,d,e,f)

1 个答案:

答案 0 :(得分:1)

我看到了困惑。问题是计算f变量时method2中的括号:

f = 2*(g+l)*k

根据您的代码逻辑,其在数学上等于:

f = 2*(a+f)*e

这使得a+f然后乘以2然后乘以k。您在method1上进行以下操作:

f = (2*a+f)*e

先让2*a然后求和f然后将结果乘以e。两种方法的数学运算都相似,但是它们是不同的!