Итерация для значения х в уравнении - PullRequest
0 голосов
/ 25 февраля 2019

Передо мной была задана задача итеративного вычисления значения x по заданной формуле: x 3 - 3x + 4 = 0 ** с использованием проб и ошибок.Сначала код будет включать -1.5 в качестве своей первой догадки, а затем работать вверх или вниз оттуда, чтобы попытаться получить ответ 0. Каждый раз, когда число вставляется в уравнение, код должен вывести «Ответ ## слишком большой / маленький»."

Я запустил код, но я немного застрял, так как он делает это только дважды, а затем останавливается.Я использовал цикл while, но не думаю, что использовал его правильно или что это может быть неправильным способом решения этой проблемы.Будем очень благодарны за любые предложения / фрагменты кода.

import cmath
end = ''

num = 0
guess = -1.5
calculation = (guess**3 - guess * 3 + 4)
print(calculation)
while calculation < 0:
    print("Guess is too small")
else:
    print("Guess is too large")

while calculation != 0 and calculation < 0:
    guess = guess + 0.1 
    calculation = (guess**3 - guess * 3 + 4)
else:
    guess = guess-0.1
    calculation = ((guess**3)-3*guess+4)
    print(calculation)

Ответы [ 3 ]

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

Непонятно, что именно вы ищете, но с этого следует начать:

import cmath

guess = -1.5

#put calculations that you use more than once in a function
def calc(a): 
    return round((a**3-a*3+4),1) #round your result

calculation=calc(guess)

while calculation !=0:
    if calculation<0:
        print('Number is too small')
        guess+=0.1
        calculation=calc(guess)
    elif calculation>0:
        print('Number is too large')
        guess-=0.1
        calculation=calc(guess)
0 голосов
/ 25 февраля 2019

Я думаю, вам нужно поместить все в один цикл while, где вы проверяете, соответствует ли ваш расчет ожидаемому результату, корректируйте предположение, если нет, прерываете цикл, если да.

guess = -1.5

while True:
    calculation = ((guess**3)-3*guess+4)
    print(calculation)

    if abs(calculation - 0) < 0.1:
        print("Correct guess: ", guess)
        break

    elif calculation < 0:
        print("Guess is too small")
        guess = guess + 0.1 

    elif calculation > 0:
        print("Guess is too large")
        guess = guess - 0.1

Обратите внимание, что я не сравниваю calculation == 0, поскольку при выборе шага 0.1 для guess маловероятно, что ваш расчет будет точно 0.Другими словами, calculation == 0 будет всегда false, и цикл никогда не остановится.Поэтому я проверяю, что calculation достаточно близко к 0, используя значение допуска 0.1 (то же, что и используемый шаг).В Python 3.5 или более поздней версии вы можете использовать math.isclose из математического модуля для выполнения этой же проверки.

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

Вы перепутали понятия while и if.Вам нужны оба для ... ну, для того, что я думаю вы пытаетесь сделать, попробуйте следующую схему.

while calculation != 0:
    if calculation < 0:
        # Guess is too small; print message and adjust guess
    else:
        # Guess is too large; print message and adjust guess

Я думаю, вы можете заполнить логику для каждоговетка "если".Особенно обратите внимание, что это прекратится, только если вы получите точный ответ.Если вы хотите работать с небольшим допуском, вам нужно отрегулировать условие выхода calculation != 0, чтобы иметь небольшую «комнату для маневра».

...