Как вызвать класс в функции Python - PullRequest
0 голосов
/ 21 ноября 2018

Я - полный любитель, и пытаюсь понять, как написать функцию, которая принимает список объектов и возвращает список имен упомянутых объектов (основываясь на том, проходят ли они оператор if).Это класс, который я написал с помощью учебников:

class Student:  
passmark=50  

def __init__(self,name,mark):  
    self.name=name  
    self.mark=mark  

def passes(self):  
    return self.mark > Student.passmark 

Итак, теперь я предполагаю, что составляю список объектов, скажем:

students = []  

Хотя этот списокэто просто новый список, который был необходим, но как бы я связал его с классом?С этого момента я хочу выяснить, какие студенты потерпели неудачу, и вернуть их, а также то, где я запутался:

def failed(list):  
    for student in Students:  
        if passmark > self.mark:  
            return list  

Это все, что я могу собрать, извините, я только что пришел на занятия,довольно запутанно для меня.Приведенный выше код вообще не ссылается на класс, и я действительно не понимаю, как это сделать.У меня нет синтаксических ошибок или чего-то еще, я думаю, что моя логика ошибочна.

Ответы [ 6 ]

0 голосов
/ 21 ноября 2018

Я предполагаю, что сбой не является функцией-членом класса Student.Приведенный ниже код должен работать для того, что вы пытаетесь сделать.

class Student:
    passmark=50
    def __init__(self,name,mark):
        self.name=name
        self.mark=mark  

    def passes(self):  
         return self.mark > Student.passmark

students = [Student("tom",40),Student("joe",70)]

def failed(listofStudents):
    listofStudentsThatFail = []
    for student in listofStudents:
        if not student.passes():
            listofStudentsThatFail.append(student)
    return listofStudentsThatFail

for s in failed(students):
    print s.name

Выход при запуске кода: tom

0 голосов
/ 21 ноября 2018
mark_to_pass = 50

#Approach one
class Student:
    def __init__(self, student_name, student_mark):
        self.name = student_name
        self.mark = student_mark
        self.pass_mark = self.calculate_passing_mark(mark_to_pass)

    def calculate_passing_mark(self, mark_to_pass):
        if self.mark >= mark_to_pass:
            return True
        return False

if __name__ == '__main__':
    example_student = Student("Swanson", 75)
    print(example_student.pass_mark)

При таком подходе каждый раз, когда создается объект учащегося, он сообщает, что создает поле, сообщающее, что ученик прошел.При работе со списками, такими как список объектов учеников, вам нужно добавить ученика в свой список.Пример

students = []
students.append(example_student)

Теперь вы можете просмотреть список своих учеников, выполнив

for student in students:
   print(student.pass_mark) # or do some other logic passed on who passed or failed. Or even here you dont need to create pass_mark object you can just check if student.mark > pass_mark
0 голосов
/ 21 ноября 2018

Учитывая класс Student, как вы определили:

class Student:  
    passmark=50  

    def __init__(self,name,mark):  
        self.name=name  
        self.mark=mark  

    def passes(self):  
        return self.mark > Student.passmark 

Вы можете создать список студентов с помощью:

students = [Student("John", 49), Student("Mary", 75)]

Похоже, вы также пытаетесь определитьфункция, которая будет возвращать список всех неудачных студентов;Вы могли бы сделать что-то вроде этого:

def failed(student_list):
    return [x for x in student_list if not x.passes()]
0 голосов
/ 21 ноября 2018

Вы хотите убрать всех учеников из списка учеников.Так что используйте это в цикле for.Кроме того, вы правильно инкапсулировали логику критериев прохождения / неудачи в методе, поэтому используйте это.

Вот код, который, я думаю, действительно захочет, чтобы вы хотели:

def failed(list_of_students):
   failed_students = []
   for student in list_of_students:  
       if not student.passes():  
           failed_students.append(student.name)  
   return failed_students

Более продвинутыйспособ сделать это - использовать понимание списка:

def failed(list_of_students):
    return [student for student in list_of_students if not student.passes()]

Это более питонно, но мне будет труднее понять новичка с языком Си или Java.

0 голосов
/ 21 ноября 2018

Попробуйте этот код.Использование списка понимания для возврата результатов.Это очень мощный инструмент Python.

class Student:  
    passmark = 50
    def __init__(self, name, mark):  
        self.name=name  
        self.mark=mark  

    def passes(self):  
        return self.mark > Student.passmark 

    def __repr__(self):
        return '{} {}'.format(self.name, self.mark)


def failed(students_list):  
    return [student for student in students_list if student.mark < Student.passmark]
0 голосов
/ 21 ноября 2018

Вы можете использовать понимание списка следующим образом:

def failed(list):
    return [student.name for student in students if not student.passes()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...