我有一个非常简单的项目,因为在一个离散的数学课上,我在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它是明确定义的,它在同一个类中。
答案 0 :(得分:3)
如果它是同一个班级的类方法,则必须使用ClassName.factorial()
或self.factorial(...)
(如果它是方法)。
答案 1 :(得分:1)
简单的函数,因为它们不属于python中的类。
类用于保持状态以及改变此状态的方法,您没有状态可以跟踪,因此不要使用类。
您的阶乘函数也不起作用。您执行了未定义的x *= sec
和return fir
。
答案 2 :(得分:0)
我认为您需要了解更多信息 Combinations , 你的实现并不完美,因为你必须得到3个不同数n:k,n-k的阶乘。
=
这是第二个公式的实现,并在它们之间的运行时进行比较。
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