在此代码中显示数据有什么问题?

时间:2016-07-12 17:46:22

标签: python

class s(object):
    def vrod(self):
        self.name=(input("enter name:"))
        self.stno=int(input("enter stno:"))
        self.score=int(input("enter score:"))

    def dis(self):
        j=0
        while j<3:
            print("enter name:",self.name,"enter stno:",self.stno,"enter score:",self.score)
            j+=1


y=[]
j=0
st=s()

while j<3:
    st.vrod()
    y.append(st)
    j+=1

st.dis()

我想显示我输入的信息,但我不能。你想我运行它并输入姓名,学号和分数。然后,我只收到第三人三倍的信息。为什么以及如何消除问题? 感谢

1 个答案:

答案 0 :(得分:0)

有几个问题需要解决:

  1. st对象创建一次,然后在while循环中多次使用。这会多次调用同一对象的相同方法,因此以前的信息会丢失。
  2. st对象多次附加到数组中。因为它是附加的相同对象,所以如果对象被更新,则所有数组中的元素都使用相同的信息更新。
  3. dis方法中,您想要做的是迭代数组并显示收到的所有输入。但是,该函数是对象的成员,并且该对象不了解其他实例化对象。 dis应该做的只是打印与单个对象相关的数据,然后让外部代码在每个对象上调用该方法。
  4. 您的代码实际上从未使用它尝试用来存储以前信息的数组。这表明您无法很好地理解数组,对象和作用域的工作原理。我将看一些资源,以便更多地了解面向对象编程(OOP)和Python。例如:http://www.tutorialspoint.com/python/python_classes_objects.htm

  5. 以下是一些可以满足您需求的更新代码:

    class s(object):
        def vrod(self):
            self.name=(input("enter name:"))
            self.stno=int(input("enter stno:"))
            self.score=int(input("enter score:"))
    
        def dis(self):
            print("enter name:",self.name,"enter stno:",self.stno,"enter score:",self.score)
    
    
    y=[]
    j=0
    
    while j<3:
        st = s()
        st.vrod()
        y.append(st)
        j+=1
    
    for st in y:
        st.dis()