此for循环仅显示学生记录的最后一个条目

时间:2019-08-17 13:36:07

标签: python python-3.x

当我在学生班级中创建许多实例时 显示方法仅显示最后一个条目 这是我的代码

class student:
    def __init__(self):
        self.usn= None
        self.name=None
        self.branch=None
        self.phno=None
    def read(self):
        self.usn=input("enter the  usn: ")
        self.name=input("enter the name: ")
        self.branch=input("enter the branch: ")
        self.phno=input("enter the phno: ")

    def display(self):
        print(f'\n{self.usn}  {self.name}  {self.branch}   {self.phno}\n')
print(f'\nusn %name branch phno\n')
n=int(input("enter number of students : "))
for i in range(n):
    emp=student()
    emp.read()
print("\nusn   name branch phno\n")

for i  in student():

    emp[i].display()

阅读方法效果很好,我可以输入很多学生记录 但是我的显示方法有一个问题,它只打印最后的学生记录

所以我尝试遍历循环,但最终出现错误

for i  in student():
    emp[i].display()

TypeError:“ int”对象不可迭代

那么我该如何迭代以检索所有对象 并显示所有输入的学生记录

3 个答案:

答案 0 :(得分:1)

您在for循环中使用了相同的变量。在每次迭代中,最后输入的学生将被删除并替换为新数据。您应该使用一个数组(或适合您的用例的任何其他合适的数据结构),并在每次迭代时在该数组中添加一个新的Student。

此代码应该有效:

arr = list()
for i in range(n):
    emp=student()
    emp.read()
    arr.append(emp)

答案 1 :(得分:1)

您需要一个结构来保存类的所有对象,例如,一个列表。 可以使用emp = []简单地创建一个空列表。 然后,可以使用方法append()将对象追加到列表中。 所以你有:

emp = [] #declare empty list
for i in range(n):
    emp.append(student())
    emp[i].read()

然后,您可以直接在列表上进行迭代:

for x in emp:
    x.display()

在每次迭代中,x将是列表中的下一个对象

答案 2 :(得分:1)

有了其他用户的回答,我得到了想要的正确输出 这是代码

    class student:
    def __init__(self):
        self.usn= None
        self.name=None
        self.branch=None
        self.phno=None
    def read(self):
        self.usn=input("enter the  usn: ")
        self.name=input("enter the name: ")
        self.branch=input("enter the branch: ")
        self.phno=input("enter the phno: ")

    def display(self):
        print(f'\n{self.usn}  {self.name}  {self.branch}   {self.phno}\n')
n=int(input("enter number of students : "))
arr = list()
for i in range(n):
    emp=student()
    emp.read()
    arr.append(emp)
for x in arr:
    x.display()