7

以下问题的 Pythonic 解决方案是什么?

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

所以我编写了这个函数(Python 2.7)来将浮点数作为输入四舍五入到最接近的 0.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 的吗?

编辑:自从发布以来,我对什么是和不是 'Pythonic'有了更多的了解。我的代码不是。下面是 Cmd 的答案。谢谢!

4

2 回答 2

8

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

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

round(number*2) / 2.0

或更笼统地说:

def roundres(num, res):
    return round(num / res) * res
于 2013-10-25T21:09:25.783 回答
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]
于 2013-10-25T21:35:30.647 回答