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?"
我为此练习编写的新公式位于注释#new formula下。在编写并运行它之后,我注意到发生了一些奇怪的事情:分区时代/ 2中的浮点被忽略。
问题:为什么Python会忽略age / 2中的浮点(还有进一步的操作)以及如何让它忽略它呢?
答案 0 :(得分:5)
如果你没有使用python3,你必须用
开始你的主要python文件from __future__ import division
制作1/2 == 0.5
。否则1/2 == 0
(整数除法,基本上四舍五入)。
如果出于某种原因,您可以始终使用1//2
来访问整数除法。
答案 1 :(得分:3)
使用float()
可以解决任何问题,但是如果要转换的是常量,则更简单的方法是明确包含小数位;即divide(age, 2.)
。只有一个操作数需要是浮点数才能使输出也是浮点数。
(编辑:,正如JF在下面指出的那样,我的措辞有点草率:“任何”我的意思是“变量和常量”。更一般地说,float()
会尝试对浮点数进行合理的转换,但当然有些情况下这种转换是不可能的,或者涉及丢失一些信息 - 请参阅注释以获取一些示例。)
答案 2 :(得分:1)
看起来你正在使用Python 2.x,是吗?除非分子或分母是浮点数,否则除法默认为整数除法。您可以通过将其更改为return float(a) / b
来纠正它。
答案 3 :(得分:1)
Python 2.x中的整数除法默认返回整数结果。这在Python 3中已更改。使用float()
将其中一个数字转换为浮点数,或者将from __future__ import division
放在脚本的开头。
(他们在学习Python艰难的方式中起步练习21而没有提到这个可爱的Python怪癖?)