Calcul de la racine carrée à l'aide de la méthode de Newton (erreurs!)

Je suis en train de terminer un problème de maths qui se rapproche de la racine carrée d'un nombre à l'aide de Newton de deviner et de la méthode de contrôle en Python. L'utilisateur doit entrer un numéro, une première estimation pour le nombre, et combien de fois ils veulent vérifier leur réponse avant de retourner. Pour faciliter les choses et de faire connaissance en Python (j'ai seulement commencé l'apprentissage de la langue il y a quelques mois) je l'ai divisé en un certain nombre de petites fonctions; le problème aujourd'hui, cependant, c'est que je vais avoir de la difficulté à l'appel de chaque fonction et de transmettre les numéros de travers.

Voici mon code, avec des commentaires pour les aider (chaque fonction est dans l'ordre d'utilisation):

# 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()

Actuellement, j'ai cette erreur: g, avg = improveG(guess, x)
TypeError: 'float' object is not iterable.

La dernière fonction utilise la dernière itération de la conjecture de soustraire le calcul de la racine carrée de la méthode, et retourne la différence en général.
Suis-je encore à faire de ce droit? Code de travail serait appréciée, avec des suggestions, si vous pouvez fournir. Encore une fois, je suis un débutant, donc je m'excuse pour les idées fausses, ou aveugle, les erreurs évidentes.

avez-vous regardé radiantbytes.com/books/python-latex/src/chap9.html - tout est là 🙂

OriginalL'auteur user1739537 | 2012-10-11