在Python中循环到任意精度的有效方法

时间:2013-10-25 21:04:37

标签: python if-statement

以下是什么是Pythonic解决方案?

我正在读一个分辨率为.5的温度传感器。我需要写入它(它有一个可编程的恒温器输出),也是.5分辨率。

所以我编写了这个函数(Python 2.7)来舍入一个浮点作为输入到最近的.5:

def point5res(number):
    decimals = number - int(number)
    roundnum = round(number, 0)
    return roundnum + .5 if .25 <= decimals < .75 else roundnum

print point5res (6.123)

print point5res(6.25)

print point5res(6.8)

哪个工作正常,分别输出6.0,6.5和7.0。这就是我想要的。

我对Python比较陌生。这条线

return roundnum + .5 if .25 <= decimals < .75 else roundnum

让我对它的实施者表示钦佩。但它是Pythonic吗?

编辑:自发布以来,我学到了更多关于what is and isn't 'Pythonic'的知识。我的代码不是。 Cmd的下面是。谢谢!

2 个答案:

答案 0 :(得分:7)

如果你保持表达式简单,它们就被认为是pythonic,否则就会变得难以阅读。

我会像这样四舍五入到最接近的0.5:

round(number*2) / 2.0

或更一般地说:

def roundres(num, res):
    return round(num / res) * res

答案 1 :(得分:0)

return 0.5 * divmod (number, 0.5) [0] if number >= 0 else -0.5 divmod (number, -0.5) [0]

这看起来更好:

def roundToHalf (number):
    ''' Round to nearest half '''
    half = 0.5 if number >= 0 else -0.5
    return half * divmod (number, half) [0]