2016-05-04 11 views
0

Der folgende Code gibt "Arithmetisch", "Geometrisch" zurück, wenn das Eingabearray eine arithmetische und geometrische Folge ist, und -1, wenn es keines ist.Arithmetische/Geometrische Reihe

Obwohl der Code funktioniert gut, wenn ich

if s = arr.length - 1 

zu

if s == arr.length - 1 

in der while Schleife ändern, wird der Code nicht mehr richtig funktioniert.

Ich verstehe nicht warum. Sollte nicht == statt = arbeiten?

def ArithGeo(arr) 

    # code goes here 
    len = arr.length 
    difference = arr[len-1] - arr[len-2] 
    ratio = arr[len-1]/arr[len-2] 

    k = 0 
    s = k + 1 


    while (arr[s] - arr[k]) == difference && s < arr.length 
    if s = arr.length - 1 
     return "Arithmetic" 
    end 
    k += 1 
    end 

    k = 0 

    while arr[s]/arr[k] == ratio && s < arr.length 
    if s = arr.length - 1 
     return "Geometric" 
    end 
    k += 1 
    end 

    return -1 

end 

Antwort

3

Sie ändern nie den Wert von s, den ich denke, dass Sie tun möchten. Sie sollten an dem Punkt, dass tun, dass Sie k

k += 1 
s = k + 1 

auch erhöhen, an dem Punkt, wo Sie k für den geometrischen Test neu zu initialisieren, möchten Sie s auch ...

k = 0 
s = k + 1 

Sie zurücksetzen auch vollständig der variablen s loswerden könnte und es eine Methode machen ... fügen sie diese drei Zeilen am oberen Rand des Code

def s(k) 
    k + 1 
end 

Und entfernen Sie alle Zeilen, denen Sie s einen Wert zuweisen und verwenden Sie s(k) ... s(k) wird eine Methode, die immer den nächst höheren Wert an k

2

Der Unterschied zwischen diesen beiden Aussagen ist, dass variable s für die erste Anweisung gesetzt ist, aber nicht für die zweite. Die erste if Anweisung hat somit eine Nebenwirkung von s zu arr.length - 1

if s = arr.length - 1 # s => arr.length - 1 
if s == arr.length - 1 # s => undefined 

Einstellung Da die if Anweisung innerhalb einer Schleife ist, die whiles in seiner Expression verwendet die Änderung der Anweisung ändert das Verhalten des Programms.

+0

zurückgibt Vielen Dank für die Erläuterung der Begründung dahinter. – IliasP

0

Wenn Sie setzen == die Anweisung versuchen, zu überprüfen, ob sie Gleichen sind, mit = nur die Aussage richtig funktioniert, weil Ihr den Wert auf einen Wert nur einstellen, so ist dies immer wahr.

Wenn es anders ist, vergleichen Sie etwas mit Gleichgestellten als nur eine Variable, das kann immer wahr sein.