Есть ли лучший способ написать эту функцию сложения? - PullRequest
0 голосов
/ 20 февраля 2011

Может ли следующий метод быть написан в 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

Код похож на % за исключением того, что он позволяет конечной точке любойкод изменяет конечное значение до.

Ответы [ 3 ]

1 голос
/ 20 февраля 2011
return 1 - (-value%1) if value > 0 else value%1
0 голосов
/ 20 февраля 2011

Вы можете использовать следующий метод.Значения цвета вне диапазона 0.0 - 1.0 корректно изменены.

@staticmethod
def __mod(value):
    div, mod = divmod(value, 1)
    if div > 0 and not mod:
        return 1.0
    return mod
0 голосов
/ 20 февраля 2011

Почему бы и нет:

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

Я не уверен, почему условие a + b > 0 необходимо во второй строке, но оно соответствует поведению в вашем коде возврата 1, если a + b - положительное целое число, и 0, если a + b - ноль или отрицательное целое число По какой конкретной причине вы хотите вернуть 1, когда a + b является целым числом, а не 0?

РЕДАКТИРОВАТЬ: Глядя на документацию далее, эта первая строка, вероятно, должна быть value = fmod(a + b, 1.0) + (1.0 if a + b < 0.0 else 0.0) (fmod рекомендуется для большей точности, с этой второй частью, чтобы исправить знак результата).

...