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

次の方法を使用できます。の範囲外のカラー値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 に答える
0

なぜだめですか:

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

a + b > 02 行目に条件が必要な理由はわかりませんa + bが、正の整数の場合は1 を返しa + b、ゼロまたは負の整数の場合は 0 を返すコードの動作と一致します。a + b0 ではなく整数の場合に 1 を返したい具体的な理由は何ですか?

編集:ドキュメントをさらに見ると、その最初の行はおそらくvalue = fmod(a + b, 1.0) + (1.0 if a + b < 0.0 else 0.0)(fmodより正確にするために推奨され、結果の符号を修正するためにその2番目の部分が推奨されます)。

于 2011-02-20T02:04:30.870 に答える