← Back to course

Warunki: if, else i elif

Warunki: if, else i elif

Witaj z powrotem.

W poprzedniej lekcji nauczyłeś się używać input().

Twoje programy nauczyły się zadawać pytania.

Bardzo grzecznie.

Bardzo interaktywnie.

Trochę podejrzanie.

Pisałeś programy takie jak:

name = input("What is your name? ")
age = int(input("How old are you? "))

print(f"Hello, {name}!")
print(f"Next year you will be {age + 1}.")

Dobrze.

Teraz twój program potrafi pytać użytkownika o informacje.

Ale nadal nie potrafi podejmować decyzji.

Zawsze robi to samo.

Prawdziwe programy potrzebują wyborów.

Na przykład:

Jeśli użytkownik jest wystarczająco dorosły, pozwól wejść.
Jeśli hasło jest poprawne, zaloguj.
Jeśli produkt jest dostępny, pokaż “Buy now”.
Jeśli liczba jest ujemna, pokaż ostrzeżenie.

I tutaj wchodzą warunki.

Warunki pozwalają programowi wybrać, co ma zrobić.

Bez warunków program jest jak pociąg bez zwrotnic.

Jedzie do przodu.

Zawsze do przodu.

Nawet kiedy tory się kończą.

Nieidealnie.

Czego się nauczysz

W tej lekcji nauczysz się:

Pod koniec tej lekcji twoje programy będą potrafiły wybierać.

Małe wybory.

Ale ważne wybory.

Bardzo Python.

Bardzo potężnie.

Lekko niebezpiecznie.

Idealnie.

Czym jest warunek?

Warunek to pytanie, na które Python może odpowiedzieć:

True

albo:

False

Przykład:

age = 20

print(age >= 18)

Output:

True

Python sprawdza:

Czy age jest większe lub równe 18?

Odpowiedź brzmi:

True

Inny przykład:

age = 15

print(age >= 18)

Output:

False

Warunek nie jest prawdziwy.

Użytkownik nie ma 18 lat lub więcej.

Python nie robi się emocjonalny.

Po prostu sprawdza warunek.

Bez dramatu.

Tylko logika.

Przeważnie.

Twoje pierwsze if

Utwórz plik:

conditions.py

Napisz:

age = 20

if age >= 18:
    print("You are an adult.")

Uruchom:

python conditions.py

albo:

python3 conditions.py

Output:

You are an adult.

To oznacza:

Jeśli age jest większe lub równe 18, wyświetl wiadomość.

Warunek jest prawdziwy.

Więc Python wykonuje wciętą linię.

Bardzo proste.

Bardzo ważne.

Program właśnie podjął decyzję.

Mała decyzja.

Duży koncept.

Kiedy warunek jest fałszywy

Teraz zmień kod:

age = 15

if age >= 18:
    print("You are an adult.")

Uruchom.

Output:

Nic się nie dzieje.

Dlaczego?

Bo warunek jest fałszywy.

Python sprawdza:

Czy 15 jest większe lub równe 18?

Odpowiedź:

False

Więc Python pomija wciętą linię.

Tak działa if.

Jeśli warunek jest prawdziwy, wykonaj kod.

Jeśli warunek jest fałszywy, pomiń kod.

Bardzo bezpośrednio.

Bardzo Python.

Bardzo “bez biletu nie wchodzisz”.

Wcięcie ma znaczenie

W Pythonie wcięcie jest bardzo ważne.

To działa:

age = 20

if age >= 18:
    print("You are an adult.")

Linia:

    print("You are an adult.")

jest wcięta.

To znaczy, że należy do if.

Python używa wcięć, żeby rozumieć bloki kodu.

Blok to grupa linii, które należą do siebie.

W wielu językach programiści używają {}.

W Pythonie używamy wcięć.

Python zobaczył nawiasy klamrowe i powiedział:

Nie, dziękuję. Wolę ustawianie mebli.

Bardzo Python.

Złe wcięcie

To jest źle:

age = 20

if age >= 18:
print("You are an adult.")

Python pokaże błąd:

IndentationError

Dlaczego?

Bo po if Python oczekuje wciętego bloku.

Poprawnie:

age = 20

if age >= 18:
    print("You are an adult.")

Używaj spójnego wcięcia.

Większość kodu Python używa 4 spacji.

Nie mieszaj tabów i spacji.

Mieszanie tabów i spacji to sposób, w jaki małe programy zamieniają się w nawiedzone domy.

Dwukropek jest obowiązkowy

Linia z if potrzebuje dwukropka:

if age >= 18:

Dwukropek oznacza:

Tutaj zaczyna się blok kodu.

Źle:

if age >= 18
    print("You are an adult.")

Python będzie narzekał.

Poprawnie:

if age >= 18:
    print("You are an adult.")

Mały symbol.

Duża odpowiedzialność.

Dwukropek jest malutki.

Ale bez niego Python zatrzymuje imprezę.

Operatory porównania

Operatory porównania pozwalają Pythonowi porównywać wartości.

Popularne operatory:

==   równe
!=   różne od
>    większe niż
<    mniejsze niż
>=   większe lub równe
<=   mniejsze lub równe

Przykłady:

age = 20

print(age == 20)
print(age != 18)
print(age > 18)
print(age < 30)
print(age >= 20)
print(age <= 21)

Output:

True
True
True
True
True
True

Te operatory są podstawą warunków.

Zadają pytania.

Python odpowiada True albo False.

Bardzo przydatne.

Bardzo surowe.

Jak mały sędzia z klawiaturą.

== to nie to samo co =

Bardzo ważne:

=

oznacza przypisanie.

Zapisuje wartość.

Przykład:

age = 20

To znaczy:

Zapisz 20 w age.

Ale:

==

oznacza porównanie.

Przykład:

age == 20

To znaczy:

Czy age jest równe 20?

Nie myl ich.

Zły pomysł:

if age = 20:
    print("Age is 20.")

Poprawnie:

if age == 20:
    print("Age is 20.")

Jedno = zapisuje wartość.

Dwa == zadają pytanie.

Malutka różnica.

Ogromny dramat.

Klasyczne programowanie.

Używanie else

else wykonuje się wtedy, gdy warunek if jest fałszywy.

Przykład:

age = 15

if age >= 18:
    print("You are an adult.")
else:
    print("You are not an adult yet.")

Output:

You are not an adult yet.

Warunek:

age >= 18

jest fałszywy.

Więc Python pomija blok if i wykonuje blok else.

To znaczy:

Jeśli to jest prawda, zrób jedną rzecz.
W przeciwnym razie zrób inną rzecz.

Bardzo przydatne.

Bardzo częste.

Bardzo “drzwi A albo drzwi B”.

if i else z inputem

Utwórz plik:

age_check.py

Napisz:

age = int(input("How old are you? "))

if age >= 18:
    print("You can enter.")
else:
    print("You cannot enter yet.")

Uruchom.

Przykład 1:

How old are you? 20

Output:

You can enter.

Przykład 2:

How old are you? 15

Output:

You cannot enter yet.

Teraz twój program reaguje inaczej w zależności od inputu użytkownika.

To ważne.

Ten sam kod może dawać różne wyniki.

Bo dane się zmieniają.

Tutaj programowanie zaczyna wyglądać, jakby żyło.

Nie za bardzo żyło.

Nadal bez buntu robotów.

Używanie elif

Czasem dwie opcje nie wystarczą.

Możesz potrzebować kilku możliwości.

Przykład:

Jeśli score jest 90 lub więcej, ocena A.
Jeśli score jest 80 lub więcej, ocena B.
Jeśli score jest 70 lub więcej, ocena C.
W przeciwnym razie, ocena D.

Do tego używamy elif.

elif znaczy:

else if

Przykład:

score = 85

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
else:
    print("Grade: D")

Output:

Grade: B

Python sprawdza od góry do dołu.

Pierwszy warunek:

score >= 90

Fałsz.

Drugi warunek:

score >= 80

Prawda.

Więc Python wyświetla:

Grade: B

Potem pomija resztę.

Bardzo skutecznie.

Bardzo zdecydowanie.

Bardzo “znalazłem odpowiedź, do widzenia”.

Kolejność ma znaczenie przy elif

Kolejność ma znaczenie.

Spójrz na to:

score = 95

if score >= 70:
    print("Grade: C or better")
elif score >= 80:
    print("Grade: B or better")
elif score >= 90:
    print("Grade: A")

Output:

Grade: C or better

Dlaczego?

Bo Python sprawdza od góry do dołu.

score >= 70 jest prawdziwe.

Więc Python wykonuje ten blok i pomija resztę.

Mimo że score >= 90 też jest prawdziwe.

Dlatego kolejność musi być logiczna.

Lepiej:

score = 95

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
else:
    print("Grade: D")

Output:

Grade: A

Najpierw dawaj warunek najbardziej konkretny albo najmocniejszy.

Inaczej program może być technicznie poprawny, ale logicznie absurdalny.

Python cię nie zatrzyma.

Python pozwala na głupoty, jeśli składnia jest legalna.

Bardzo niebezpieczna wolność.

Porównywanie stringów

Możesz porównywać też stringi.

Przykład:

password = input("Password: ")

if password == "secret":
    print("Access granted.")
else:
    print("Access denied.")

Przykład 1:

Password: secret

Output:

Access granted.

Przykład 2:

Password: banana

Output:

Access denied.

Python porównuje tekst dokładnie.

To znaczy:

secret

nie jest tym samym co:

Secret

albo:

 secret

albo:

secret 

Spacje i wielkie litery mają znaczenie.

Python jest surowy.

Jak ochroniarz, który dodatkowo kocha gramatykę.

Case sensitivity ze stringami

Spróbuj:

word = input("Type yes: ")

if word == "yes":
    print("You typed yes.")
else:
    print("That was not yes.")

Jeśli użytkownik wpisze:

yes

Output:

You typed yes.

Jeśli użytkownik wpisze:

Yes

Output:

That was not yes.

Dlaczego?

Bo "yes" i "Yes" to różne stringi.

Później możesz zrobić input bardziej elastyczny.

Na razie zapamiętaj:

Python porównuje stringi dokładnie.

Dokładnie znaczy dokładnie.

Bez interpretacji emocjonalnej.

Używanie lower()

Możesz ułatwić porównywanie stringów przez .lower().

Przykład:

answer = input("Do you like Python? ")

answer = answer.lower()

if answer == "yes":
    print("Excellent choice.")
else:
    print("Python will try not to be offended.")

Jeśli użytkownik wpisze:

YES

albo:

Yes

albo:

yes

.lower() zmieni to na:

yes

To ułatwia porównanie.

Możesz też napisać krócej:

answer = input("Do you like Python? ").lower()

To jest częste.

Bardzo użyteczne.

Python wybacza wielkie litery, kiedy powiesz mu jak.

Booleany w warunkach

Booleany naturalnie działają z if.

Przykład:

is_logged_in = True

if is_logged_in:
    print("Welcome back!")
else:
    print("Please log in.")

Output:

Welcome back!

Ponieważ is_logged_in już jest True, nie trzeba pisać:

if is_logged_in == True:

To działa, ale jest niepotrzebne.

Lepiej:

if is_logged_in:

Jasno.

Prosto.

Pythonowo.

Bardzo ładnie.

Sprawdzanie False przez not

Możesz użyć not, żeby odwrócić boolean.

Przykład:

is_logged_in = False

if not is_logged_in:
    print("Please log in.")
else:
    print("Welcome back!")

Output:

Please log in.

To oznacza:

Jeśli użytkownik nie jest zalogowany, wyświetl tę wiadomość.

not odwraca warunek.

not True

staje się:

False

A:

not False

staje się:

True

Małe słowo.

Duża moc.

Używaj ostrożnie.

Zbyt dużo not może zmusić mózg do gimnastyki.

Łączenie warunków przez and

Używaj and, kiedy oba warunki muszą być prawdziwe.

Przykład:

age = 25
has_ticket = True

if age >= 18 and has_ticket:
    print("You can enter the event.")
else:
    print("You cannot enter the event.")

Output:

You can enter the event.

Oba warunki są prawdziwe:

age >= 18

i:

has_ticket

Więc wejście jest dozwolone.

Jeśli jeden z nich jest fałszywy, cały warunek jest fałszywy.

and jest surowe.

Jak poważny bramkarz w klubie.

Wiek się zgadza?

Bilet jest?

To wchodzisz.

Brak biletu?

Do widzenia.

Łączenie warunków przez or

Używaj or, kiedy przynajmniej jeden warunek musi być prawdziwy.

Przykład:

is_admin = False
is_owner = True

if is_admin or is_owner:
    print("You can edit this page.")
else:
    print("You cannot edit this page.")

Output:

You can edit this page.

Tylko jeden warunek jest prawdziwy:

is_owner

Ale to wystarczy.

or znaczy:

Ten albo tamten, albo oba.

Bardzo przydatne.

Bardzo częste.

Bardzo “jeden klucz wystarczy, żeby otworzyć drzwi”.

Łączenie inputu i and

Utwórz plik:

event_access.py

Napisz:

age = int(input("Age: "))
has_ticket_answer = input("Do you have a ticket? yes/no: ").lower()

has_ticket = has_ticket_answer == "yes"

if age >= 18 and has_ticket:
    print("You can enter the event.")
else:
    print("You cannot enter the event.")

Przykład 1:

Age: 25
Do you have a ticket? yes/no: yes

Output:

You can enter the event.

Przykład 2:

Age: 25
Do you have a ticket? yes/no: no

Output:

You cannot enter the event.

Ta linia jest ważna:

has_ticket = has_ticket_answer == "yes"

Tworzy boolean.

Jeśli odpowiedź to "yes", wtedy has_ticket jest True.

W przeciwnym razie jest False.

Bardzo użyteczne.

Bardzo czyste.

Bardzo Python.

Zagnieżdżone if

Możesz umieścić jedno if wewnątrz drugiego if.

To nazywa się nesting, czyli zagnieżdżanie.

Przykład:

age = int(input("Age: "))

if age >= 18:
    has_ticket = input("Do you have a ticket? yes/no: ").lower()

    if has_ticket == "yes":
        print("You can enter.")
    else:
        print("You need a ticket.")
else:
    print("You are too young.")

To działa.

Ale uważaj.

Zbyt dużo zagnieżdżeń może sprawić, że kod będzie trudny do czytania.

Zagnieżdżony kod jest jak pudełka w pudełkach w pudełkach.

W pewnym momencie zapominasz, gdzie są skarpetki.

Używaj zagnieżdżania, kiedy ma sens.

Ale nie buduj labiryntu, chyba że lubisz cierpienie.

Płaski kod często jest prostszy

Ta wersja jest prostsza:

age = int(input("Age: "))
has_ticket = input("Do you have a ticket? yes/no: ").lower()

if age >= 18 and has_ticket == "yes":
    print("You can enter.")
else:
    print("You cannot enter.")

Jest krótsza.

Ale daje mniej konkretny feedback.

Wersja zagnieżdżona może powiedzieć:

You are too young.

albo:

You need a ticket.

Więc oba podejścia mogą być użyteczne.

Najlepszy wybór zależy od sytuacji.

Programowanie często nie jest:

jedna poprawna odpowiedź

Bardziej:

które rozwiązanie jest jaśniejsze dla tego problemu?

Irytujące.

Ale prawdziwe.

Typowy błąd: brak dwukropka

Źle:

if age >= 18
    print("Adult")

Poprawnie:

if age >= 18:
    print("Adult")

Dwukropek zaczyna blok.

Nie ma dwukropka, nie ma bloku.

Nie ma bloku, nie ma szczęścia.

Typowy błąd: złe wcięcie

Źle:

age = 20

if age >= 18:
print("Adult")

Poprawnie:

age = 20

if age >= 18:
    print("Adult")

Kod wewnątrz if musi być wcięty.

Python używa wcięć, żeby rozumieć strukturę.

Twoje spacje nie są dekoracją.

Są architekturą.

Bardzo poważne spacje.

Typowy błąd: używanie = zamiast ==

Źle:

password = input("Password: ")

if password = "secret":
    print("Access granted.")

Poprawnie:

password = input("Password: ")

if password == "secret":
    print("Access granted.")

Zapamiętaj:

=   przypisanie
==  porównanie

Jedno zapisuje.

Dwa porównują.

Mała różnica, która może zepsuć całe popołudnie.

Typowy błąd: porównywanie liczbowego inputu jako tekstu

Źle:

age = input("Age: ")

if age >= 18:
    print("Adult")

To się nie uda, bo age jest stringiem.

Poprawnie:

age = int(input("Age: "))

if age >= 18:
    print("Adult")

Jeśli chcesz porównanie liczbowe, przekonwertuj input na liczbę.

Python nie porównuje "20" i 18 jak człowiek.

Python mówi:

Tekst i liczba? Absolutnie nie.

Surowo.

Ale rozsądnie.

Typowy błąd: zła kolejność elif

Źle:

score = 95

if score >= 60:
    print("Passed")
elif score >= 90:
    print("Excellent")

Output:

Passed

Drugi warunek nigdy się nie wykona, bo score >= 60 jest już prawdziwe.

Lepiej:

score = 95

if score >= 90:
    print("Excellent")
elif score >= 60:
    print("Passed")
else:
    print("Failed")

Output:

Excellent

Kiedy używasz elif, kolejność ma znaczenie.

Pomyśl, zanim ustawisz warunki.

Program nie zrobi myślenia za ciebie.

Niegrzeczne.

Ale spodziewane.

Mini program: sprawdzanie liczby

Utwórz plik:

number_checker.py

Napisz:

number = int(input("Enter a number: "))

if number > 0:
    print("The number is positive.")
elif number < 0:
    print("The number is negative.")
else:
    print("The number is zero.")

Spróbuj:

10

Output:

The number is positive.

Spróbuj:

-5

Output:

The number is negative.

Spróbuj:

0

Output:

The number is zero.

To klasyczne ćwiczenie z warunkami.

Proste.

Jasne.

Użyteczne.

Nie glamour.

Ale śrubokręt też nie jest glamour.

A śrubokręty są ważne.

Mini program: sprawdzanie hasła

Utwórz plik:

password_check.py

Napisz:

password = input("Enter password: ")

if password == "python123":
    print("Access granted.")
else:
    print("Access denied.")

Spróbuj poprawnego hasła.

Potem spróbuj złego.

To prosta idea logowania.

Bardzo podstawowa.

Nie używaj tego do prawdziwego bezpieczeństwa.

Prawdziwe bezpieczeństwo jest dużo poważniejsze.

To nauka.

Nie ochrona banku.

Proszę, nie chroń banku lekcją 4.

Mini program: prosty rabat

Utwórz plik:

discount.py

Napisz:

total = float(input("Order total: "))

if total >= 100:
    discount = total * 0.10
    final_total = total - discount

    print(f"Discount: {discount:.2f}")
    print(f"Final total: {final_total:.2f}")
else:
    print("No discount.")
    print(f"Final total: {total:.2f}")

Przykład 1:

Order total: 150

Output:

Discount: 15.00
Final total: 135.00

Przykład 2:

Order total: 50

Output:

No discount.
Final total: 50.00

To jest blisko prawdziwej logiki biznesowej.

Jeśli zamówienie jest wystarczająco duże, zastosuj rabat.

W przeciwnym razie brak rabatu.

Mała logika sklepu.

Bardzo użyteczna.

Bardzo prawdziwa.

Mini program: kalkulator ocen

Utwórz plik:

grade_calculator.py

Napisz:

score = int(input("Score: "))

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"Grade: {grade}")

Spróbuj różnych wyników:

95
85
75
65
50

Program powinien dawać różne oceny.

To używa:

Wiele koncepcji razem.

Zupa Pythonowa robi się coraz bogatsza.

Nadal bez smaku USB.

Miejmy nadzieję.

Praktyka

Utwórz plik:

practice_conditions.py

Napisz program, który pyta o:

Potem:

Przykład:

username = input("Username: ")
age = int(input("Age: "))
student_answer = input("Are you a student? yes/no: ").lower()

print(f"Hello, {username}!")

if age < 18:
    print("You are young.")
elif age < 65:
    print("You are an adult.")
else:
    print("You are a senior.")

if student_answer == "yes":
    print("Student mode activated.")

Zauważ tę linię:

elif age < 65:

Nie musimy pisać:

age >= 18 and age < 65

Dlaczego?

Bo jeśli Python dotarł do tego elif, już wie, że:

age < 18

było fałszywe.

Więc wiek jest już 18 lub więcej.

Kolejność pomaga.

Piękna logika.

Bardzo Python.

Mini wyzwanie

Utwórz plik:

shipping_calculator.py

Program powinien zapytać o:

Zasady:

Jeśli wartość zamówienia wynosi 100 lub więcej, wysyłka jest darmowa.
Jeśli klient jest VIP, wysyłka jest darmowa.
Jeśli kraj to "italy", wysyłka kosztuje 5.
W przeciwnym razie wysyłka kosztuje 15.

Potem wyświetl:

Customer: Anna
Order total: 80.00
Shipping: 5.00
Final total: 85.00

Przykładowe rozwiązanie:

customer_name = input("Customer name: ")
order_total = float(input("Order total: "))
country = input("Country: ").lower()
vip_answer = input("VIP customer? yes/no: ").lower()

is_vip = vip_answer == "yes"

if order_total >= 100 or is_vip:
    shipping = 0
elif country == "italy":
    shipping = 5
else:
    shipping = 15

final_total = order_total + shipping

print("----- Order Summary -----")
print(f"Customer: {customer_name}")
print(f"Order total: {order_total:.2f}")
print(f"Shipping: {shipping:.2f}")
print(f"Final total: {final_total:.2f}")

Przetestuj z różnymi wartościami.

Spróbuj:

Order total: 120
VIP: no

Spróbuj:

Order total: 50
VIP: yes

Spróbuj:

Country: italy
Order total: 80
VIP: no

Spróbuj:

Country: france
Order total: 80
VIP: no

Program powinien wybierać różne koszty wysyłki.

To prawdziwa logika.

Mała.

Ale prawdziwa.

Program teraz podejmuje decyzje.

Bardzo dobrze.

Bardzo Python.

Checklist dla początkujących

Kiedy twój program z warunkami nie działa, sprawdź:

Czy zapisałem plik?
Czy użyłem dwukropka po if, elif i else?
Czy kod wewnątrz warunku jest wcięty?
Czy użyłem == do porównania?
Czy użyłem = tylko do przypisania?
Czy przekonwertowałem input na int lub float przed porównaniem liczbowym?
Czy moje warunki elif są w poprawnej kolejności?
Czy napisałem True i False wielką literą?
Czy porównałem stringi dokładnie?
Czy użyłem .lower(), gdy chciałem bardziej elastyczny input tekstowy?

Większość błędów w warunkach nie jest duża.

Zwykle są to małe błędy logiczne.

Komputer robi dokładnie to, co napisałeś.

Nie to, co miałeś na myśli.

To irytujące.

To programowanie.

Witaj.

Podsumowanie

Dzisiaj nauczyłeś się:

To ogromny krok.

Twoje programy teraz potrafią wybierać.

Mogą reagować.

Mogą mówić tak albo nie.

Mogą stosować rabaty.

Mogą sprawdzać hasła.

Mogą liczyć wysyłkę.

Mogą oceniać liczby.

Trochę.

Nie moralnie.

Tylko matematycznie.

Dobrze.

Następna lekcja

W następnej lekcji nauczymy się pętli.

Pętle pozwalają programowi powtarzać działania.

Zamiast pisać:

print("Hello")
print("Hello")
print("Hello")

napiszesz coś mądrzejszego.

Nauczysz się:

for
while

Pętle są potężne.

Pętle są użyteczne.

Pętle są też niebezpieczne, jeśli przypadkiem stworzysz taką, która nigdy się nie kończy.

Ale to przyszła przygoda.

Na razie twoje programy potrafią podejmować decyzje.

Bardzo mocny postęp.

Bardzo Python.