chinesischer Restsatz
Verfasst: Dienstag 25. August 2020, 08:46
Hallo liebe Mitglieder!
Vorweg möchte ich sagen, dass ich Anfänger bin, und daher womöglich nicht sehr elegant programmiere (dieser code ist nicht schön, mnM), bzw. evtl sehr dumme Fehler mache.
Ich habe hier einen Code, der eine Lösung des chinesischen Restsatzes in einem bestimmten Fall (für 3 kongruenzen) löst oder lösen sollte. (Nicht für den allgemeinen Fall!)
Mein Code:
def chinrest(a,b,c,d,e,f):
h1 = b*c
h2 = a*c
h3 = a*b
for i in range(1,a+1):
if (h1*i)%a == d:
sol1 = i
print(sol1)
for j in range(1,b+1):
if (h2*j)%b == e:
sol2 = j
print(sol2)
for k in range(1,c+1):
if (h3*k)%c == f:
sol3 = k
print(sol3)
return (sol1*h1 + sol2*h2 + sol3*h3) - a*b*c
a,b,c sind die Modulen und d,e,f die entsprechenden Reste.
Nun ist es so, dass diese Funktion durchaus das richtige Ergebnis in bestimmten Fällen liefert. So zum Beispiel für (3,5,7,1,2,4) oder auch (5,4,7,1,3,2). Rufe ich die Funktion jedoch mit (1,3,2,5,4,7) auf kommt eine Fehlermeldung. Und zwar:
"local variable 'sol1' referenced before assignment"
Nun verstehe ich nicht, warum diese Funktion für diese Eingabe nicht funktioniert und vor allem nicht die Fehlermeldung, denn die variable sol1 hat doch in der ersten for-schleife ihre Zuweisung bekommen.
Vielleicht kann mir jemand den Fehler erklären.
Danke
Vorweg möchte ich sagen, dass ich Anfänger bin, und daher womöglich nicht sehr elegant programmiere (dieser code ist nicht schön, mnM), bzw. evtl sehr dumme Fehler mache.
Ich habe hier einen Code, der eine Lösung des chinesischen Restsatzes in einem bestimmten Fall (für 3 kongruenzen) löst oder lösen sollte. (Nicht für den allgemeinen Fall!)
Mein Code:
def chinrest(a,b,c,d,e,f):
h1 = b*c
h2 = a*c
h3 = a*b
for i in range(1,a+1):
if (h1*i)%a == d:
sol1 = i
print(sol1)
for j in range(1,b+1):
if (h2*j)%b == e:
sol2 = j
print(sol2)
for k in range(1,c+1):
if (h3*k)%c == f:
sol3 = k
print(sol3)
return (sol1*h1 + sol2*h2 + sol3*h3) - a*b*c
a,b,c sind die Modulen und d,e,f die entsprechenden Reste.
Nun ist es so, dass diese Funktion durchaus das richtige Ergebnis in bestimmten Fällen liefert. So zum Beispiel für (3,5,7,1,2,4) oder auch (5,4,7,1,3,2). Rufe ich die Funktion jedoch mit (1,3,2,5,4,7) auf kommt eine Fehlermeldung. Und zwar:
"local variable 'sol1' referenced before assignment"
Nun verstehe ich nicht, warum diese Funktion für diese Eingabe nicht funktioniert und vor allem nicht die Fehlermeldung, denn die variable sol1 hat doch in der ersten for-schleife ihre Zuweisung bekommen.
Vielleicht kann mir jemand den Fehler erklären.
Danke