2
from __future__ import division
import math

def main():
    the_discriminant = discrim(1,0,-4)
    print the_discriminant
    the_rest(discrim,b,a)

def discrim(a,b,c):
    discriminant = math.sqrt(math.pow(b,2)-4*a*c)
    return discriminant, b,a

def the_rest(discrim,b,a):
    x = ((-b + discriminant) / 2*a)
    y = ((-b - discriminant) / 2*a)
    print x,y

if __name__ == '__main__':
    main()

我对 Python 相当陌生,我正在编写函数和返回变量,我对如何更正代码有点困惑。我正在编写一个二次求解器程序,但我需要在“其余”函数中使用判别式和 a、b、c 值。(它完成了方程式的其余部分。)我对如何返回值并在另一个函数中使用它们感到有点困惑。谢谢!

4

4 回答 4

7
the_rest(*the_discriminant)

或(我更喜欢这种方法):

d, b, a = discrim(1, 0, -4)
the_rest(d, b, a)
于 2012-07-13T02:07:07.450 回答
2

我相信这就是你想要做的。您的discrim函数返回一个元组(类似于数组)。然后当你调用时the_rest使用 a*表示你想发送元组的元素,而不是元组本身作为一个参数

from __future__ import division
import math

def main():
    the_discriminant = discrim(1,0,-4)
    print the_discriminant
    the_rest(*the_discriminant)

def discrim(a,b,c):
    discriminant = math.sqrt(math.pow(b,2)-4*a*c)
    return discriminant, b,a

def the_rest(discrim,b,a):
    x = (-b + discrim) / (2*a)
    y = (-b - discrim) / (2*a)
    return x, y

if __name__ == '__main__':
    main()
于 2012-07-13T02:18:34.650 回答
1

虽然 jamylak 的答案是正确的,但返回一个简单的类也更易于维护。然后,如果您更改了函数/返回值/表示,则调用代码:

  • 是基于名称/标识符的;变化非常灵活;它不依赖于顺序,也不依赖于元组长度。它还可以节省您在整个代码中键入隐含规则的时间和不必要的重复。
  • 如果有重大更改,解释器将在模块加载而不是运行时出错,因此您不会错过错误。这是因为您正在尝试访问命名成员,并且不依赖于某些“隐藏”或“隐含”规则,例如在代码中任何地方都没有形式化的元组排序。

对于一个更大的项目,这绝对是要走的路。

于 2012-07-13T02:20:51.953 回答
0

像您的discrim. 但是这样的代码并没有多大意义(IMO)。

像这样尝试:

#!/usr/bin/env python

from __future__ import division
import math

def main():
    a = 1
    b = 0
    c = -4
    the_discriminant = discrim(a, b, c)
    print the_discriminant
    x, y = the_rest(the_discriminant,b,a)
    print x, y

def discrim(a,b,c):
    discriminant = math.sqrt(math.pow(b,2)-4*a*c)
    return discriminant

def the_rest(d, b,a):
    x = ((-b + d) / 2*a)
    y = ((-b - d) / 2*a)
    return x,y

if __name__ == '__main__':
    main()
于 2012-07-13T02:18:15.090 回答