Oto mój kod:
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
Dostaję błąd w warunkowym IF .
Co ja robię źle?
python
if-statement
keyword
logical-operators
and-operator
Arsen Khachaturyan
źródło
źródło
&&
i zasugeruj, że możeand
zamiast tego użyć słowa kluczowego . To samo dotyczy rzeczy takich jak++
i innych popularnych operatorów z innych języków.import this
Odpowiedzi:
Wolałbyś
and
zamiast&&
.źródło
&&
iAND
dostałem błąd (nie oczekuję, że python będzie chciał napisać małe literyand
).Zastosowania
and
ior
warunki warunkowe w Pythonie .to znaczy
źródło
and
ma wyższy priorytet niżor
.Istnieje powód, dla którego dostajesz
SyntaxError
to, że&&
w Pythonie nie ma operatora. Podobnie||
i nie!
są poprawnymi operatorami języka Python.Niektóre operatory, które możesz znać z innych języków, mają w Pythonie inną nazwę. Operatory logiczne
&&
i||
faktycznie są nazywaneand
ior
. Podobnie!
wywoływany jest operator logicznej negacjinot
.Więc możesz po prostu napisać:
lub nawet:
Kilka dodatkowych informacji (które mogą się przydać):
Podsumowałem operatora „ekwiwalenty” w tej tabeli:
Zobacz także dokumentację Pythona: 6.11. Operacje logiczne .
Oprócz operatorów logicznych Python ma także operatory bitowe / binarne:
W Pythonie nie ma bitowej negacji (tylko bitowy operator odwrotny
~
- ale to nie jest równoważnenot
).Zobacz także 6.6. Jednoargumentowe operacje arytmetyczne i bitowe / binarne oraz 6.7. Binarne operacje arytmetyczne .
Operatory logiczne (podobnie jak w wielu innych językach) mają tę zaletę, że są zwarte. Oznacza to, że jeśli pierwszy argument już określa wynik, to drugi operator nie jest w ogóle oceniany.
Aby to pokazać, używam funkcji, która po prostu przyjmuje wartość, drukuje ją i zwraca ponownie. Jest to przydatne, aby zobaczyć, co jest faktycznie oceniane na podstawie instrukcji print:
Jak widać, wykonywana jest tylko jedna instrukcja print, więc Python tak naprawdę nawet nie spojrzał na odpowiedni operand.
Nie dotyczy to operatorów binarnych. Zawsze oceniają oba operandy:
Ale jeśli pierwszy operand nie wystarczy, wówczas oceniany jest drugi operator:
Podsumowując, oto kolejna tabela:
True
IFalse
reprezentują cobool(left-hand-side)
powraca, nie trzeba byćTrue
alboFalse
, po prostu trzeba zwrócićTrue
lubFalse
gdybool
nazywa się na nich (1).Tak więc w Pseudokodzie (!) Funkcje
and
ior
działają w następujący sposób:Zauważ, że to pseudo-kod, a nie kod Pythona. W Pythonie nie można tworzyć wywoływanych funkcji
and
lubor
ponieważ są to słowa kluczowe. Nigdy też nie powinieneś używać „oceny” lubif bool(...)
.Dostosowywanie zachowania własnych klas
To niejawne
bool
wywołanie może być użyte do dostosowania sposobu, w jaki zachowują się twoje klasyand
,or
oraznot
.Aby pokazać, jak można to dostosować, używam tej klasy, która ponownie
print
jest czymś, co pozwala śledzić, co się dzieje:Zobaczmy więc, co dzieje się z tą klasą w połączeniu z tymi operatorami:
Jeśli nie masz
__bool__
metody, Python sprawdza również, czy obiekt ma__len__
metodę i czy zwraca wartość większą niż zero. Może to być przydatne, jeśli utworzysz kontener sekwencji.Zobacz także 4.1. Testowanie wartości prawdy .
Tablice i podklasy NumPy
Prawdopodobnie nieco poza zakres pierwotnego pytania, ale w przypadku, gdy masz do czynienia z tablicami lub podklasami NumPy (takimi jak Pandas Series lub DataFrames), niejawne
bool
wywołanie wzbudzi przerażenieValueError
:W takich przypadkach można użyć funkcji logicznej i funkcji NumPy, która wykonuje element
and
(lubor
):Jeśli masz do czynienia tylko z tablicami logicznymi, możesz także użyć operatorów binarnych z NumPy, które wykonują porównania elementarne (ale także binarne):
(1)
Że
bool
wywołanie na operandach musi zostać zwróconeTrue
lubFalse
nie jest całkowicie poprawne. To tylko pierwszy operand, który musi zwrócić wartość logiczną w swojej__bool__
metodzie:Jest tak, ponieważ
and
faktycznie zwraca pierwszy operand, jeśli pierwszy operand ewaluujeFalse
i jeśli ewaluuje,True
to zwraca drugi operand:Podobnie,
or
ale tylko na odwrót:Jeśli jednak użyjesz ich w
if
instrukcjiif
, domyślnie wywoła równieżbool
wynik. Więc te drobniejsze punkty mogą nie być dla ciebie odpowiednie.źródło
Dwa komentarze:
and
ior
do operacji logicznych w Pythonie.źródło
Używasz
and
ior
do wykonywania operacji logicznych, takich jak w C, C ++. Jak dosłownieand
jest&&
ior
jest||
.Spójrz na ten zabawny przykład,
Załóżmy, że chcesz zbudować bramki logiczne w języku Python:
Teraz spróbuj do nich zadzwonić:
Spowoduje to:
Mam nadzieję że to pomoże!
źródło
Poszedłem z czysto matematycznym rozwiązaniem:
źródło
Prawdopodobnie nie jest to najlepszy kod do tego zadania, ale działa -
źródło
Wystarczy jeden
&
(nie podwójny&&
) lub, jak sugeruje górna odpowiedź, możesz użyć „i”. Znalazłem to również w pandachjeśli zamienimy „&” na „i”, to nie zadziała.
źródło
może z & zamiast% jest szybszy i zapewnia lepszą czytelność
inne testy parzyste / nieparzyste
x jest parzyste? x% 2 == 0
x jest nieparzysty? nie x% 2 == 0
może jest bardziej przejrzysty z bitową i 1
x jest nieparzysty? x i 1
x jest parzyste? nie x i 1 (nieparzyste)
źródło
Użycie „i” warunkowo. Często używam tego podczas importowania do Jupyter Notebook:
źródło