【问题标题】:Why does my code not return anything为什么我的代码不返回任何内容
【发布时间】:2016-11-26 00:23:04
【问题描述】:

目前对编程和尝试学习 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()

【问题讨论】:

  • 你已经定义了一些函数,但从未调用过它们中的任何一个。
  • 您要返回什么?我没有调用任何函数。 print c?
  • 在二等分函数中,我调用了 f(x).. 我真的不知道什么时候应该调用二等分函数。对,就是这样。我需要一个值,以便 12 次循环后 ba 为 0。
  • 你既不会从函数中返回东西,也不会调用它们。你为什么期望返回值?

标签: python return


【解决方案1】:

您必须明确使用return 关键字。可能是您目前拥有print c 的位置。

f需要在while循环后返回ba

【讨论】:

  • 其他cmets是正确的,你需要调用该函数。我以为这是一个sn-p。尝试在文件末尾添加print bisection()
  • 这基本上是正确的答案。我们无法猜测您还做错了什么,但是没有 return 关键字的函数确实不会返回任何内容(或者更确切地说,它们返回 None)。
【解决方案2】:

您不清楚希望返回值的函数是什么,但由于我无法发表评论和建议,但我会提供一个可能的答案。

首先,在这段代码中,您实际上从未调用任何函数。我假设这是在其他地方完成的。

至于f(x),没有return value,因为你还没有发表Return声明。我也会避免将变量用作全局变量,这通常是不好的做法。相反,如果您想修改 MonthlyInterestRate,请将其作为参数发送到 f() 并返回新值。

bisection 仅在f(c) == 0f() 没有Return 语句时返回,因此这永远不会发生。过去,一旦它退出循环,它只会打印 c 所以那里也没有返回值。

如果你想比较一个函数,它需要一个Returnstatement。

【讨论】:

  • 我编辑了我的代码,在两个函数中都使用了 return。我仍然不明白发生了什么问题。最终,我想获得 c 的值,以便 f(c) = 0
  • 我真的建议您先阅读编程指南。很明显你还不知道很多基础知识。作为此处的示例,您调用函数 bisection()。现在该函数将运行并完成它的事情,就是这样。它应该返回一个值,但是您从不指定如何处理该值,因此您将其丢弃。如果你想打印它,你需要打电话给print bisection()。或者您可以使用 ex 将其保存到变量中。 foo = bisection() 但你不能只调用一个函数并期望它做你没有告诉它做的事情。
【解决方案3】:

首先你应该将return ba 添加到函数f 以使f 返回一些东西:

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

然后,在脚本文件的最后添加bisection() 来调用它:

bisection()

【讨论】:

  • 谢谢,这是有道理的。现在它无法正常运行,我必须手动中断.. 呃,这太令人沮丧了
  • @Anna manually interrupt 是什么意思?如果有错误,错误信息是什么?
  • 我只是让它运行了大约 2-3 分钟,但仍然没有完成,所以我中断了运行。没有错误信息。我不知道该怎么形容它,对不起。
  • @Anna 你的while a != b: 循环代码块一定有问题。也许你的代码无法评估a == b,所以让你的代码总是在这个循环中循环。仔细检查这个块。
【解决方案4】:

首先,在您的函数f 中,如果您想检查与 0 的相等性,您没有所需的 return 语句。

f 函数中添加return 语句后,您必须编写程序主体,因为您只有两个函数,但您没有调用它们来获取结果值...

我了解到你的程序必须使用bisection function写法

bisection()

【讨论】:

    【解决方案5】:

    两个原因。 一,您的函数 f(x) 没有明确的 return 语句。如果一个函数不包含显式返回,它将有一个隐式返回,即“None”(None 是 python 对象)。 其次,调用 f(x) 的唯一地方是在 bisection() 中,它本身永远不会被调用。 因此,由于您的任何函数都没有被调用,因此您的代码不会返回任何内容。 定义后尝试调用 bisection()

    【讨论】:

    • 我编辑了代码,所以我在两个函数中都使用了 return,最后调用了 bisection()。但是,不,它不会停止运行,我必须手动中断它
    • 可能与您的 while 循环有关。你确定条件正确吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-13
    • 2012-04-02
    • 2018-01-24
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    相关资源
    最近更新 更多