#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 не дает никакого результата, только функция печати