贾雨村 发表于 2020-11-10 13:32:49

循环出问题了

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 14:06:49

本帖最后由 jackz007 于 2020-11-10 17:17 编辑

         在 self . x 是对象中的关键属性,在 inputmatrix(self)函数中,self . x 却被当作临时变量,频繁随意更改,难道你是真的吗?
         把下面两句
                self.x=int(input('请输入数字:'))
                self.matrix=self.x
      改为:
                self . matrix = int(input('请输入数字:'))

笨鸟学飞 发表于 2020-11-10 14:24:17

      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:34:41

本帖最后由 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]
查看完整版本: 循环出问题了