Вот мой код:
def front_back(a, b):
# +++your code here+++
if len(a) % 2 == 0 && len(b) % 2 == 0:
return a[:(len(a)/2)] + b[:(len(b)/2)] + a[(len(a)/2):] + b[(len(b)/2):]
else:
#todo! Not yet done. :P
return
Я получаю ошибку в условном IF .
Что я делаю неправильно?
python
if-statement
keyword
logical-operators
and-operator
Арсен Хачатурян
источник
источник
&&
и предложить им, что они могли быand
вместо этого использовать ключевое слово . То же самое касается таких вещей, как++
и других распространенных операторов из других языков.import this
Ответы:
Вы бы хотели
and
вместо&&
.источник
&&
иAND
получил ошибку (не ожидая, что python захочет ввести строчные буквыand
).Python использует
and
иor
условные выражения.т.е.
источник
and
имеет более высокий приоритет, чемor
.Причина, по которой вы получаете,
SyntaxError
заключается в том, что&&
в Python нет оператора. Аналогично||
и не!
являются допустимыми операторами Python.Некоторые из операторов, которые вы знаете из других языков, имеют другое имя в Python. Логические операторы
&&
и||
на самом деле называютсяand
иor
. Аналогичным образом!
вызывается оператор логического отрицанияnot
.Так что вы можете просто написать:
или даже:
Некоторая дополнительная информация (которая может пригодиться):
Я суммировал операторы «эквиваленты» в этой таблице:
Смотрите также документацию по Python: 6.11. Булевы операции .
Помимо логических операторов Python также имеет побитовые / бинарные операторы:
В Python нет побитового отрицания (только побитовый обратный оператор
~
- но это не эквивалентноnot
).Смотрите также 6.6. Унарные арифметические и побитовые / двоичные операции и 6.7. Бинарные арифметические операции .
Логические операторы (как и во многих других языках) имеют то преимущество, что они закорочены. Это означает, что если первый операнд уже определяет результат, то второй оператор вообще не оценивается.
Чтобы показать это, я использую функцию, которая просто принимает значение, печатает его и возвращает снова. Это удобно, чтобы увидеть, что на самом деле оценивается из-за операторов печати:
Как вы можете видеть, выполняется только одно выражение print, поэтому Python даже не посмотрел на правильный операнд.
Это не относится к бинарным операторам. Те всегда оценивают оба операнда:
Но если первого операнда недостаточно, тогда, конечно, вычисляется второй оператор:
Подводя итог, вот еще одна таблица:
True
ИFalse
представляют собой то , чтоbool(left-hand-side)
возвращается, они не должны бытьTrue
илиFalse
они просто необходимо вернутьTrue
илиFalse
когдаbool
вызывается на них (1).(!) Таким образом , в Псевдо-кодексе
and
иor
функции работают , как эти:Обратите внимание, что это псевдокод, а не код Python. В Python вы не можете создавать функции, вызываемые
and
илиor
потому что это ключевые слова. Также вы никогда не должны использовать «оценить» илиif bool(...)
.Настройка поведения ваших собственных классов
Этот неявный
bool
вызов может быть использован для настройки , как ваши классы ведут себя сand
,or
иnot
.Чтобы показать, как это можно настроить, я использую этот класс, который снова
print
что-то отслеживает:Итак, давайте посмотрим, что происходит с этим классом в сочетании с этими операторами:
Если у вас нет
__bool__
метода, то Python также проверяет, есть ли у объекта__len__
метод и возвращает ли он значение больше нуля. Это может быть полезно знать, если вы создаете контейнер последовательности.Смотрите также 4.1. Проверка Истинного Значения .
NumPy массивы и подклассы
Возможно, это немного выходит за рамки исходного вопроса, но в случае, если вы имеете дело с массивами или подклассами NumPy (такими как Pandas Series или DataFrames), то неявный
bool
вызов вызовет ужасValueError
:В этих случаях вы можете использовать логику и функцию из NumPy, которая выполняет поэлементно
and
(илиor
):Если вы имеете дело только с логическими массивами, вы также можете использовать двоичные операторы с NumPy, они выполняют поэлементное (но также и двоичное) сравнение:
(1)
То, что
bool
вызов операндов должен возвращатьсяTrue
илиFalse
не совсем правильно. Это просто первый операнд, который должен возвращать логическое значение в своем__bool__
методе:Это потому, что на
and
самом деле возвращает первый операнд, если первый операнд вычисляет,False
а если он оценивает,True
то он возвращает второй операнд:Точно так же,
or
но только наоборот:Однако, если вы используете их в
if
выражении, тоif
также неявно вызоветbool
результат. Так что эти тонкие моменты могут не иметь отношения к вам.источник
Два комментария:
and
иor
для логических операций в Python.источник
Вы используете
and
иor
для выполнения логических операций, как в C, C ++. Как в буквальном смыслеand
это&&
иor
есть||
.Взгляните на этот забавный пример,
Скажем, вы хотите построить логические ворота в Python:
Теперь попробуйте позвонить им:
Это выведет:
Надеюсь это поможет!
источник
Я выбрал чисто математическое решение:
источник
Возможно, это не лучший код для этой задачи, но работает -
источник
Достаточно одного
&
(не двойного&&
) или, как показывает верхний ответ, вы можете использовать «и». Я также нашел это в пандахесли мы заменим «&» на «и», это не сработает.
источник
может быть с & вместо% быстрее и обеспечивает удобочитаемость
другие тесты четные / нечетные
х четный? x% 2 == 0
х странно? не х% 2 == 0
может быть, более понятно с побитовым и 1
х странно? х & 1
х четный? не х & 1 (не странно)
источник
Использование «а» в условных выражениях. Я часто использую это при импорте в Jupyter Notebook:
источник