Operatori logici

Introducere

Condițiile sunt o formă comodă de a lua decizii întrebându-ne dacă ceva are valoare Adevărat sau nu. Dar de multe ori o condiție nu e suficientă. Am putea dori să facem opusul. Sau de exemplu dacă dorim să luăm o decizie bazată pe turtle.xcor() și``turtle.ycor()`` atunci trebuie să le combinăm. Asta se poate rezolva cu operatori logici.

Negarea unei declarații

Dacă dorim ca ceva să fie Fals putem utiliza not. Este un operator logic:

x = False
if not x :
    print("condition met")
else:
    print("condition not met")

Exercițiu

Țestoasa ne pune la dispoziție o funcție utilă pentru a ști dacă desenează sau nu: turtle.isdown(). Această funcție returnează Adevărat dacă țestoasa desenează. După cum am văzut mai devreme, funcțiile turtle.penup() și turtle.pendown() schimbă între desen și mișcare, sau doar mișcare fără a trasa nici o urmă.

Putem scrie o funcție care înaintează doar dacă penița este ridicată?

Soluție

def stealthed_forward(distance):
    if not turtle.isdown():
        turtle.forward(distance)

Asta și aia sau altceva

Doi operatori ușor de înțeles sunt and (și) și or (sau). Ei fac exact ce spune numele lor:

if 1 < 2 and 4 > 2:
    print("condition met")

if 1 > 2 and 4 < 10:
    print("condition not met")

if 4 < 10 or 1 < 2:
    print("condition met")

Nu ești limitat la un singur operator logic. Poți combina oricâți de mulți dorești.

Exercițiu

Mai devreme am pus țestoasa într-o închisoare circulară. De această dată să o punem într-o cutie. Dacă țestoasa merge mai mult de 100 pe axele X sau Y atunci întoarcem țestoasta înapoi spre centru.

Soluție

def forward(distance):
    while distance > 0:
        if (turtle.xcor() > 100
            or turtle.xcor() < -100
            or turtle.ycor() > 100
            or turtle.ycor() < -100):
            turtle.setheading(turtle.towards(0,0))
        turtle.forward(1)
        distance = distance - 1