Python #3 (operatory logiczne, if-elif-else)

Python #3 (operatory logiczne, if-elif-else)
Photo by Mohammad Rahmani / Unsplash

Porównania

  • W Pythonie porównania służą do sprawdzania relacji między wartościami i zwracają wynik logiczny - True lub False.
  1. Równość.
print(5 == 5)   # True
print(5 == 4)   # False
  1. Nierówność.
print(5 != 3)   # True
print(5 != 5)   # False
  1. Mniejsze; większe.
print(2 < 10)  # True
print(5 < 1)   # False
print(7 > 3)   # True
print(2 > 10)  # False
  1. Mniejsze lub równe; większe lub równe.
print(4 <= 4)   # True
print(3 >= 10) # False

Operatory logiczne

Operatory logiczne

AND - warunki muszą być prawdziwe
OR - jeden warunek musi być prawdziwy
NOT - negacja- odwraca wartość logiczną
Kolejność -> not -> and -> or

Wcięcia

Wcięcia (ang. indentation) w Pythonie są bardzo ważne, bo to właśnie dzięki nim interpreter rozumie, które linie kodu należą do tego samego bloku.

  1. Określają strukturę programu. W innych językach (np. C, Java) używa się nawiasów{} do oznaczania bloków. W Pythonie rolę tych nawiasów pełnią wcięcia.
  2. Bez wcięć kod nie zadziała. Jeżeli źle ustawisz wcięcia, dostaniesz błąd.
  3. Poprawiają czytelność kodu.
  4. Zasady wcięć w Pythonie:
  • Standardem są 4 spacje na jedno wcięcie (zgodnie z dobrymi praktykami PEP8 https://peps.python.org/pep-0008/
  • Wszystkie linie w jednym bloku muszą mieć takie samo wcięcie.
  • Nie mieszamy spacji i tabulatorów (bo mogą wywołać błędy).

If, elif, else

  1. Instrukcja if sprawdza warunek – jeśli jest prawdziwy (True), to wykonuje kod w bloku poniżej.
  2. elif (skrót od else if) pozwala sprawdzić dodatkowe warunki, gdy poprzedni if okazał się fałszywy. Możesz mieć dowolną liczbę elif.
  3. Instrukcja
  4. else wykona się wtedy, gdy żaden wcześniejszy warunek (if ani elif) nie był prawdziwy.

Schemat działania:

  1. Python sprawdza od góry: zaczyna od if. Jeśli warunek w if jest True → wykonuje blok i omija resztę (elif i else).
  2. Jeśli warunek w if jest False → sprawdza kolejne elif.
  3. Jeśli żaden warunek nie był prawdziwy → wykonuje się blok else.

Używając tylko if komputer wykonałby każde z porównań niezależnie od wyniku poprzedniego. Jeśli korzystamy z elif porównania wykonują się do momentu uzyskania w którymś odpowiedzi True - pozostałe wtedy są pomijane. Dzięki temu minimalizujemy ilość niepotrzebnie wykonywanych operacji.

a = 5
b = 2

if a > b:
    print("a wieksze od b")
elif a == b:
    print("a jest rowne b")
else:
    print("a jest mniejsze od b")
print("Koniec programu")
  • nadawanie haseł
haslo = "mojehaslo"
nowe_haslo = input("Wprowadz haslo:   " )
if haslo == nowe_haslo:
    print("identyczne!")
else:
    if len(nowe_haslo) < 12:
        print("Haslo za krotkie")
    else:
        print("Nowe haslo prawidlowe.")
haslo = nowe_haslo
print("Twoje haslo to:  ", haslo)
print("Koniec programu")
  • if elif else versus same if
zwierzak = "kot"

if zwierzak == "pies":
    print("O, miłośnik psów!")
    print("Kostka dla Ciebie :) .")
elif zwierzak == "kot":
    print("O, miłośnik kotów!")
    print("Miaaauuuuuu .")
elif zwierzak == "rybka":
    print("O, miłośnik rybek!")
    print("Lubisz wodę?")
else:
    print("A co to za zwierzak?")

print("Pa pa!")

Wynik: O, miłośnik kotów!
Miaaauuuuuu .
Pa pa!

Przy samych if wykonuje się else, bo poprzednie if daje False:

zwierzak = "kot"
if zwierzak == "pies":
    print("O, miłośnik psów!")
    print("Kostka dla Ciebie :) .")
if zwierzak == "kot":
    print("O, miłośnik kotów!")
    print("Miaaauuuuuu .")
if zwierzak == "rybka":
    print("O, miłośnik rybek!")
    print("Lubisz wodę?")
else:
    print("A co to za zwierzak?")

print("Pa pa!")

Wynik: Wynik: O, miłośnik kotów!
Miaaauuuuuu .
A co to za zwierzak?
Pa pa!

  • Sprawdzanie czy jest string pod zmienną
rybka = "Nemo"

if rybka:
    print("to jest i staw")
else:
    print("Nie ma rybki")

W Pythonie każdy niepusty string traktowany jest jako wartość prawdziwa (True).

Instrukcja warunkowa if rybka: Ponieważ rybka zawiera tekst "Nemo", a nie pusty string (""), warunek jest spełniony. Wynik: to jest i staw

  • Nowy kalkulator BMI z zakresami
wzrost_m = float(input("Podaj wzrost w metrach np. 1.70: ").replace(",", "."))
masa_kg = float(input("Podaj mase w kilogramach   ").replace(",", "."))
bmi = masa_kg/wzrost_m**2
print("Twoje BMI to:  ", round(bmi, 2))

if bmi < 16.0:
    print ("Wyglodzenie")
elif bmi <= 16.9:
    print("Wychudzenie")
elif bmi <= 18.4:
    print("Niedowaga")
elif bmi <= 24.9:
    print("Waga prawidłowa")
elif bmi <= 29.9:
    print("Nadwaga")
elif bmi <= 34.9:
    print("I stopien otylosci")
elif bmi <= 39.9:
    print("II stopien otylosci")
else:
    print("III stopien otylosci")

taw

Nowe!

  • \n to znak specjalny (tzw. znak nowej linii). Mówi Pythonowi: „przejdź do następnej linijki” w tekście.
  • potrójne cudzysłowy """...""" albo ''' ... ''' mają specjalne zastosowania. Wielolinijkowe napisy (multi-line strings) -> Dzięki potrójnym cudzysłowom możesz zapisać tekst w kilku liniach bez używania \n.
  • losowanie
import.random
  • rand.int (często używane jako random.randint) pochodzi z modułu random w Pythonie i służy do losowania liczby całkowitej z podanego przedziału.
rand.int
import random

walka_wrecz_gracza = 5
obrazenia_gracza = 7
rzut_koscia = random.randint(1,20)
pancerz_przeciwnika = 10
punkty_zycia_przeciwnika = 5

if walka_wrecz_gracza + rzut_koscia > pancerz_przeciwnika and rzut_koscia > 1:
    print("Trafiony! Zadano obrazenie przeciwkowi.")
    punkty_zycia_przeciwnika -= obrazenia_gracza
    if punkty_zycia_przeciwnika <=0:
        print ("Przeciwnik padł")
elif rzut_koscia == 1:
    print("Krytyczne pudło! Tracisz turę.")

Zadanie - quiz

print("=== Quiz o DNA ===")
print("")

punkty = 0

# Pytanie 1

print("\n1. Gdzie w komórce eukariotycznej znajduje się DNA?")
print("a) W cytoplazmie")
print("b) W jądrze komórkowym")
print("c) W błonie komórkowej")
odp = input("Twoja odpowiedź: ")

if odp == "b":
    print("Dobrze!")
    punkty += 1
else:
    print("Źle! Poprawna odpowiedź to b")

# Pytanie 2
print("\n2. Jaką strukturę przestrzenną ma cząsteczka DNA?")
print("a) Podwójna helisa")
print("b) Potrójna spirala")
print("c) Pojedynczy łańcuch")
odp = input("Twoja odpowiedź: ")

if odp == "a":
    print("Dobrze!")
    punkty += 1
else:
    print("Źle! Poprawna odpowiedź to a")

# Pytanie 3
print("\n3. Która zasada azotowa łączy się zawsze z tyminą?")
print("a) Guanina")
print("b) Adenina")
print("c) Cytozyna")
odp = input("Twoja odpowiedź: ")

if odp == "b":
    print("Dobrze!")
    punkty += 1
else:
    print("Źle! Poprawna odpowiedź to b")

# Pytanie 4
print("\n4. Z jakich zasad azotowych zbudowane jest DNA?")
print("a) Adenina, Tymina, Cytozyna, Guanina")
print("b) Adenina, Uracyl, Cytozyna, Guanina")
print("c) Adenina, Tyrozyna, Cysteina, Glutamina")
odp = input("Twoja odpowiedź: ")

if odp == "a":
    print("Dobrze!")
    punkty +=1
else:
    print("Źle! Poprawna odpowiedź to a")

# Pytanie 5
print("\n5. Jaką rolę pełni DNA w organizmach żywych?")
print("a) Odpowiada za transport tlenu")
print("b) Dostarcza energii do reakcji komórkowych")
print("c) Jest nośnikiem informacji genetycznej")
odp = input("Twoja odpowiedź: ")

if odp == "c":
    print("Dobrze!")
    punkty +=1
else:
    print("Źle! Poprawna odpowiedź to c")
# Wynik końcowy
print(f"\nTwój wynik: {punkty}/5")

Quiz zmodyfikowany

print("*************************")
print("""Witaj w quizie
      Gotowy?""")
print("*************************")
odpowiedz = input("Tak czy nie?: ")

if odpowiedz == "tak" or "Tak" or "TAK":
    print("Zaczynamy!")

print("")
punkty = 0

#Pytanie 1
print("""Gdzie w komórce eukariotycznej znajduje się DNA?
a) w jądrze komórkowym
b) w wakuoli
c) w cytoplazmie""")
odp = input("Prawidłowa odpowiedź to (wybierz a, b lub c): ")

if odp == "a":
    print("Dobrze!")
    punkty += 1
else:
    print("Zła odpowiedź. Prawidłowa odpowiedź to a")
    punkty -= 1
print("")
# Pytanie 2
print("""Jaką strukturę przestrzenną ma cząsteczka DNA?
a) Podwójna helisa
b) Potrójna spirala
c) Potrójna helisa""")
odp = input("Prawidłowa odpowiedź to (wybierz a, b lub c): ")

if odp == "a":
    print("Dobrze!")
    punkty += 1
else:
    print("Zła odpowiedź. Prawidłowa odpowiedź to a")
    punkty -= 1
print("")
#Pytanie 3
print("""Która zasada azotowa łączy się zawsze z tyminą?
a) Guanina
b) Adenina
c) Cytozyna""")
odp = input("Prawidłowa odpowiedź to (wybierz a, b lub c): ")

if odp == "b":
    print("Dobrze!")
    punkty += 1
else:
    print("Zła odpowiedź. Prawidłowa odpowiedź to b")
    punkty -= 1
print("")
#Pytanie 4
print("""Z jakich zasad azotowych zbudowany jest DNA?
a) Adenina, Tymina, Cytozyna, Guanina
b) Adenina, Uracyl, Cytozyna, Guanina
c) Adenina, Tyrozyna, Cysteina, Glutamina""")
odp = input("Prawidłowa odpowiedź to (wybierz a, b lub c): ")

if odp == "a":
    print("Dobrze!")
    punkty += 1
else:
    print("Zła odpowiedź. Prawidłowa odpowiedź to a")
    punkty -= 1
print("")
#Pytanie 5
print("""Jaką rolę pełni DNA w organizmach żywych?
a) Odpowiada za transport tlenu
b) Dostarcza energii do reakcji komórkowych
c) Jest nośnikiem informacji genetycznej""")
odp = input("Prawidłowa odpowiedź to (wybierz a, b lub c): ")

if odp == "c":
    print("Dobrze!")
    punkty += 1
else:
    print("Zła odpowiedź. Prawidłowa odpowiedź to c")
    punkty -= 1


print("")
print("***************************************")
print(f"Twoja liczba punktów to {punkty}/5")
if punkty >= 3:
    print("Test zaliczony. Gratulacje!")
else:
    print("Spróbuj jeszcze raz")
print("***************************************")