python - 此 for 循环仅显示学生记录的最后一项

标签 python python-3.x

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

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()

类型错误:“int”对象不可迭代

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

最佳答案

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

这段代码应该可以工作:

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

关于python - 此 for 循环仅显示学生记录的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57536780/

相关文章:

python - 如何在导入时忽略某些Python模块?

python - 根据传递的参数数量更改返回值的数量

python - 由于串口打开情况,无法从 Arduino 和无线调制解调器读取串行数据

python - 重写 __eq__ 并比较两个对象

datetime - 如何创建基本时间戳或日期? (Python 3.4)

python - 终端中的行与行

python - 如何检查是否有人更改了实体数据

python - django - 内联 - 搜索现有记录而不是添加新记录

Python 将换行符写入文件给出了 ਍一洀攀ऀ䄀爀碗碗猀琀ഀ 而不是换行符

python - 在 Python 中乘除非类型和整数