Заполните данные из файла в объекты класса для каждой строки, а затем сохраните их в списке

#python #list #object

Вопрос:

Я хотел бы заполнить каждую строку в файле отдельным объектом ученика класса из другого модуля, а затем сохранить его в списке, но я получаю ошибку в строке 6 Ошибка имени: имя » Sid » не определено. вот мой код каждая строка в txt-файле имеет такие значения,как studentid,имя студента, студенчество

 class Student(object):
    def __init__(self, Sid, Sname, Sage):
        self.Sid =Sid
        self.Sname =Sname
        self.Sage =Sage

from student import Student

def readStudent():
    student_list = []
    with open("Student.txt", "r") as f:
        for line in f:
            line = Student(Sid, Sname, Sage)
            student_list.append(line).split(" ")
            print(student_list)
            
 

Комментарии:

1. Где вы написали line = Student(Sid, Sname, Sage) , что именно вы ожидаете, что это будет означать? В частности, откуда вы ожидаете получить ценности Sid Sname и Sage откуда они будут исходить? Где вы for line in f: находитесь , как именно вы ожидаете line выглядеть каждый раз, когда проходите цикл? Вы должны начать с попытки объяснить каждый шаг предполагаемого процесса по порядку простыми английскими словами. Возможно, вам поможет взять настоящую ручку и бумагу, написать ее от руки и нарисовать диаграммы.

Ответ №1:

Имена переменных Sid Sname и Sage не существуют в вашем цикле поиска , эти переменные были определены в вашем классе Student . Если я правильно понимаю, у вас есть текстовый файл с 3 столбцами и (каждый столбец представляет Sid Sname и Sage соответственно).

 def readStudent():
    student_list = []
    with open("Student.txt", "r") as f:
        for line in f:
            student = Student(*line.split())
            student_list.append(student)
 

Комментарии:

1. При попытке вашего кода я получил эту ошибку Ошибка отступа: неиндентированный не соответствует ни одному внешнему уровню отступа в student_list.append(студент)

2. IndentationError это означает, что в вашем коде, возможно, есть дополнительная вкладка!

3. Код работает, но я не получаю никакого результата при возврате списка, он работает только при использовании функции печати, которая обеспечивает странный вывод, такой как Объект учащегося по адресу 0x000002315EA422E0>

4. вы должны использовать return stament, чтобы вернуть studen_list список!. Если вы напишете более объяснимый пример, я мог бы помочь вам лучше!

5. используя оператор return, когда цикл for завершается при вызове функции, я не получаю выходных данных от функции, извините, если мне не ясно

Ответ №2:

Вы, вероятно, имели в виду что-то вроде этого:

 for line in f:
    sid, sname, sage = line.split(",")
    student = Student(sid, sname, int(sage))
    student_list.append(student)
 

О, и ты забыл return student_list сделать это с функции.

Кстати, если вы изучаете python, то не забудьте ознакомиться с руководством по стилю pep-8: https://www.python.org/dev/peps/pep-0008/

Комментарии:

1. Извините, я новичок в python, применяю ли я оператор return на том же уровне отступа, что и цикл for, в котором он вернет список после завершения цикла, я прав? Кроме того, поскольку значения в txt-файле разделяются запятой для каждого значения в строке, что делает метод .split? Спасибо

2. Кроме того, оператор return не дает никакого результата, только функция печати