Finden der Quadratwurzel mit der Newtonschen Methode (Fehler!)

Ich arbeite daran, ein mathematisches Problem zu lösen, das sich der Quadratwurzel einer Zahl annähert, indem ich Newtons Schätz- und Prüfmethode in Python verwende. Der Benutzer muss eine Nummer eingeben, eine erste Vermutung für die Nummer und wie oft er seine Antwort überprüfen möchte, bevor er zurückkehrt. Um es einfacher zu machen und Python kennenzulernen (ich habe erst vor ein paar Monaten angefangen, die Sprache zu lernen), habe ich es in eine Reihe kleinerer Funktionen aufgeteilt. Das Problem ist jetzt jedoch, dass ich Probleme habe, jede Funktion aufzurufen und die Nummern durchzuleiten.

Hier ist mein Code mit Kommentaren zur Hilfe (jede Funktion ist in der Reihenfolge ihrer Verwendung):

# This program approximates the square root of a number (entered by the user)
# using Newton's method (guess-and-check). I started with one long function,
# but after research, have attempted to apply smaller functions on top of each
# other.
# * NEED TO: call functions properly; implement a counting loop so the
# goodGuess function can only be accessed the certain # of times the user
# specifies. Even if the - .001 range isn't reached, it should return.

# sqrtNewt is basically the main, which initiates user input.

def sqrtNewt():
    # c equals a running count initiated at the beginning of the program, to
    # use variable count.
    print("This will approximate the square root of a number, using a guess-and-check process.")
    x = eval(input("Please type in a positive number to find the square root of: "))
    guess = eval(input("Please type in a guess for the square root of the number you entered: "))
    count = eval(input("Please enter how many times would you like this program to improve your initial guess: ")) 
    avg = average(guess, x)
    g, avg = improveG(guess, x)
    final = goodGuess(avg, x)
    guess = square_root(guess, x, count)
    compare(guess, x)


# Average function is called; is the first step that gives an initial average,
# which implements through smaller layers of simple functions stacked on each
# other.
def average(guess, x) :
    return ((guess + x) / 2)

# An improvement function which builds upon the original average function.
def improveG(guess, x) :
    return average(guess, x/guess)

# A function which determines if the difference between guess X guess minus the
# original number results in an absolute vale less than 0.001. Not taking
# absolute values (like if guess times guess was greater than x) might result
# in errors
from math import *
def goodGuess(avg, x) :
    num = abs(avg * avg - x)
    return (num < 0.001)

# A function that, if not satisfied, continues to "tap" other functions for
# better guess outputs. i.e. as long as the guess is not good enough, keep
# improving the guess.
def square_root(guess, x, count) :
    while(not goodGuess(avg, x)):
        c = 0
        c = c + 1
        if (c < count):
            guess = improveG(guess, x)
        elif (c == count):
            return guess
        else :
            pass

# Function is used to check the difference between guess and the sqrt method
# applied to the user input.
import math
def compare(guess, x):
    diff = math.sqrt(x) - guess
    print("The following is the difference between the approximation") 
    print("and the Math.sqrt method, not rounded:", diff)

sqrtNewt()

Derzeit erhalte ich diesen Fehler:g, avg = improveG(guess, x) TypeError: 'float' object is not iterable. Die endgültige Funktion verwendet die endgültige Iteration der Schätzung, um von der Methode der mathematischen Quadratwurzel abzuziehen, und gibt die Gesamtdifferenz zurück. Mache ich das überhaupt richtig? Arbeitscode wird gebeten, Vorschläge zu machen, wenn Sie ihn zur Verfügung stellen können. Wieder bin ich ein Neuling, also entschuldige ich mich für falsche Vorstellungen oder blind offensichtliche Fehler.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage