#python #list
#python #Список
Вопрос:
У меня есть метод, который должен определять, находится ли определенное значение внутри списка, если значение есть в списке, оно вернется 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, если конкретный класс находится внутри списка finishedCourses .
Комментарии:
1. Знаете ли вы размер «списка»? (примечание: вы можете
return 110 in finishedCoures
вместоelif
2. Не используйте
is
, когда вы действительно имеете в виду==
.3. if
theClass
отсутствует вfinishedCourses
списке и отличается от213
, и412
функция вернет aNone
, потому что вы не обработали этот случай
Ответ №1:
Вы используете 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