【发布时间】:2013-10-25 21:04:36
【问题描述】:
以下问题的 Pythonic 解决方案是什么?
我正在读取分辨率为 0.5 的温度传感器。我需要写入它(它有一个可编程恒温器输出),分辨率也是 0.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 的答案。谢谢!
【问题讨论】:
-
我想一般是负值
-
试试 6.51。结果是 7.5。但你是对的,链式比较是一个很棒的功能。三元表达式语法,一旦你“得到”它,也非常好。
-
那个 6.51 的结果很有趣
-
有些人可能会嘲笑它不那么可读,但大多数 C 系列语言都采用三元语句的形式。例如,在 JavaScript、Java、C# 和其他一些语言中:
return 0.25 <= decimals < 0.75 ? roundnum + 0.5 : roundnum; -
我认为这个问题应该重新命名为:“在 Python 中四舍五入到任意精度的有效方法”或类似的东西。这不是真正的 x 或 y 问题。
标签: python if-statement