6: If

Do tej pory wszystkie nasze programy wykonały instrukcje po kolei bez pomijania żadnej z linii. Oto przykład; za pomocą przycisków lub klawiszy sterowania kursorem możesz krok po kroku przejść przez cały kod.

Nową umiejętnością na tej lekcji będzie stosowanie instrukcji if, która pozwala nam wykonywać akcje tylko wtedy, gdy spełnione są określone warunki, w przeciwnym wypadku pomijane są określone linie. Na przykład, zmieńmy nasz program: gdy wiek osoby jest wystarczająco duży, niech wyświetla dodatkową wiadomość. W tym celu dodamy dwie linie: if age > 65: (czyli "jeśli wiek jest większy niż 65") i print('Ciesz się emeryturą!') ("Ciesz się emeryturą!"). Teraz przejdź ponownie do kodu:

Zauważ, że nowa instrukcja drukowania została pominięta, ponieważ wiek wynosi zaledwie 31! Co się będzie działo w tym programie, gdy birthYear zmienimy na rok 1928?

Widzisz różnicę? Wersja dolna (z age 85) drukowała dwie linie i nie pomijała żadnej. To jest właśnie celem instrukcji if: sprawdzić coś (czy age jest powyżej 65) i gdy tylko to jest prawdą, wykonać określone czynności (printing Enjoy retirement!).

Te instrukcje, które są realizowane tylko dla prawdziwego warunku, nazywamy ciałem. Ciało musi być wcięte, oznacza to, że na początku linii jest dodatkowa przestrzeń. Ciało może zawierać więcej niż jedną instrukcję: w tym celu dla każdej kolejnej linii robimy takie samo wcięcie. Oto przykład:

  • Spróbuj uruchomić ten kod w konsoli lub wizualizerze z datą urodzenia 1982. Obie linie są wcięte.

W następnym ćwiczeniu prosimy o napisanie krótkiego programu z zastosowaniem porównań boolowskich. W powyższych przykładach zapis "if x > y:" oznacza "jeśli x jest większe od y". Możliwe jest również skorzystanie z następujących operacji:

  • if x < y: means "jeśli x jest mniejsze od y"
  • if x >= y: means "jeśli x jest większe lub równe y"
  • if x <= y: means "jeśli x jest mniejsze lub równe y"

Zadanie na kodowanie : IHOPython
Napisz program, który odczytuje na wejściu liczbę całkowitą przy użyciu pancakes = int(input()). Jeśli pancakes jest większy od 3, wydrukuj Yum! i jeśli pancakes nie jest większy od 3, wydrukuj Still hungry!. Wskazóka

Struktura If

  • Pierwsza linia,
    if «warunek»:
    ma trzy części: słowo if, «warunek», który musi być wyrażeniem True/False (więcej o tym poniżej) oraz dwukropek :
  • Następnie ciało składające się z jednej lub więcej wciętych linii. Liczba spacji (wielkość wcięcia) nie ma znaczenia, ale niekonsekwencja spowoduje błąd, ponieważ Python za pomocą wielkości wcięcia określenia miejsce, w którym chcesz rozpocząć lub zakończyć ciało. (Powszechnie stosuje się cztery spacje dla każdego wcięcia. Dobrą zasadą jest nie mieszanie tabulatorów ze spacjami, bo prowadzi to do tzw. niewidzialnych błędów.)

Ciało instrukcji if jest przykładem "bloku" kodu. Bloki będą używane później w wielu innych miejscach, na przykład w pętli i w definiowanych własnych funkcjach. (Niektóre inne języki programowania identyfikują bloki za pomocą nawiasów klamrowych {}).

Następne ćwiczenie to w sumie 4 ćwiczenia w jednym. Twoim zadaniem jest uporządkować linie programu, aby uzyskać kilka różnych wyników. Klikaj na poziome belki, aby otworzyć każdą z części; zadania możesz wykonać w dowolnej kolejności. Aby uporządkować linie kodu, przeciągaj je i upuszczaj.


Part 1: Nieoczekiwane wcięcie
Zadanie na uporządkowanie: Nieoczekiwane wcięcie
Musisz spowodować następujący błąd:
(Błąd wcięcia: nieoczekiwane wcięcie)

IndentationError: unexpected indent
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
Part 2: Nieoczekiwane usunięcie wcięcia
Zadanie na uporządkowanie: Nieoczekiwane usunięcie wcięcia
Musisz spowodować następujący błąd:
(Błąd wcięcia: usunięte wcięcie nie pasuje do żadnego poziomu)

IndentationError: unindent does not match any outer indentation level
  • if 1000 < 10:
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
  • print("message 1")
Part 3: Nie znaleziono spodziewanego wcięcia
Zadanie na uporządkowanie: Oczekiwane wcięcie
Musisz spowodować następujący błąd:
(Błąd wcięcia: oczekiwano wciętego bloku)

IndentationError: expected an indented block
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")
Part 4: Właściwe wcięcie
Zadanie na uporządkowanie: Właściwe wcięcie
Nie powoduj żadnych błędów!
  • if 1000 < 10:
  • print("message 1")
  • print("message 2")
  • if 2 > 1:
  • print("message 3")

True, False i dane typu bool

Do tej pory w «warunku» instrukcji if stosowaliśmy proste porównania numeryczne x > y, co jest prawdziwe, gdy x jest większe od y i fałszywe, gdy x jest mniejsze lub równe y. Uogólniając, każdą z wartości prawda/fałsz nazywamy wartością boolowską (patrz George Boole). W Pythonie typ bool jest używany do reprezentowania wartości typu boolowskiego; istnieją tylko dwie wartości typu bool: True i False.

Przykład
Wyrażenia boolowskie

Zauważ, że w Pythonie, gdy używasz bezpośrednio w programie wartości typu bool, True i False muszą być pisane z dużej litery, w przeciwnym wypadku otrzymasz błąd.

Porównania boolowskie

Operatory >, <, <= i >= porównują dwie liczby i jako wynik podają wartość boolowską. Istnieją dwa inne sposoby porównywania liczb:

  • x == y jest operatorem równości, zwraca True jeśli x i y są równe
  • x != y jest operatorem różności, zwraca True jeśli x i y nie są równe
  • == i != działają na łańcuchach i innych typach danych

(Tu stosujemy dwa znaki równości ==, pojedynczy znak równości stosujemy już w wyrażeniu typu x = «wyrażenie» dla "przypisania zmiennej x wartości «wyrażenie» . Mylenie zapisu code>= z == jest źródłem wielu błędów.)

Oto ćwiczenie, które będzie dotyczyło jednego z nowych porównań.

Zadanie na kodowanie : Jaki jest twój znak?
Napisz program, który za pomocą input odczytuje liczbę całkowitą, a następnie, w zależności od tego, czy liczba jest dodatnia, ujemna czy zerem, wyprowadza jedno z ze słów pisane z dużej litery Positive, Negative lub Zero.
Możesz wprowadzić dane dla programu w poniższym polu.

Niedawno wprowadziliśmy pojęcie bloku (kilka linii zgrupowanych na tym samym poziomie wcięcia). Możesz mieć blok wewnątrz innego bloku:

if password=='openSesame':
  print('User logged on.')
  if hour>17:
    print('Good evening!')
  print('Enter a command:')
Tutaj zewnętrzny blok składa się z 4 linii a wewnętrzny z 1 linii:
if password=='openSesame':  
print('User logged on.')
if hour>17:
print('Good evening!')
print('Enter a command:')

Zadanie wielokrotnego wyboru: Zagnieżdżone ify
Które z następujących wyjść nie jest możliwym dla tego programu?
Correct! If any messages are shown, it must be the case that the outer (blue) block was executed, or in other words the password was correct. In this case, even if hour>17 is false (and the inner block is skipped), the line print('Enter a command:') of the outer block will still be executed.

Teraz, musisz użyć zagnieżdżonych bloków do napisania nieco bardziej złożonego kalkulatora wieku.

Zadanie na kodowanie : Kontroler wieku
Napisz program, który odczytuje wprowadzoną za pomocą input liczbę całkowitą reprezentującą czyjś wiek. Jeśli wiek wynosi 18 lub więcej, wydrukuj You can vote (Możesz głosować). Jeśli wiek wynosi od 0 do 17 włącznie, wydrukuj Too young to vote (zbyt młody na głosowanie). Jeśli wiek jest mniejszy niż 0, wydrukuj You are a time traveller (Jesteś podróżnikiem w czasie).

Później, w lekcji 9 zobaczymy, że sytuacje obejmujące wiele kontroli logicznych można uprościć za pomocą funkcji else i elif (else if), jak również operatorów boolowkich "and", "or", i "not". Teaz jesteś gotowy, aby przejść do następnej lekcji.