我是编程新手。
def start():
x = 4
def addition():
n = 3
def exponential():
z = 2
def multiplication():
l = 2
print(x + n ** z * l)
return multiplication
equals = start()
equals()
为什么我得到“Nonetype”对象不可调用错误?
答案 0 :(得分:3)
你混淆了一堆编程概念:
特别是对于您发布的代码,addition(),multiplication()根本没有任何返回值,即None。 exponential()返回乘法,即只返回None的函数。但是,无论如何,addition()和start()都忽略了,因为它们也没有return语句,因此它们隐式返回None。
调用start()只会给你None,所以你只需要分配equals = None
。不是像你想要的那样数学表达的结果。
所以:
答案 1 :(得分:0)
@BrenBarn首先回答这个问题。但我想发布代码以使其更清晰,并指出一些方法来使其更好。
def start():
x = 4
def addition():
n = 3
def exponential():
z = 2
def multiplication():
l = 2
print (x + n ** z * l)
return multiplication()
return exponential()
return addition()
equals = start()
print equals #Output: 22
但是,这不是列出不同方法的最佳方法。您应该学习如何在python代码中使用类。
我将定义一个名为“mathOperations”的类。我将定义三个方法(函数):加法,指数,乘法。这些功能是可重用的。
class mathOperations():
def addition(self,x,y):
return x+y
def exponential(self,x,y):
return x**y
def multiplication(self,x,y):
return x*y
m= mathOperations()
z=2
l=2
x=4
n=3
result= m.addition(x,m.multiplication(m.exponential(n,z),l))
print result #Output:22
你应该学习如何使你的代码可重用,尝试google“程序编程”; “面向对象编程”,或者查看“学习Python困难之路”一书。这些是第一个也是最常用的方法,可以使您的代码重用。可以把它想象成解决问题的通用数学函数。