Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
Zawsze zadziwia nas "inteligencja" komputerów. Potrafią obsługiwać maszyny, kierować samolotami, grać w gry... Jak to robią? Dzieje się tak za sprawą logiki. Słowo logika pochodzi od greckiego słowa λόγος (logos – słowo, rozum, myśl). Jest ona ważną częścią matematyki. Została wprowadzona do nauki już przez starożytnych Greków.
Jest to nauka o poprawnym rozumowaniu, którą matematyka wykorzystuje do udowadniania swoich twierdzeń. Bez logiki nie byłoby współczesnej nauki.
W logice mamy dwie wartości: prawdę
Uruchom poniższy program:
# Wartości logiczne #------------------ print("FAŁSZ: ",False) print("PRAWDA:",True)
W oknie konsoli zostanie wyświetlony tekst:
FAŁSZ: False PRAWDA: True |
W języku Python mamy dwie stałe logiczne: False o wartości 0 i True o wartości 1. Zmodyfikuj program:
# Wartości logiczne #------------------ print("FAŁSZ =",int(False)) print("PRAWDA =",int(True))
FAŁSZ = 0 PRAWDA = 1 |
Tutaj funkcja
Uruchom program:
# Wyrażenia logiczne #------------------- a = int(input("Podaj wartość a = ")) print("a > 10? :",a > 10)
W programie tworzymy zmienną a, po czym odczytujemy z konsoli
tekst, zamieniamy go na liczbę całkowitą i umieszczamy ją w zmiennej. Następnie wyświetlamy
wartość wyrażenia
Podaj wartość a = 5 a > 10? : False |
Jeśli wpiszesz np. liczbę 12, komputer wypisze:
Podaj wartość a = 12 a > 10? : True |
Operatory porównań w języku Python są następujące:
Operator | Przykład | Opis |
> | a > b | Zwraca True, jeśli
a jest większe od b, zwraca False w przypadku przeciwnym. |
< | a < b | Zwraca True, jeśli
a jest
mniejsze od b, zwraca False w przypadku przeciwnym. |
== | a==b | Zwraca True, jeśli
a jest równe b, zwraca False w przypadku przeciwnym. |
!= | a != b | Zwraca True, jeśli
a jest różne od b, zwraca False w przypadku przeciwnym. |
>= | a >= b | Zwraca True, jeśli
a jest większe lub
równe b, zwraca False w przypadku przeciwnym. |
<= | a <= b | Zwraca True, jeśli
a jest mniejsze lub
równe b, zwraca False w przypadku przeciwnym. |
W powyższej tabelce
Wartość logiczną można umieszczać w zmiennej przy pomocy operatora przypisania =:
# Typ logiczny #------------- a = True b = False print("Zawartość a:",a) print("Zawartość b:",b) print() a = (5 != 5) b = (5 >= 5) print("Zawartość a:",a) print("Zawartość b:",b)
Zawartość a: True Zawartość b: False Zawartość a: False Zawartość b: True |
Jeśli chcemy wykonać warunkowo tylko jedną instrukcję, to stosujemy następującą składnię:
if warunek: instrukcja
Działa to w następujący sposób:
Komputer wyznacza wartość logiczną warunku. Jeśli wartością jest True (lub dowolna wartość różna od 0), to zostanie wykonana instrukcja po dwukropku. Jeśli wartością jest False (lub wartość 0), to komputer nie wykona tej instrukcji.
Uruchom program:
# instrukcja if #-------------- if True: print("Witaj 1") if False: print("ABCDEFGHIJK...") if 5: print("Witaj 2") if 0: print("123456789...") a = int(input("Wpisz liczbę: ")) if a > 0: print("Witaj 3") if a < 0: print("Witaj 4")
Witaj 1 Witaj 2 Wpisz liczbę: 4 Witaj 3 |
Witaj 1 Witaj 2 Wpisz liczbę: -12 Witaj 4 |
Kolejny program jest bardziej praktyczny. Odczytuje on liczbę i sprawdza, czy jest parzysta:
# instrukcja if #-------------- a = int(input("Wpisz liczbę: ")) if a % 2: print("NIE",end="") print("PARZYSTA")
Przeanalizujmy go:
Wynika z tego, iż jeśli a jest nieparzyste, to komputer wypisze NIE, po czym wypisze słowo PARZYSTA bezpośrednio za NIE, co da wydruk NIEPARZYSTA. Jeśli a jest parzyste, to komputer nie wyświetli słowa NIE, tylko samo słowo PARZYSTA.
Kolejny prosty program ogranicza wartość wprowadzonej liczby do przedziału
# instrukcja if #-------------- a = int(input("Wpisz liczbę: ")) if a > 10: a = 10 if a < 1: a = 1 print("Liczba =",a)
Następny program odczytuje 3 liczby do zmiennych
# instrukcja if #-------------- a = int(input("Wpisz liczbę a: ")) b = int(input("Wpisz liczbę b: ")) c = int(input("Wpisz liczbę c: ")) x = a # zapamiętujemy a if b > x: x = b # uaktualniamy if c > x: x = c # uaktualniamy print() print("Największa jest liczba",x) print()
Jeśli warunkowo chcemy wykonać więcej niż pojedynczą instrukcję, to musimy zastosować blok. W języku Python blok określamy przy pomocy odstępu. Instrukcje należące do tego samego bloku posiadają taki sam odstęp od lewej krawędzi. Na początku może się to wydawać dziwne, lecz jest bardzo proste. Odstępy zwykle ustala się co 4 lub co 2 pozycje znakowe. Instrukcja warunkowa z blokiem wygląda następująco:
if warunek: instrukcja 1 instrukcja 2 ... instrukcja n ...
Poniższy program odczytuje 2 liczby do zmiennych
W wielu różnych algorytmach występuje operacja zamiany zawartości dwóch zmiennych. Wymaga ona trzech kroków oraz dodatkowej zmiennej pomocniczej.
Powyższa animacja pokazuje kolejne kroki (w języku Python można to zrobić prościej, co zobaczymy na dalszych lekcjach).
Załóżmy iż mamy dwie
K01: x ← a K02: a ← b K03: b ← x
W kroku 1 wpisujemy do zmiennej x zawartość
zmiennej a. W ten sposób ta zawartość zostaje zabezpieczona.
W kroku 2 do zmiennej a wpisujemy zawartość zmiennej
b, mamy zatem
wykonane połowę zadania.
W kroku 3 wpisujemy do zmiennej b
zapamiętaną
# instrukcja if z blokiem #------------------------ a = int(input("Wpisz liczbę a: ")) b = int(input("Wpisz liczbę b: ")) if a > b: x = a # zamieniamy miejscami a z b a = b b = x print() print(a,b) print()
W programowaniu często zdarza się tak, iż sprawdzając warunek, chcemy aby została wykonana jedna instrukcja (lub grupa instrukcji), jeśli warunek jest prawdziwy, a inna instrukcja (lub grupa instrukcji), gdy warunek jest fałszywy. W takim przypadku ma zastosowanie druga wersja instrukcji if. Jej składnia jest następująca:
if warunek: instrukcja 1 else: instrukcja 2 lub if warunek: blok 1 ... else: blok 2 ...
Słowo angielskie else oznacza: inaczej, w przeciwnym razie.
Komputer oblicza warunek. Jeśli jest prawdziwy (daje wynik różny od zera), to wykonana zostaje instrukcja 1 (lub blok 1). Instrukcja 2 (lub blok 2) jest pomijana. Jeśli warunek jest fałszywy (daje wynik równy zero), to instrukcja 1 (lub blok 1) zostaje pominięta, a komputer wykona instrukcję 2 (lub blok 2).
Jeśli stosujemy blok, to należy stosować ten sam odstęp w obu blokach 1 i 2.
Poniższy przykładowy program odczytuje hasło i udziela dostępu, jeśli hasło jest dobre, lub odmawia dostępu przy złym haśle.
if input("wpisz hasło: ") == "abc": print("Masz dostęp") dostęp = True else: print("Brak dostępu") dostęp = False print(dostęp)
Program działa następująco:
Jako wyrażenie stosujemy porównanie tekstu zwróconego przez input( ) z tekstem hasła. Jeśli oba teksty są równe, wyrażenie będzie prawdziwe. Wtedy zostanie wykonany blok pierwszy. Komputer wypisze "Masz dostęp" i zmiennej dostęp nada wartość True. Blok drugi zostanie pominięty,
Jeśli teksty będą różne, komputer wykona blok drugi, pomijając blok pierwszy. Wypisze "Brak dostępu" i zmiennej dostęp nada wartość False.
Na koniec komputer wypisze wartość zmiennej dostęp.
W jednym wierszu można umieścić kilka instrukcji, oddzielając je średnikami:
if input("wpisz hasło: ") == "abc": print("Masz dostęp"); dostęp = True else: print("Brak dostępu"); dostęp = False print(dostęp)
Jednakże nie polecam tego sposobu, gdyż program traci na czytelności.
Następny program rozwiązuje równanie liniowe o postaci:
a·x + b = c
Z matematyki wiemy, że takie równanie posiada rozwiązanie, jeśli współczynnik a jest różny od 0. Wtedy:
a·x + b = c / - b a·x + b - b = c - b a·x = c - b / : a a·x : a = (c - b) : a x = (c - b) : a
# Równanie liniowe # Imię Nazwisko, Klasa # Data #--------------------- print("Równanie liniowe:") print(" ax + b = c") print("-----------------") print() print("Podaj współczynniki:") a = float(input("a = ")) b = float(input("b = ")) c = float(input("c = ")) print() if a: # prawdziwe dla a różnego od 0 x = (c - b) / a print("x =",x) else: print("Brak rozwiązania!!!") print()
Zastanów się, jak zmienić powyższy program na wersje if bez bloków z pojedynczymi instrukcjami i bez zmiennej x.
Trzecia wersja instrukcji if ma następującą postać:
if warunek_1: instrukcja_1 elif warunek_2: instrukcja_2 elif warunek_3: instrukcja_3 ... elif warunek_n: instrukcja_n else: instrukcja
Działanie jest następujące:
Jeśli warunkowo chcesz wykonać kilka instrukcji, to stosujesz blok instrukcji z odstępem.
Poniższy program odczytuje ocenę w postaci liczby od 1 do 6, a następnie wyznacza jej formę słowną:
# Logika #------- # odczytujemy ocenę w postaci # liczby 1 2 3 4 5 6 ocena = int(input("Podaj ocenę liczbową od 1 do 6: ")) print() print(ocena,"=",end=" ") # zamieniamy ją na postać słowną if ocena == 1: ocena = "stopień niedostateczny" elif ocena == 2: ocena = "stopień dopuszczający" elif ocena == 3: ocena = "stopień dostateczny" elif ocena == 4: ocena = "stopień dobry" elif ocena == 5: ocena = "stopień bardzo dobry" elif ocena == 6: ocena = "stopień celujący" else: ocena = "BŁĘDNA WARTOŚĆ OCENY" print(ocena)
W wyrażeniach logicznych występują operacje logiczne, podobnie jak w wyrażeniach arytmetycznych występują operacje arytmetyczne (np. dodawanie, mnożenie...). Istnieje specjalny dział matematyki, zwany Algebrą Boole'a. Nazwa ta pochodzi od sławnego matematyka angielskiego George Boole'a, który ją opracował i opisał.
W logice istnieją trzy podstawowe funkcje logiczne. Opiszemy je tabelkami.
a | not a |
False | True |
True | False |
Negacja jest operacją jednoargumentową. Zwraca wartość logiczną przeciwną do wartości logicznej swojego argumentu. W języku Python negację wykonuje operator not(czytaj: nieprawda, że). Wyrażenie a jest dowolnym wyrażeniem, które zostanie potraktowane jako logiczne (patrz: definicja na początku podrozdziału). Jeśli wyrażenie a będzie prawdziwe (True lub różne od zera), to wynikiem not a będzie False (fałsz). Jeśli wyrażenie a będzie fałszywe (False lub równe zero), to wynikiem not a będzie True (prawda).
Przejdź do konsoli Pythona i wpisz:
not True not False not 5 not 2 + 2 == 4
a | b | a or b |
False | False | False |
False | True | True |
True | False | True |
True | True | True |
Alternatywa jest operacją dwuargumentową. Symbolem operatora alternatywy w języku Python jest or (czytaj: lub). Zasada pracy jest następująca:
a or b
= a, jeśli a jest prawdziwe
(True lub niezerowe)
a or b =
b, jeśli a jest fałszywe
(False lub równe 0)
Przejdź do konsoli Pythona i wpisz:
False or False 10 - 2 == 8 or 2 + 2 < 3 5 or False 0 or "Ala" False or 15
a | b | a and b |
False | False | False |
False | True | False |
True | False | False |
True | True | True |
Koniunkcja jest również operacją dwuargumentową. Symbolem operatora koniunkcji w języku Python jest and (czytaj: i). Zasada pracy jest następująca:
Przejdź do konsoli Pythona i wpisz:
False and True 5 and 12 0 and 9999 False and "Ala" True and "Magda"
Jeśli chcesz, aby wynik operatorów logicznych był wartością logiczną True lub False, to zastosuj funkcję bool( ), która dokonuje takiej konwersji. Przejdź do konsoli Pythona i wpisz:
bool("Jasiek" or 0) bool(0 and "Jasiek")
Operatory logiczne stosujemy, gdy potrzebne są nam złożone warunki, np. chcemy sprawdzić, czy liczba x należy do przedziału domkniętego [a,b] (przedział domknięty [a,b] to taki, do którego należą liczby a i b oraz wszystkie liczby leżące pomiędzy a i b). Aby liczba x wpadała w przedział [a,b] musi jednocześnie spełniać dwa warunki:
Przejdź do konsoli Pythona i wpisz:
5 > 3 and 5 < 7 5 > 3 and 5 < 4
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.