何かをデコードするコードを書きました。少数を試してみるとうまくいく。しかし、私はいくつかの大きな数字を試してみると、それは間違っています。"データが大きくなるときにローカル変数 'x'が代入の前に参照される"
def decode(n):
if n == 0:
return (0, 0)
circle = int(sqrt(n)/2 + 0.5)
largest = (2 * circle + 1) ** 2 - 1
distance = largest - n
quotient = distance // (2 * circle)
remainder = distance % (2 * circle)
if quotient == 0:
x = circle- remainder
y = - circle
if quotient == 1:
x = -circle
y = -circle + remainder
if quotient == 2:
x = -circle + remainder
y = circle
if quotient == 3:
x = circle
y = circle - remainder
return (x, y)
print(decode(2070)) #(23, 23)
print(decode(204019576686482721392)) #(7141771, 7141771081)
print(decode(142656302882002193830320))
#Traceback (most recent call last):
# File line 51, in <module>
# print(decode(142656302882002193830320))
# File line 47, in decode
# return (x, y)
#UnboundLocalError: local variable 'x' referenced before assignment
私も試してみましたN 1-14から、すべての結果は右です。
私は別のint()
をsqrt(n)で提供しなければならない理由を発見しました。
circle = int(int(sqrt(n)/2) + 0.5)
ありがとうございます。
だから '商 'の価値は何ですか? – melpomene
商が3より大きい場合、 'x'の値を設定することはありません。したがって、 'x'を試して返すときにエラーが発生します。 –
ありがとうございます。私は商を4にしようとしたので、これがエラーの原因です。しかし、なぜ商が4になるのか、私は混乱しています。私にもっとヒントを与えてください。 – Mangosteen