Nie rozumiem priorytetów "not" oraz "and"/"or"

0

Mam problem ze zrozumieniem tej instrukcji if not.

if not True or False:
    print("ok1")

if not False or True:
    print("ok2")

Dlaczego pierwsza instrukcja się nie wyświetla? Czy or nie powinien spowodować że jedna strona zwróci wartość false czyli taką, która zadowoli instrukcję. Jest to dla mnie nowa instrukcja nie moge jej logicznie ogarnać.

9

Not pewnie neguje tylko najbliższą wartość więc masz napisany odpowiednik:

if (not True) or False:
    print("ok1")

if (not False) or True:
    print("ok2")

jak chcesz zanegować całość to musisz dodać nawiasy

if not (True or False):
    print("ok1")

if not (False or True):
    print("ok2")

ogólnie poleca się używanie nawiasów w długich wyrażeniach dla czytelności

0

Dodanie nawiasów nie zmienia nic.

if not (False and True):
    print("ok1")

if not False and True:
    print("ok2")

Efekt jest dokładnie taki sam. To prawda if not neguje tylko pierwsze wyrażenie ale nawiasy nie zmieniają nic czyli nie wpływają na drugie wyrażenie w ogóle.

4
czerwonymoskit napisał(a):

Dodanie nawiasów nie zmienia nic.

if not (False and True):
    print("ok1")

if not False and True:
    print("ok2")

Efekt jest dokładnie taki sam. To prawda if not neguje tylko pierwsze wyrażenie ale nawiasy nie zmieniają nic czyli nie wpływają na drugie wyrażenie w ogóle.

Ale teraz zmieniłeś or na and. jaki jest efekt? Że w obu się wyświetla? No przypadkowo not (False and True) zwraca True i (not False) and True też zwraca True

0

Zmieniles tez OR na AND i wyciagasz zle wnioski. Prawda i fałsz to fałsz.

0

Ok już załapałem. W nawiasach jest wyrażenie jako jedno i jedną wartość logiczną zwraca, a bez nawiasów dwie wartości.

1

Co?
Wyrażenie logiczne zawsze zwraca jedną wartość. Tylko chodzi o kolejność operatorów

0

No może źle się wyraziłem. Chodzi o moment odwrócenia w nawiasach na końcu jest odwrócona wartość całego wyrażenia, a bez nawiasów najpierw wartości są odwracane osobno lub nie i rozpatrywany jest warunek końcowy.

1

Kompilatory niedobre i złośliwe, okazuje się interpretery też

Poczytaj o podstawach logiki jako takiej i w pythonie

0

Nigdzie nie napisałem, że interpretery są nie dobre. Na kompilatory tez nie narzekam tylko na szajs c++. Poczytam.

1

!= porównuje wartość a is not adres w pamięci (id), to tak w gwoli ścisłości :D

if not True or False:
    print("ok1")

if not False or True:
    print("ok2")

if True zawsze jest prawdą. To samo działa poprzez negacje if not False. Stąd drugi warunek się printuj, bo spełnione są kryteria (2x true)

0
czerwonymoskit napisał(a):

Nigdzie nie napisałem, że interpretery są nie dobre. Na kompilatory tez nie narzekam tylko na szajs c++.

Na tym etapie - a wyrażnie dałeś pokaz zkresu w jakim sie poruszasz - twoja opinia o jakości designu języków ma dla nas "duze znaczenie"

Poczytam.

Milej lektury i pozytywnego rozwoju

1

BTW już sam tytuł wątku
Nie ma instrukcji if not
Jest instrukcja if a not jest początkiem wyrażenia logicznego (boolowskiego)

0

Pisząc tytuł tak to błędnie rozumiałem, że jest taka instrukcja i dlatego nie mogłem tego zrozumieć. Teraz wiem, że not przynależy do wyrażenia bool tak jak piszesz i je neguje. Poćwiczyłem i mam to opanowane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1