Lesson 3
Warunki: if-then-else
1. Składnia
Wszystkie programy z pierwszej lekcji zostały wykonane sekwencyjnie, wiersz po wierszu. Żadna linia nie mogła zostać pominięta.
Rozważmy następujący problem: dla danej liczby całkowitej X określ jej wartość bezwzględną. Jeśli X> 0 to program powinien wydrukować wartość X, w przeciwnym razie powinien wydrukować -X. Tego zachowania nie można osiągnąć przy użyciu programu sekwencyjnego. Program powinien warunkowo wybrać następny krok. Właśnie tam warunki pomagają:
x = int(input()) if x > 0: print(x) else: print(-x)
Ten program używa instrukcji warunkowej, if
. Po tym, if
postawimy warunek (x > 0)
po dwukropku. Następnie wstawiamy blok instrukcji, które będą wykonywane tylko wtedy, gdy warunek jest prawdziwy (tj. Wartość jest równa True
). Po tym bloku może następować słowo else
, dwukropek i inny blok instrukcji, które będą wykonywane tylko wtedy, gdy warunek jest fałszywy (tzn. Wartość False
). W powyższym przypadku warunek jest fałszywy, dlatego wykonywany jest blok "else". Każdy blok powinien być wcięty za pomocą spacji.
Podsumowując, instrukcja warunkowa w Pythonie ma następującą składnię:
if condition : true-block several instructions that are executed if the condition evaluates to True else: false-block several instructions that are executed if the condition evaluates to False
else
kluczowe else
z blokiem "false" może zostać pominięte, jeśli nic nie powinno zostać zrobione, jeśli warunek jest fałszywy. Na przykład możemy zastąpić zmienną x
jej wartością bezwzględną w następujący sposób:
x = int(input()) if x < 0: x = -x print(x)
W tym przykładzie zmienna x
jest przypisana do -x
tylko, jeśli x < 0
. Natomiast polecenie print(x)
jest wykonywane za każdym razem, ponieważ nie jest wcięte, więc nie należy do "prawdziwego" bloku.
Wcięcie to ogólny sposób w Pythonie do oddzielania bloków kodu. Wszystkie instrukcje w tym samym bloku powinny być wcięte w ten sam sposób, tzn. Powinny mieć taką samą liczbę spacji na początku linii. Zaleca się użycie 4 spacji na wcięcie.
Wcięcie sprawia, że Python różni się od większości innych języków, w których nawiasy klamrowe {
i }
są używane do tworzenia bloków.
Nawiasem mówiąc, w Pythonie jest wbudowana funkcja wartości bezwzględnej:
x = int(input()) print(abs(x))
2. Zagnieżdżone warunki
Każda instrukcja Pythona może być umieszczona w blokach "true" i "false", w tym w innej instrukcji warunkowej. W ten sposób uzyskujemy warunki zagnieżdżone. Bloki warunków wewnętrznych są wcięte z użyciem jeszcze dwóch spacji (np. 8 spacji). Zobaczmy przykład. Biorąc pod uwagę współrzędne punktu na płaszczyźnie, wydrukuj jego ćwiartkę.
x = int(input()) y = int(input()) if x > 0: if y > 0: # x jest większe od 0, y jest większe od 0 print("Quadrant I") else: # x jest większe od 0, y jest mniejsze lub równe 0 print("Quadrant IV") else: if y > 0: # x jest mniejsze lub równe 0, y jest większe niż 0 print("Quadrant II") else: # x jest mniejsze lub równe 0, y jest mniejsze lub równe 0 print("Quadrant III")
W tym przykładzie wykorzystujemy komentarze: tekst objaśniający, który nie ma wpływu na wykonanie programu. Ten tekst zaczyna się od skrótu #
i trwa do końca wiersza.
3. Operatory porównania
Zwykle warunek po if
ma co najmniej jeden z następujących operatorów:
-
<
- mniej - warunek jest prawdziwy, jeśli lewa strona jest mniejsza niż prawa strona.
-
>
- większy - warunek jest prawdziwy, jeśli lewa strona jest większa niż prawa strona.
-
<=
- mniejszy lub równy.
-
>=
- większy lub równy.
-
==
- równy.
-
!=
- nie równe.
Na przykład warunek x * x < 1000
oznacza "wartość wyrażenia x * x
jest mniejsza niż 1000", a warunek 2 * x != y
oznacza "podwójna wartość zmiennej x
nie jest równa wartości zmiennej y
".
Operatory porównania w Pythonie można pogrupować w następujący sposób: a == b == c
lub x <= y >= 10
. To rzadkość wśród języków programowania.
4. Obiekty Bool i operatory logiczne
Kiedy sumujemy dwa obiekty liczb całkowitych za pomocą operatora +
, np. 2 + 5
, otrzymujemy nowy obiekt: 7
. W ten sam sposób, gdy porównamy dwie liczby całkowite za pomocą operatora <
, np. 2 < 5
, otrzymamy nowy obiekt: True
.
print(2 < 5) print(2 > 5)
True
i False
mają specjalny typ o nazwie bool
. Ponieważ każda nazwa typu może być używana do rzutowania obiektów do tego typu, zobaczmy, co ta liczba daje liczbom:print(bool(-10)) # Prawdziwe print(bool(0)) # Fałsz - zero jest jedyną liczbą fałszywą print(bool(10)) # Prawdziwe print(bool('')) # False - pusty łańcuch jest jedynym fałszywym ciągiem znaków print(bool('abc')) # Prawdziwe
Czasami musisz sprawdzić kilka warunków naraz. Na przykład możesz sprawdzić, czy liczba n
jest podzielna przez 2, używając warunku n % 2 == 0
( n
daje resztę 0
przy dzieleniu przez 2
). Jeśli chcesz sprawdzić, czy dwie liczby n
i m
są dzielone przez 2, powinieneś sprawdzić zarówno n % 2 == 0
i m % 2 == 0
. Aby to zrobić, łączysz je za pomocą operatora and
(logiczne AND): n % 2 == 0 and m % 2 == 0
.
Python ma logiczne AND, logiczne OR i negację.
Operator and
jest operatorem binarnym, który ocenia wartość True
wtedy i tylko wtedy, gdy zarówno jego lewa strona, jak i prawa strona są True
.
Operator or
jest operatorem binarnym, który ma wartość True
jeśli co najmniej jedna z jego stron ma wartość True
.
Operator not
jest jednoznaczną negacją, po której następuje pewna wartość. Jest obliczany na True
jeśli ta wartość jest False
i vice versa.
Sprawdźmy, czy co najmniej jedna z liczb kończy się na 0:
a = int(input()) b = int(input()) if a % 10 == 0 or b % 10 == 0: print('YES') else: print('NO')
Sprawdźmy, czy liczba a
jest dodatnia, a liczba b
jest nieujemna:
if a > 0 and not (b < 0):
Zamiast not (b < 0)
możemy pisać (b >= 0)
.
5. słowo "elif"
Jeśli masz więcej niż dwie opcje do rozróżnienia przy użyciu operatora warunkowego, możesz użyć instrukcji if... elif... else
.
Pokażmy, jak to działa, przepisując przykład z punktem (x, y) na płaszczyźnie i ćwiartkami z góry:
x = int(input()) y = int(input()) if x > 0 and y > 0: print("Quadrant I") elif x > 0 and y < 0: print("Quadrant IV") elif y > 0: print("Quadrant II") else: print("Quadrant III")
W takim przypadku warunki w if
i elif
są sprawdzane jeden po drugim aż do znalezienia pierwszego prawdziwego warunku. Wtedy wykonywany jest tylko blok true dla tego warunku. Jeśli wszystkie warunki są fałszywe, blok "else" jest wykonywany, jeśli jest obecny.