为什么我不能在python中调用另一个函数的函数。函数未定义错误

时间:2018-04-20 22:49:59

标签: python

我有一个非常简单的项目,因为在一个离散的数学课上,我在python中编码时遇到了麻烦(是的,我必须使用python)。

def factorial(number):
    x = 1
    y = 2
    while y <= number:
       x *= y
       y += 1
    return x

def choose(n, k):
    total = (factorial(n)/(factorial(k)*(factorial(n-k))))
    return total

目标是显示n的数值选择k。这段代码对我来说很有意义(我测试了阶乘并且它可以正常工作)但是我得到了错误&#34; name&#39; factorial&#39;没有定义&#34;它没有意义b / c它是明确定义的,它在同一个类中。

3 个答案:

答案 0 :(得分:3)

如果它是同一个班级的类方法,则必须使用ClassName.factorial()self.factorial(...)(如果它是方法)。

答案 1 :(得分:1)

简单的函数,因为它们不属于python中的类。

类用于保持状态以及改变此状态的方法,您没有状态可以跟踪,因此不要使用类。

您的阶乘函数也不起作用。您执行了未定义的x *= secreturn fir

答案 2 :(得分:0)

我认为您需要了解更多信息 Combinations , 你的实现并不完美,因为你必须得到3个不同数n:k,n-k的阶乘。

enter image description here

=

enter image description here

这是第二个公式的实现,并在它们之间的运行时进行比较。

from math import factorial
import time

def mine_choose(n, k) :
    _n = n
    numerator = 1
    while _n >= n-k+1 :
        numerator *= _n
        _n -= 1
    dominator = factorial(k)
    return numerator/dominator

def your_choose(n, k):
    total = (factorial(n)/(factorial(k)*(factorial(n-k))))
    return total



timer = time.clock()
print('mine_choose : ' , mine_choose(100000,3))
print ("Total time mine_choose : ", time.clock() - timer)


timer = time.clock()
print('your choose : ' , your_choose(100000,3))
print ("Total time of your_choose : ", time.clock() - timer)

结果是:

mine_choose :  166661666700000.0
Total time of mine_choose :  0.0013608076337989215
your choose :  166661666700000.0
Total time of your_choose :  0.5442163699942707