class calculation(object):
def multiply(self, a=5, b=6):
self.a = a
self.b = b
table = []
for a in range(1, 5):
row = []
for b in range(1, 5):
col = calculation()
col.multiply(a, b)
row.append(col)
table.append(row)
print('Times table')
for row in table:
for col in row:
print('{} x {} = {}'.format(col.a, col.b, col.a * col.b))
您的问题是
class
中的函数出现错误。试着缩进那个。另外,对于multiply
函数,您可能希望返回两个相乘的值:因为缩进错误,它不能工作。缩进是Python如何知道
def
是类上的一个方法而不是顶层的普通函数,如何知道哪些行是循环的一部分,循环的终点在哪里,等等。你必须把它弄对。但你有这个:因为
def
与class
返回同一级别,所以类中没有任何内容。这是不合法的;每个复合语句(以:
结尾的语句,如类定义)后面都必须有缩进的内容。你知道吗除此之外,
multiply
接受self
参数的事实意味着它几乎可以肯定是某个类的方法。你知道吗所以,要解决这个问题:
现在,它起作用了。但它似乎什么都没做,是吗?你知道吗
当然,总有可能你没有照搬整件事。或者,无论你从哪里复制它,代码都是错误的,而且漏了一行。但是让我们假设这确实是一个有用的函数,来自于某人的有用代码(除了缩进错误)。你知道吗
首先,你要做的就是定义一个类。如果从不创建该类的实例,更不用说对其调用任何方法,则该类不会执行任何操作。但假设您知道这一点,并且知道如何创建实例和调用方法。它似乎什么也没做。你知道吗
最有可能的情况是(同样,假设这是您实际要问的问题,并且您正确地复制了代码,并且……)这样做的目的是存储操作数以供以后使用。你知道吗
一个现实的例子说明了为什么你想这样做,那就是在某种表达式树库中,每当它解析一个
multiply
时,它就会调用*
,然后逐渐地从简单的表达式中构建出复杂的表达式,也许这样你就可以把表达式编译成C代码或者对它进行代数转换。你知道吗但你可能觉得这听起来像是胡言乱语,所以这里有一个简单但愚蠢的例子:
相关问题 更多 >
编程相关推荐