Python - проблемы с циклом while - PullRequest
0 голосов
/ 24 февраля 2020

Для моей программы я должен ввести положительное число, но если я введу отрицательное число, мне нужно, чтобы программа выдавала ошибку с сообщением: «Пожалуйста, используйте положительное число и повторите попытку», затем go вернитесь к детали где вы вводите номер. Он застрял в oop. Вот мой код:

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

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Вы можете исправить это, положив input() в while l oop

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--
0 голосов
/ 24 февраля 2020

Проблема заключается в том, что вам необходимо повторно запросить ввод данных пользователем в то время как l oop, как уже упоминали другие.

Более полная версия этого ответа также будет заключаться в рефакторинге заказа операций внутри пока l oop. В коде вы выполняете математические операции на x, прежде чем подтвердить, что он больше нуля. Если известно, что математика не работает без положительного целого числа, в вашем коде будет ошибка, которая может привести к необработанному исключению. Вот еще одна версия с переключателем оператора if, поэтому мы проверяем ввод, прежде чем делать что-либо еще, что снижает вероятность того, что программа выдаст исключение на основе ввода.

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 голосов
/ 24 февраля 2020
elif x < 0:
  print("Please enter a positive number") 
  # Receive the input number from the user
  x = float(input("Enter a positive number: "))

добавить 4-ую строку в вашем коде. это будет работать. Вы не получили ввод снова после попытки сбоя.

...