2016-06-17 2 views
0

Ich versuche, den Parameter einer Definition mit While-Schleife zu ändern.Automatisch def. Ändern Parameter mit Hilfe der Schleife

Zuerst habe ich eine Funktion erstellt, die eine Variable berechnet. Diese Funktion benötigt eine Eingabe, die sich ändert, wenn die while-Schleife True enthält. Ich habe versucht, die Eingabe mit einem "+ =" Befehl zu ändern, aber Python erkennt es nicht als eine Änderung der Eingabe in Formel. Irgendwelche Vorschläge?

def test(x,y,z): 

    count = 0 
    while count != 12: 
     x-= z 
     x= x* ((1+y)) 
     count += 1 
    return x 

end= test(x,y,z) 

def rerun(): 
    test(x,y,z) 

while end> 0: 
    z += 1 
    rerun() 

Bitte beachten Sie, dass die Variable, die ich in den Funktionstest eingeben möchte, "z" ist.

+2

Sie berücksichtigen sollten Argumente an die 'rerun' Funktion übergeben ... – Idos

+0

Ist das einer von diese "Pass by Reference vs Pass by Value" Fragen? –

+0

Keiner von Ihrem Code funktioniert wirklich. Sie haben globale Variablen 'x',' y', 'z',' end' und eine lokale Variable 'balance', die nicht definiert sind. –

Antwort

0

Sie müssen in den Parameter zu übergeben, die Sie pro Iteration ändern wollen:

def test(x,y,z): 
    for i in range(12): 
     x -= z 
     x *= 1 + y 
    return x 


def main(): 
    gx = 1 
    gy = 5 
    gz = 10 

    # Define a function rerun which binds gx to x, gy to y and leaves one parameter open 
    def rerun(z): 
     test(gx,gy,z) 


    # run rerun with that one left over parameter 
    for gz in range(100): 
     print rerun(gz) 

main() 

Sie werden feststellen, ich habe einige Code, auch geändert. end wurde nie definiert und while i < 0: i += 1 ist nicht guter Stil in Python.

0

Ihr Programm funktioniert bis auf ein paar Dinge.

Sie müssen end auf das Ergebnis der rerun() setzen, andernfalls, wenn die while end > 0 Schleife eingegeben wird, wird es für immer laufen, weil end nie geändert wird.

Sie müssen auch etwas von rerun zurückgeben. Wenn die erste end negativ ist, wird die letzte Schleife while end > 0 nicht eingegeben.

Sie haben nicht angegeben, was die Anfangswerte x, y und z sind. Ich habe mich für 10, 2 und 3 Hier ist der Ausgang:

test 2922930 2 3 12 
test 2125770 2 4 12 
end loop 2125770 10 2 4 
test 1328610 2 5 12 
end loop 1328610 10 2 5 
test 531450 2 6 12 
end loop 531450 10 2 6 
test -265710 2 7 12 
end loop -265710 10 2 7 

Das geänderte Programm

def test(x,y,z): 
    count = 0 
    while count != 12: 
     x-= z 
     x= x* ((1+y)) 
     count += 1 
    print "test", x, y, z, count 
    return x 

x = 10 
y = 2 
z = 3 
end= test(x,y,z) 

def rerun(): 
    return test(x,y,z) # return the result 

while end> 0:   # loop is never entered if initial `end` is negative 
    z += 1 
    end = rerun()  # update `end` 
    print "end loop", end, x, y, z 
+0

Danke .. es funktioniert perfekt – Arnold

Verwandte Themen