Ich habe gerade einen Code geschrieben, um etwas zu entschlüsseln. Wenn ich eine kleine Nummer versuche, funktioniert es gut. Wenn ich jedoch eine große Zahl versuche, wird ein Fehler ausgegeben."lokale Variable 'x' vor Zuweisung referenziert" wenn Daten größer werden
Das Ding, was Ich mag würde, ist diese entschlüsseln:
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
Ich habe auch versucht, n 1 bis 14, die alle das Ergebnis richtig ist.
Ich habe gerade den Grund gefunden, dass ich eine weitere int()
in sqrt (n) bereitstellen sollte.
circle = int(int(sqrt(n)/2) + 0.5)
Danke an alle.
Also was ist der Wert von 'Quotienten' dort? – melpomene
Wenn Ihr Quotient größer als 3 ist, wird der Wert von "x" nicht festgelegt. Daher erhalten Sie den Fehler, wenn Sie versuchen, 'x' zurückzugeben. –
Danke für Sie erinnern. Ich habe gerade versucht, dass der Quotient 4 ist, also ist das der Grund, warum es einen Fehler gibt. Aber warum Quotient wird 4, ich bin verwirrt. Bitte gib mir weitere Hinweise. – Mangosteen