2016-07-22 3 views
-6

довольно новый для программирования и пытается изучить Python на данный момент. У меня этот код, и я не понимаю, почему я не получаю возвращаемого значения :(Почему мой код ничего не возвращает

balance = 3200 
annualInterestRate = 0.2 
monthlyInterestRate = (annualInterestRate/12 + 1) 


def f(x): 
    m = 0 
    ba = balance 
    while m < 12: 
     ba = (ba - x)*monthlyInterestRate 
     m += 1 
    return ba 

def bisection(): 
    a = 0 
    b = balance 
    c = (a+b)/2 
    while a != b: 
     if f(c) == 0: 
      return c 
     elif f(c) < 0: 
      a = c 
     else: 
      b = c 

     c = (a+b)/2 

    return c 



bisection() 
+3

Вы определили некоторые функции, но никогда не вызываете их. –

+0

Что вы хотите вернуть? Я не вызываю никакой функции. 'Print c'? –

+0

В функции деления пополам я называю f (x). Я действительно не знаю, когда я должен назвать функцию деления пополам. Да, точно. Мне нужно значение, так что ba равно 0 после 12 циклов. – Anna

ответ

1

Вы должны явно использовать return ключевое слово. Возможно, где вы в настоящее время print c.

f потребности вернуться ba после цикла.

+0

Я пробовал это, все еще не работает. :/ – Anna

+0

Другие комментарии правы, что вам нужно вызвать функцию. Я думал, что это фрагмент. Попробуйте добавить 'print bisection()' в конце файла. –

+0

Это в основном правильный ответ. Мы не можем догадаться, что еще вы сделали неправильно, но функции, у которых нет ключевого слова 'return', действительно ничего не возвращают (вернее, они возвращают' None'). – tripleee

0

вы неясные о том, какие функции вы ожидаете, чтобы вернуть значение, но так как я не могу комментировать и прод пока я приведу возможный ответ.

Прежде всего, в этом коде вы фактически не называете какие-либо функции. Я предполагаю, что это сделано в другом месте.

Что касается f(x), то нет return value, потому что вы не сделали заявление Return. Я бы также воздержался от использования переменных в качестве глобалов, это, как правило, плохая практика. Вместо этого, если вы хотите изменить MonthlyInterestRate, отправьте его как параметр в f() и верните новое значение.

bisection только возвращается, если f(c) == 0, но f() не имеет инструкции Return, так что этого никогда не произойдет. Прошлое, что, как только он выйдет из цикла, он будет печатать c так, чтобы там не возвращалось значение.

Если вы хотите сравнить функцию, она НЕОБХОДИМА инструкцию Return.

+0

Я редактировал свой код, используя возврат в обеих функциях. Я все еще не понимаю, что происходит. В конечном счете, я хотел бы получить значение для c, так что f (c) = 0 – Anna

+0

Я бы рекомендовал сначала прочитать руководство по программированию. Очевидно, вы еще не знаете много основ. В качестве примера здесь вы называете функцию bisection(). Теперь функция будет работать и делать это, и все. Он должен возвращать значение, однако вы никогда не укажете, что делать с этим значением, чтобы вы его выбросили. Если вы хотите его распечатать, вам нужно вместо этого вызвать 'print bisection()'. Или вы можете сохранить его в переменной с ex. 'foo = bisection()', но вы не можете просто вызвать функцию и ожидать, что она сделает то, что вы не сказали ей. – Zpooks

0

Во-первых, вы должны добавить return ba функционировать f сделать f возвращение коснуться:

def f(x): 
    m = 0 
    ba = balance 
    while m < 12: 
     ba = (ba - x)*monthlyInterestRate 
     m += 1 
    retrun ba 

Затем добавьте bisection() в последний из файла сценария, чтобы назвать его:

bisection() 
+0

Спасибо, это имеет смысл. Теперь это просто не будет работать правильно, и мне придется вручную прерывать. Урх, это так расстраивает – Anna

+0

@ Аnna, что вы имеете в виду «вручную прерывать»? Если ошибка, то какая ошибка msg? –

+0

Я просто пропустил его около 2-3 минут, но до сих пор не было сделано, поэтому я прервал ход. Нет сообщения об ошибке. Я не знаю, как еще это описать, извините. – Anna

0

Прежде всего , в вашей функции f у вас нет оператора возврата, который вам нужен, если вы хотите проверить равенство с 0.

После добавления оператора return в функции f вы должны написать тело своей программы, потому что у вас есть только две функции, но вы не вызываете их, чтобы получить значение результата ...

Я понимаю, что ваша программа должен использовать bisection function письмо

bisection() 
0

Две причины. Во-первых, ваша функция f (x) не имеет явного оператора return. Если функция не содержит явного возврата, она будет иметь неявный, то есть «None» (None - объект python). Во-вторых, единственное место, где f (x) вызывается, является делом пополам(), которое само никогда не называется. Итак, поскольку ни одна из ваших функций никогда не вызывается, ваш код ничего не вернет. Попробуйте вызвать bisection() после его определения

+0

Я отредактировал код, так что я использую return в обеих функциях, а bisection() вызывается в конце. Тем не менее, нет, он не остановится, и я должен вручную его прерывать. – Anna

+0

Возможно, что-то с вашим циклом while. Вы уверены, что все правильно? –

Смежные вопросы