循环出问题了
class Matrix:def __init__(self,x,y):
self.x=x
self.y=y
self.matrix=*self.x
self.matrix_column=*self.y
for i in range(self.x):
self.matrix=self.matrix_column
print(self.matrix)
def inputmatrix(self):
self.h=0
while self.h<self.y:
for self.w in range(self.x):
self.x=int(input('请输入数字:'))
self.matrix=self.x
self.h+=1
else:
pass
print(self.matrix)
m=Matrix(3,3)
这段代码循环这里出问题了,球球大佬们帮我看看{:9_221:}
m.inputmatrix()
请输入数字:1
请输入数字:2
请输入数字:3
请输入数字:4
请输入数字:5
请输入数字:6
请输入数字:7
请输入数字:8
请输入数字:9
请输入数字:0
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
m.inputmatrix()
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python39\矩阵计算模块.py", line 15, in inputmatrix
self.matrix=self.x
IndexError: list assignment index out of range 本帖最后由 jackz007 于 2020-11-10 17:17 编辑
在 self . x 是对象中的关键属性,在 inputmatrix(self)函数中,self . x 却被当作临时变量,频繁随意更改,难道你是真的吗?
把下面两句
self.x=int(input('请输入数字:'))
self.matrix=self.x
改为:
self . matrix = int(input('请输入数字:')) while self.h<self.y: #第1个循环,如果初始化为self.y=3,则循环0,1,2
for self.w in range(self.x): #第2个循环,如果初始化为self.x=3,则循环0,1,2
self.x=int(input('请输入数字:')) #所以你这个循环1次就让你调用1次input()函数让你输入内容
self.matrix=self.x#是不是很奇怪超出索引范围?因为你初始化类实例对象语句写错了
正确写法:m()=Matrix(3,3)
========另外,修改建议=======
def __init__(self,x,y):
self.x=x
self.y=y
self.matrix=[ for i in range(self.y)]#列表推导式显然简单多了
print(self.matrix) 本帖最后由 Lamotu 于 2020-11-10 16:41 编辑
根据你的代码来看楼主是想创建一个[,,]的初始列表,然后通过输入x,将x的值赋给列表中每个元素。self.w应该是表示大列表中的每个小列表中的每个元素的索引,最大值就是self.y,而且不会变。所以self.matrix=self.x应该是将输入的值赋给小列表中的每个元素,但是self.w的值是根据输入的x变化,这样的话当x的值大于y的时候self.w肯定超过小列表的最大索引值,建议改成
class Matrix:
def __init__(self,x,y):
self.x=x
self.y=y
self.matrix=*self.x
self.matrix_column=*self.y
for i in range(self.x):
self.matrix=self.matrix_column
print(self.matrix)
def inputmatrix(self):
self.h=0
while self.h<self.x:
for self.w in range(self.y):
self.num=int(input('请输入数字:'))
self.matrix=self.num
self.h+=1
else:
pass
print(self.matrix)
页:
[1]