Попытка вызвать функцию в основном и не получить 2 выхода - PullRequest
0 голосов
/ 28 октября 2019

У меня есть проблема с домашним заданием, о которой я покажу ниже, которая просит меня упаковать функцию квадратного корня внутри главной функции. Если пользователь нажимает клавишу ввода, он выходит из цикла, иначе он просто продолжает работать. Здесь я сталкиваюсь с 2 проблемами, во-первых, когда я запускаю его, я всегда получаю 2 выхода, которые я знаю, почему это так, но я не могу обойти это. Во-вторых, я не знаю, как заставить пользователя нажать Enter и выйти из программы, не конвертируя все в строки.

import math

def newton():
     x = float(input("Enter a positive number: "))

     tolerance = 0.000001
     estimate = 1.0

     while True:
          estimate = (estimate + x / estimate) / 2
          difference = abs(x - estimate ** 2)
          if difference <= tolerance:
              break

     print("The program's estimate is", estimate)
     print("Python's estimate is     ", math.sqrt(x))

def main():
     x = str(input("Enter a positive number: "))
     if x == '':
          return
     else:
          x = float(x)
          newton()
main()

Вот пример ошибки

Enter a positive number: 2
Enter a positive number: 2
The program's estimate is 1.4142135623746899
Python's estimate is      1.4142135623730951

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Вам нужно только один раз запросить ввод и передать результат в функцию Ньютона. Чтобы продолжать цикл, я добавил цикл main, который будет постоянно запрашивать ввод. Если вход может быть преобразован в число с плавающей точкой, он вызовет ньютон, если нет, то он остановится.

import math

def newton(number):
     tolerance = 0.000001
     estimate = 1.0

     while True:
          estimate = (estimate + number / estimate) / 2
          difference = abs(number - estimate ** 2)
          if difference <= tolerance:
              break

     print("The program's estimate is", estimate)
     print("Python's estimate is     ", math.sqrt(number))

def main():
    while True:
        x = str(input("Enter a positive number: "))
        try:
            x = float(x)
            newton(x)
        except ValueError as ve:
            break
main()
0 голосов
/ 28 октября 2019
def newton(x):
    tolerance = 0.000001
    estimate = 1.0

    while True:
        estimate = (estimate + x / estimate) / 2
        difference = abs(x - estimate ** 2)
        if difference <= tolerance:
            break

    print("The program's estimate is", estimate)
    print("Python's estimate is     ", math.sqrt(x))

 def main():
     x = str(input("Enter a positive number: "))
     if x == '':
         return
     else:
         x = float(x)
         newton(x)

Попробуйте запустить это. Вы должны передать x в newton(x)

...