Рекурсивная петля квадратного корня в python с эпсилоном .0001 - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужна помощь с калькулятором квадратного корня.Инструкции следующие:

"Вам необходимо реализовать вавилонский метод для вычисления квадратных корней. На основе этих основных функций вы должны написать интерактивную программу, которая:

предлагает пользователювведите целое значение выше нуля. Проверяет, что значение действительно выше нуля. Если нет, программа отображает сообщение об ошибке и снова запрашивает ввод. Вычисляет квадратный корень из значения, используя вавилонский метод, описанный выше.квадратный корень для пользователя, отформатированный таким образом, чтобы отображать ровно 3 десятичных знака (не более 3 и не менее 3). "

Я не могу использовать функцию sqrt.Я подхожу очень близко, но не могу добраться до нужной петли.Вот что у меня пока

# Ask user if they would like to calculate a square root for a single number or range.
single = input("Enter 'single' or 'range' to solve for a single square root or a range of values, respectively: ")

# Set error message to let the user know 'range' calculation are not currently available.
if single == 'single' or 'Single':

    # Ask user to enter a positive integer.
    number = int(input("Enter a positive integer value: "))

    # Set error message asking for valid number if user enters something other than a positive integer.
    while number < 0:
        print("Please enter a valid number.")
    else:
        # Choose epsilon
        epsilon = .0001

        # Choose estimate for the square root of x
        estimate = 4

        # Evaluate the estimate
        while number - estimate > epsilon:
            # Calculate the square root using the Babylonian Method.
            estimate = (number + 1.0) / 2.0
            second_estimate = (estimate + number / estimate) / 2.0

            # Print the users selected value and its square root.
            print("Value", "   ", "Square Root")
            print(" ", number, "        ", format(second_estimate, '.3f'))
else:
    # Tell user 'range' calculation are not currently available.
    print("That function is not currently available.")

1 Ответ

0 голосов
/ 05 февраля 2019

Неправильное условие для цикла while.number равно 9, а estimate переходит к 3.Таким образом, вы должны проверить number - estimate*estimate (принять абсолютное значение, потому что оценка сходится к 3 сверху для начального значения 4).Вам не нужна первая оценка согласно вавилонскому методу на википедии .Также оценка всегда 5 в вашем коде.(estimate = (number + 1.0) / 2.0, где number всегда 9)

number = 9
epsilon = .0001
estimate = 4
while abs(number - estimate*estimate) > epsilon:
    estimate = (estimate + number/estimate) / 2.0
    print("Value", "   ", "Square Root")
    print(" ", number, "        ", format(estimate, '.4f'))

Результат:

Value     Square Root
  9          3.1250
Value     Square Root
  9          3.0025
Value     Square Root
  9          3.0000
...