Ich versuche, ein Programm zu schreiben, das Cubed Root mit Delta und Epsilon findet, aber ich stecke fest, weil ich nicht herausfinden kann, warum mein Programm in einer Endlosschleife läuft
num = 100
epsilon = 0.01
guess = num/3.0
while abs(guess**3 - num) >= epsilon:
delta = abs(guess**3 - num)/100
if guess**3 > num:
guess = (guess - delta)
if guess**3 < num:
guess = (guess + delta)
print("Guess:", guess)
Antworten:
2 für die Antwort № 1Als erstes sollten Sie verwenden if/elif
statt zu trennen if
Blöcke.
Folgendes berücksichtigen: wann guess**3 > num
ist True
, Sie aktualisieren guess
indem er seinen Wert verringert, so dass guess**3 < num
(die nächste if Bedingung) wird True
erneut, wodurch die ursprüngliche Aktualisierung rückgängig gemacht wird. Zusammenfassend ist der Wert von guess
wird in dieser Schleife nie geändert, und die Schleife wirbelt ins Unendliche.
Zweitens möchten Sie die regulieren delta
Wert (Bestrafung), da er alarmierend groß sein kann wie der Wert von num
erhöht sich.
num = 100
epsilon = 0.01
guess = num/3.0
while abs(guess**3 - num) >= epsilon:
delta = abs(guess**3 - num)/num
if guess**3 > num:
guess = (guess - delta*epsilon**0.5)
elif guess**3 < num:
guess = (guess + delta*epsilon**0.5)
print("Guess:", guess)