2017-07-24 4 views
-3

Ich bin wirklich neu in Python. Ich versuche, das zum Laufen zu bringen.für Schleife, wenn Aussage

import math 
number, times = eval(input('Hello please enter the value and number of times to improve the guess followed by comma:')) 
guess=number/2 
sq_math= math.sqrt(number) 
if times>1: 
    for i in range(2,times+1): 
     guess=(guess+times/guess)/2 
     if round(guess,1) == round(sq_math,1): 
     break 

else: 
    pass 

print('Newtons method guessed {0}, square root was {1}'.format(guess, sq_math)) 

Also was er am besten? Danke Jungs!

+1

Hallo, Willkommen zu Stack Overflow. Bitte überprüfen Sie [ask] und helfen Sie uns, indem wir Ihnen erklären, was Sie vorhaben, welche Fehler Sie treffen und was Sie nicht verstehen. –

+1

was macht es? Was soll es tun? irgendwelche Fehler? Welche Leistung erwarten Sie? Was für einen Output bekommst du? – jacoblaw

+1

Bitte bitte bitte, tun Sie dies nicht: 'Nummer, mal = eval (Eingabe (...))' –

Antwort

1

Sie wollen die boolean tun Ungleich-Vergleich round(guess,1) != round(sq_math,1) in einem separaten if Klausel, wie Sie für die Gleichheit Vergleich == getan haben:

if times>1: 
    # break this next line up in to two lines, `for` and `if` 
    # for i in range(2,times+1) and round(guess,1) != round(sq_math,1): 
    for i in range(2,times+1):     # for check 
     if round(guess,1) != round(sq_math,1): # if check 
      guess=(guess+times/guess)/2 
     if round(guess,1) == round(sq_math,1): 
      break 
     times-=1 #decrement times until we reach 0 

Demo:

Hello please enter the value and number of times to improve the guess followed by comma:9,56 
Newtons method guessed 3.0043528214, square root was 3.0 
+0

"Hallo, bitte geben Sie den Wert und die Anzahl der Male, um die Vermutung zu verbessern, gefolgt von Komma: 9,56 Newton Methode erraten 7.483314773547883, Quadratwurzel war 3,0 "aus irgendeinem Grund, es will mir keine richtige Antwort geben. –

+0

Sorry, ich habe keine Ahnung, was die richtige Antwort ist. Was ist die richtige Antwort, die Sie bekommen möchten? https://stackoverflow.com/questions/45291577/for-loop-if-statement/45292363?noredirect=1#comment77545467_45291577 – davedwards

+0

können Sie in der Formel sehen. wenn rund (raten) wird 3 sollte es brechen und drucken erraten. –

0

Ich glaube, das primäre Problem ist, dass diese Formel falsch ist:

guess = (guess + times/guess)/2 

es sein sollte:

guess = (guess + number/guess)/2 

Ich habe kein Problem mit Ihrer if Aussage noch deine for Schleife sehen. Eine komplette Lösung:

import math 

number = int(input('Please enter the value: ')) 
times = int(input('Please enter the number of times to improve the guess: ')) 

answer = math.sqrt(number) 

guess = number/2 

if times > 1: 
    for _ in range(times - 1): 
     guess = (guess + number/guess)/2 
     if round(guess, 1) == round(answer, 1): 
      break 

print("Newton's method guessed {0}; square root was {1}".format(guess, answer)) 

USAGE

% python3 test.py 
Please enter the value: 169 
Please enter the number of times to improve the guess: 6 
Newton's method guessed 13.001272448567825; square root was 13.0 
% 

Obwohl ich glaube, ich bin wirklich die babylonische Methode zum Auffinden von Quadratwurzeln zu implementieren.

+0

Danke Ja die Formel war falsch! –