selection! = Any (команды)
Кажется, это очень распространенный класс ошибок для начинающих, хотя я только начал замечать это недавно.Другая распространенная попытка - использовать такие вещи, как value == (3 or 4 or 5)
, что по сути является той же ошибкой.
В программировании сравнение - это сравнение, а тестирование с участием множества - это тестирование с участием множества.Они не могут быть перепутаны, они, как они могут по-английски.Программирование требует, чтобы мы были точными в том, что мы имеем в виду, и не позволяли себе вводить в заблуждение случайными формулировками того, что мы на самом деле имеем в виду.
То, что вы написали, означает "если selection
не равно (истина-значение того, является ли любой из commands
истинным) ".Вызов функции возвращает либо True
, либо False
(фактически, он возвращает True
, потому что хотя бы одна из commands
является непустой строкой - фактически они все являются - и непустыми строкамиравны true-ish, а пустые строки - false-ish), и вы сравниваете selection
с этим значением.Она никогда не будет равной, потому что selection
- это строка, а строки - это даже не то же самое, что True
или False
, которые являются логическими значениями, не говоря уже о равенстве.
Что выимелось в виду «если selection
не является одним из commands
», т. е. «если это не тот случай, когда selection
содержится в commands
».Это вопрос членства в наборе, а не сравнения.
В Python мы выполняем тестирование членства в множестве, используя ключевое слово in
.Грамматика позволяет нам писать совершенно естественное звучание if selection not in commands:
, поэтому нам не нужно идти на компромисс с if not (selection in commands):
.