Python Shell зависает, когда достигает определенного метода, который проверяет элементы в списке - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть метод, который должен определить, находится ли конкретное значение в списке, если значение находится в списке, он вернет True и False, если это не так.Когда программа достигает этого метода, оболочка становится пустой.

Я попытался изменить операторы elif и построчно посмотреть, где может быть проблема.Я проверил метод, просто вернув True, и программа работает нормально.

class advisor(person):
    def __init__(self, name):
        self.name = name

    def approveSelectedCourse(self, finishedCourses, theClass):
        if theClass in finishedCourses:
            return False
        elif theClass is 213:
            if 110 in finishedCourses:
                return True
            else:
                return False
        elif theClass is 412:
            if 316 in finishedCourses:
                return True
            else:
                return False

class student(person):
    def __init__(self, name, stuID, finishedCourses, selectedCourses):
        person.__init__(self, name)
        self.stuID = stuID
        self.selectedCourses = selectedCourses
        self.finishedCourses = finishedCourses

Результат должен возвращать True, если определенный класс находится в списке finishCourses.

1 Ответ

3 голосов
/ 17 апреля 2019

Вы используете is, где вы имеете в виду ==; нет гарантии, что переменная theClass и литерал 412, например, оба ссылаются на один и тот же объект , представляющий 412.

>>> theClass = 412
>>> theClass is 412
False
>>> theClass == 412
True

Тот факт, что это верно для 213

>>> theClass = 213
>>> theClass is 213
True

является следствием определенной оптимизации, используемой реализацией CPython (и, возможно, другими) для малых целых чисел, а не языковой гарантией.

def approveSelectedCourse(self, finishedCourses, theClass):
    if theClass in finishedCourses:
        return False
    elif theClass == 213:
        if 110 in finishedCourses:
            return True
        else:
            return False
    elif theClass == 412:
        if 316 in finishedCourses:
            return True
        else:
            return False

, который можно упростить до

def approveSelectedCourse(self, finishedCourses, theClass):
    if theClass in finishedCourses:
        return False
    elif theClass == 213:
        return 110 in finishedCourses
    elif theClass == 412:
        return 316 in finishedCourses
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...