0

下面的方法可以用我从未见过的方式在 Python 中写得更短(不带分号)吗?

@staticmethod
def __add(a, b):
    value = a + b
    if value > 1:
        integer = int(value)
        if value == integer:
            return 1.0
        return value - integer
    if value < 0:
        integer = int(value)
        if value == integer:
            return 0.0
        return value - integer + 1
    return value

代码类似于%,只是它允许将代码修改为最终值的任何端点。

4

3 回答 3

1
return 1 - (-value%1) if value > 0 else value%1
于 2011-02-20T02:13:44.113 回答
0

为什么不:

value = (a + b) % 1.0
if (value == 0.0 and a + b > 0) value = 1.0

我不确定为什么a + b > 0第二行需要这个条件,但它与代码中的行为相匹配,如果a + b是正整数,则返回 1,如果a + b是零或负整数,则返回 0。当a + b是整数而不是 0 时,您要返回 1 的具体原因是什么?

编辑:进一步查看文档,第一行可能应该是value = fmod(a + b, 1.0) + (1.0 if a + b < 0.0 else 0.0)fmod建议更精确,第二部分更正结果的符号)。

于 2011-02-20T02:04:30.870 回答
0

您可以使用以下方法。范围之外的颜色值0.0 - 1.0已正确修改。

@staticmethod
def __mod(value):
    div, mod = divmod(value, 1)
    if div > 0 and not mod:
        return 1.0
    return mod
于 2011-02-20T02:19:02.583 回答