学习Python艰苦的方式练习21额外学分

时间:2013-11-04 06:05:23

标签: python

我不是在练习21中遵循以下部分,我想因为我在数学方面很弱。

# A puzzle for the extra credit, type it in anyway.

print "Here is a puzzle."

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

print "That becomes: ", what, "Can you do it by hand?"
  

说明

     

在剧本的最后是一个谜题。我正在拿回报的价值   一个函数并将其用作另一个函数的参数。我   在一个链中这样做,这样我就可以使用它创建一个公式   功能。它看起来很奇怪,但是如果你运行脚本就可以了   看到结果。你应该做的是试着找出正常情况   将重新创建同一组操作的公式。

我的问题是什么是正常的公式,你是如何解决的?

2 个答案:

答案 0 :(得分:4)

您的代码行:

what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

转换为:

age + (height - (weight * (iq / 2)))

由于操作顺序可以简化为:

age + height - weight * iq / 2

或英文:

Age plus Height subtract Weight times half of IQ

我解决这个问题的方法是将语句扩展一点,以便更容易阅读:

第1步:

add(
    age, subtract(
        height, multiply(
            weight, divide(
                iq, 2
            )
        )
    )
)

然后从最内层语句开始翻译每个语句:

第2步:

add(
    age, subtract(
        height, multiply(
            weight, (iq / 2)
        )
    )
)

第3步:

add(
    age, subtract(
        height, (weight * (iq / 2))
    )
)

第4步:

add(
    age, (height - (weight * (iq / 2)))
)

第5步:

age + (height - (weight * (iq / 2)))

修改

您需要基本了解:

multiply(x, y) is equivalent to x * y
add(x, y) is equivalent to x + y
subtract(x, y) is equivalent to x - y
divide(x, y) is equivalent to x / y

然后你还需要明白这些可以结合起来:

multiply(x, add(y, z)) is equivalent to multiply(x, (y + z)), and  x * (y + z)

我在(y + z)周围放置括号以表明它应该先计算,因为内部值总是先在嵌入函数中计算。

答案 1 :(得分:1)

“正常公式”是:     年龄+(身高 - (体重*(iq / 2)))

至于为什么,请从代码开始:

add(age, subtract(height, multiply(weight, divide(iq, 2))))

此代码首先执行divide(iq, 2),给我们(iq / 2)。为了可视化,我将用“正常”结果替换该函数:

add(age, subtract(height, multiply(weight, (iq/2))))

使用该值,可以计算multiply(weight, (iq/2))。因此weightiq/2成倍增加 - weight*(iq/2)。再次,用“正常”结果替换函数:

add(age, subtract(height, (weight*(iq/2)))

现在计算`减法(高度,(重量*(iq / 2))),从第一个减去第二个参数:

add(age, (height - (weight * (iq/2))))

最后,评估add()并将age添加到等式的其余部分,因此您的最终“正常”结果是:

age + height - (weight * iq/2)