Я просто написал код для декодирования чего-то. Когда я пробую небольшое количество, он работает хорошо. Однако, когда я пробую какое-то большое количество, это делает неправильный.«Локальная переменная« 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
Я также попробовал п от 1-14, все это результат правильно.
Я только что нашел причину, по которой я должен предоставить еще int()
в sqrt (n).
circle = int(int(sqrt(n)/2) + 0.5)
Спасибо всем.
Так что такое значение 'quotient' там? – melpomene
Если ваш коэффициент больше 3, вы не устанавливаете значение 'x'. Следовательно, вы получаете ошибку при попытке вернуть 'x'. –
Спасибо, что напомнили. Я просто попробовал, чтобы коэффициент был равен 4, так что это причина, по которой возникает ошибка. Но почему фактор станет 4, я смущен. Пожалуйста, дайте мне больше советов. – Mangosteen