PPy3/InstrukcjaWarunkowa

Z Brain-wiki

Instrukcja warunkowa

Zasadniczo każdy program w Pythonie składa się z ciągu instrukcji, które są wykonywane w kolejności, w jakiej zostały zapisane. W programowaniu potrzebna jest jednak możliwość podejmowania decyzji o przyjęciu różnych kursów postępowania, w zależności od danych z jakimi mamy do czynienia. Umożliwiają to instrukcje złożone, a szczególnie - instrukcja warunkowa.

Instrukcja warunkowa to pierwszy przykład instrukcji złożonej. W najprostszej postaci składa się ona z ciągu (jednej lub więcej) instrukcji ujętych w blok, który jako całość będzie wykonany lub nie, w zależności od tego, czy spełniony jest pewien warunek - co zależy zazwyczaj od aktualnych wartości pewnych zmiennych. Warunek ten zapisuje się w postaci wyrażenia logicznego.

Wśród instrukcji tworzących blok warunkowy mogą oczywiście się pojawić również instrukcje złożone, nie tylko instrukcje proste. Na przykład, kolejne instrukcje warunkowe.

Przykład:

if delta > 0 and not a == 0:
    x1 = (-b + delta) / 2 / a
    x2 = (-b - delta) / 2 / a
print(x1, x2)

Linijka z wywołaniem print nie jest już częścią instrukcji warunkowej, tylko kolejną instrukcją.

Do zapamiętania:

  • wiersz otwierający instrukcję złożoną (czyli tu: zaczynająca się od if) zawsze kończy się dwukropkiem
  • instrukcje tworzące blok w instrukcji złożonej są pisane z wcięciem, które musi być jednolite
  • koniec bloku rozpoznaje się po powrocie do uprzedniego poziomu wcięcia
  • blok instrukcji pod if ... nie może być pusty. Instrukcja if z pustym blokiem warunkowym jest nie tylko nieprzydatna, ale jest również błędem składniowym.

Przykład bardziej złożony:

if a == 0:
    print('Równanie nie jest kwadratowe.')
elif delta > 0 and not a == 0:
    x1 = (-b + delta) / 2 / a
    x2 = (-b - delta) / 2 / a
    print('Są dwa pierwiastki: x1 =', x1, 'x2 =', x2)
elif delta == 0:
    x = -b / 2 / a
    print('Jest tylko jeden pierwiastek: x =', x)
else: # delta < 0:
    print('Nie ma pierwiastków rzeczywistych.')

Jak to działa?

  • Jeżeli spełniony jest warunek a == 0, wykonany zostanie blok poniżej if ..., a reszta instrukcji zostanie pominięta;
  • Jeżeli warunek ten jest nieprawdziwy (i tylko wtedy), to sprawdzane są kolejno warunki umieszczone w wierszach zaczynających się od elif. Jeśli któryś z nich okaże się prawdziwy, to blok poniżej tej linijki zostanie wykonany, a cała reszta - pominięta;
  • Jeżeli żaden z warunków - tych po if, i tych po wszystkich elif - nie okazał się prawdziwy, wykonany zostanie blok związany z else.
  • Bloków elif może być w instrukcji dowolnie wiele (w tym - wcale), if jest obowiązkowy (inaczej nie byłoby instrukcji warunkowej) i tylko jeden, else może wystąpić wyłącznie na końcu - jeden raz, lub wcale.
  • Komentarz po else: jest podpowiedzią dla czytającego, że skoro już zbadano warunki delta == 0 oraz delta > 0, a wykonanie dotarło do tej linijki, to delta < 0 jest jedyną pozostałą możliwością (o ile możemy założyć, że delta jest na pewno liczbą!). Jest on przeznaczony wyłącznie dla ludzkich oczu - interpreter go zignoruje, jak każdy komentarz.

Mam nadzieję, że czytający już zauważył, że and not a == 0 w trzeciej linijce jest niepotrzebne. Dlaczego?

CDN


poprzednia | Strona główna | dalej


RobertJB (dyskusja) 15:42, 28 cze 2016 (CEST)