Learn Python The Hard Way, Ex21, EC3



Ex21,额外学分3:一旦你为谜题制定了公式,就进入那里,看看当你修改函数的各个部分时会发生什么。试着故意改变它以创造另一个价值。

我的代码:

def add(a, b):
    print "ADDING %d + %d" % (a, b)
    return a + b
def subtract(a, b):
    print "SUBTRACTING %d - %d" % (a, b)
    return a - b
def multiply(a, b):
    print "MULTIPLYING %d * %d" % (a, b)
    return a * b
def divide(a, b):
    print "DIVIDING %d / %d" % (a, b)
    return a / b

print "Let's do some math with just functions!"
age = add(30, 5)
height = subtract(78, 4)
weight = multiply(90, 2)
iq = divide(100, 2)
print "Age: %d, Height: %d, Weight: %d, IQ: %d" % (age, height, weight, iq)

print "Here is a puzzle."

# new formula
what = add(height, subtract(weight, multiply(iq, divide(age, 2))))
# original formula
# what = add(age, subtract(height, multiply(weight, divide(iq, 2))))

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

我为这个练习写的新公式在评论#新公式下面。在写完并运行之后,我注意到发生了一些奇怪的事情:除法年龄/2中的浮点被忽略了。

问题:为什么Python忽略age/2中的浮点(还有进一步的操作),我如何使它不忽略它?

如果你没有使用python3,你必须用开始你的主python文件

from __future__ import division

以制备CCD_ 1。否则1/2 == 0(整数除法,基本上向下取整)。

如果出于某种原因,您可以始终使用1//2来访问整数除法。

使用float()适用于任何情况,但如果要转换的是常量,则更简单的方法是显式地包含小数点;即CCD_ 5。只有一个操作数需要是浮点数,才能使输出也是浮点值。

编辑:正如J.F.在下面指出的那样,我在这里的措辞有点草率:我所说的"任何东西"指的是"变量和常量"。更一般地说,float()将尝试执行到浮点的合理转换,但当然也有这样的转换不可能或涉及丢失一些信息的情况-请参阅注释以获取一些示例。)

看起来您使用的是Python2.x,对吗?除法默认为整数除法,除非分子或分母是浮点数。您可以在除法中通过将其更改为return float(a) / b来更正它。

Python 2.x中的整数除法默认返回整数结果。Python 3中对此进行了更改。使用float()将其中一个数字转换为浮点,或者将from __future__ import division放在脚本的开头。

(他们在Learn Python the Hard Way中练习21,却没有提到这个可爱的Python怪癖?)

最新更新