问题的发现是源于MIT那门Python公开课的一个小练习:
“Write a Python function, clip(lo, x, hi)
that returns lo
if x
is less than lo
; hi
if x
is greater than hi
; and x
otherwise. For this problem, you can assume that lo < hi
.”要求不能使用条件语句,可以使用max()和min()函数。
标准答案是:
def clip(lo, x, hi):
'''
Takes in three numbers and returns a value based on the value of x.
Returns:
- lo, when x < lo
- hi, when x > hi
- x, otherwise
'''
return min(max(x, lo), hi)
我的答案是:
def clip(lo, x, hi):
return sum([lo,x,hi])-max(lo,x,hi)-min(lo,x,hi)
思路上是没有问题的,但是运行结果会出错,比如
后来搞清楚是实数的无限精度跟计算机的有限内存之间的矛盾,在浮点数相减的时候就会出现精度误差。下文是转载的一篇详解: