Für mein Programm muss ich eine positive Zahl eingeben. Wenn ich jedoch eine negative Zahl eingebe, muss das Programm einen Fehler mit der Meldung "Bitte verwenden Sie eine positive Zahl und versuchen Sie es erneut" eingeben. Gehen Sie dann zu dem Teil zurück, in dem Sie eine Zahl eingegeben haben . Es steckt in einer Schleife. Hier ist mein Code:

import math

# Receive the input number from the user
x = float(input("Enter a positive number: "))

#Initialize the tolerance and estimate
tolerance = 0.000001
estimate = 1.0

#Perform the successive approximations
while True:
    estimate = (estimate + x / estimate) / 2
    diference = abs(x - estimate ** 2)
    if diference <= tolerance:
       break
    elif x < 0:
        print("Please enter a positive number")
#Output the result
print("The program's estimate:", estimate)
print("Python's estimate:     ", math.sqrt(x))
-1
Xayvier 24 Feb. 2020 im 07:41

4 Antworten

Beste Antwort

Das Problem ist, dass Sie die Benutzereingaben innerhalb der while-Schleife erneut anfordern müssen, wie andere bereits erwähnt haben.

Eine gründlichere Version dieser Antwort wäre auch, die Reihenfolge der Operationen innerhalb der while-Schleife umzugestalten. Im Code führen Sie die mathematischen Operationen für x aus, bevor Sie überprüfen, ob sie größer als Null sind. Wenn bekannt ist, dass die Mathematik ohne eine positive Ganzzahl fehlschlägt, liegt ein Fehler in Ihrem Code vor, der zu einer nicht behandelten Ausnahme führen kann. Hier ist eine andere Version mit Schaltern der if-Anweisung, sodass wir die Eingabe überprüfen, bevor wir etwas anderes tun. Dadurch ist es weniger wahrscheinlich, dass das Programm eine Ausnahme basierend auf der Eingabe auslöst.

import math

#Initialize the tolerance and estimate
tolerance = 0.000001
estimate = 1.0

#Perform the successive approximations
while True:
    # Receive the input number from the user
    x = float(input("Please enter a positive number:"))
    if x <= tolerance:
        print("Invalid input.")
        continue
    else:
        estimate = (estimate + x / estimate) / 2
        diference = abs(x - estimate ** 2)
        break

#Output the result
print("The program's estimate:", estimate)
print("Python's estimate:     ", math.sqrt(x))
0
Jon Sakas 24 Feb. 2020 im 05:10

Sie können das Problem beheben, indem Sie Ihre input() in die while Schleife einfügen

import math

#Initialize the tolerance and estimate
tolerance = 0.000001
estimate = 1.0

while True:

    # Receive the input number from the user
    x = float(input("Enter a positive number: "))

    estimate = (estimate + x / estimate) / 2
    diference = abs(x - estimate ** 2)
    if diference <= tolerance:
       break
    elif x < 0:
        print("Please enter a positive number")
--snip--
1
wulu 24 Feb. 2020 im 04:52

Dies liegt daran, dass Sie keine Eingabe mehr für x vornehmen.

elif x < 0:
    print("Please enter a positive number")
    // add this line to ask for input again
    // better with try/except
    try:
        x = float(input("Enter a positive number: "))
    except ValueError:
        pass
0
Harshal Parekh 24 Feb. 2020 im 05:07
elif x < 0:
  print("Please enter a positive number") 
  # Receive the input number from the user
  x = float(input("Enter a positive number: "))

Fügen Sie die 4. Zeile in Ihren Code ein. es wird klappen. Sie haben die Eingabe nach dem Fehlerversuch nicht erneut erhalten.

0
Sazzad 24 Feb. 2020 im 04:52