我不是在练习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?"
说明
在剧本的最后是一个谜题。我正在拿回报的价值 一个函数并将其用作另一个函数的参数。我 在一个链中这样做,这样我就可以使用它创建一个公式 功能。它看起来很奇怪,但是如果你运行脚本就可以了 看到结果。你应该做的是试着找出正常情况 将重新创建同一组操作的公式。
我的问题是什么是正常的公式,你是如何解决的?
答案 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))
。因此weight
和iq/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)