Jezyki i metody programowania

Transkrypt

Jezyki i metody programowania
Jezyki
˛
i metody programowania
Wykład 3
dr hab. Bożena Woźna-Szcześniak
[email protected]
Instytut Matematyki i Informatyki
Akademia Jana Długosza w Cz˛estochowie
Wykład na podstawie wykładów dr hab. Andrzeja Zbrzezngo
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Wartości boolowskie
Wartość logiczna to w logice podstawowa cecha zdania
określajaca
˛ jego stosunek do faktów.
W logice klasycznej każde zdanie może przyjać
˛ tylko jedna˛
z dwóch wartości logicznych:
prawda – oznaczajaca
˛ zgodność zdania ze zbiorem faktów
fałsz – oznaczajaca
˛ niezgodność zdania ze zbiorem faktów
W jezyku
˛
Python stała wbudowana False reprezentuje wartość
logiczna˛ fałsz, natomiast stała wbudowana True reprezentuje
wartość logiczna˛ prawda.
Obiekty False i True sa˛ jedynymi wartościami typu bool.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Wartości boolowskie
Typ bool jest podtypem typu int, a zatem wywołanie funkcji
wbudowanej issubclass(bool, int) zwróci wartość True:
>>> issubclass(bool, int)
True
>>> issubclass(int, int)
True
>>> issubclass(int, float)
False
W prawie wszystkich kontekstach wartości boolowskie False
i True zachowuja˛ sie˛ jak wartości 0 i 1, odpowiednio.
Wyjatkiem
˛
jest to, że po przekonwertowaniu wartości boolowskiej
na łańcuch, zwracany jest łańcuch 'False' lub 'True'.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Wartości boolowskie
Każdy obiekt może być w razie potrzeby potraktowany jako
wartość boolowska.
Nastepuj
˛ ace
˛ obiekty sa˛ traktowane jako wartość False:
None
False
zero z każdego typu numerycznego, przykładowo: 0, 0.0, 0j
dowolna pusta sekwencja, przykładowo: '', (), []
dowolne puste odwzorowanie, przykładowo: {}.
instancje klas zdefiniowanych przez użytkownika, o ile w klasie
zdefiniowana jest metoda __bool__() lub metoda __len__()
oraz metody te zwracaja˛ dla tych instancji liczbe˛ całkowita˛ zero
lub wartość boolowska˛ False.
Wszystkie pozostałe wartości traktowane sa˛ jak wartość
boolowska True.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Wartości boolowskie
Funkcja wbudowana bool zwraca dla każdego obiektu jego
wartość logiczna˛ określona˛ zgodnie z powyższymi regułami.
>> bool(None)
False
>> bool(6)
True
>> bool("")
False
>> bool("Python. Programming is fun again!")
True
>> bool([])
False
>> bool([10, 20, 30, 40])
True
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Operatory boolowskie – and, or, not
Rezultaty działań z użyciem operatorów boolowskich opisane sa˛
w poniższej tabeli, w kolejności rosnacych
˛
priorytetów:
Operator
Wynik
Uwagi
x or y jeżeli bool(x) == False, to y,
(1)
w przeciwnym razie x
x and y jeżeli bool(x) == False, to x,
(2)
w przeciwnym razie y
not x
jeżeli bool(x) == False, to True,
(3)
w przeciwnym razie False
Uwagi:
1
2
3
Argument y jest obliczany tylko wtedy, gdy bool(x) == False.
Argument y jest obliczany tylko wtedy, gdy bool(x) == True.
Operator not ma priorytet mniejszy niż nieboolowskie operatory.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Operatory boolowskie – and, or, not
>>> 5 or 8
5
>>> 5 and 8
8
>>> not 5 and 8
False
>>> 8 and 5 < 8
True
>>> 5 < 8 and 8
8
>>> not 5 != 8
False
>>> (not 5) != 8
True
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Prosta instrukcja warunkowa
Składnia prostej instrukcji warunkowej jest nastepuj
˛ aca:
˛
if wyrażenie:
blokInstrukcji
Wykonanie prostej instrukcji warunkowej zaczyna sie˛ od
obliczenia wartości boolowskiej wyrażenia wyrażenie.
Jeżeli wartościa˛ ta˛ jest True, to wykonywany jest
blokInstrukcji.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Schemat blokowy prostej instrukcji warunkowej
❄
❅
❅
❅
False
wyrażenie ❅
❅
❅
❅
❅
True
❄
blokInstrukcji
✛
❄
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Suma liczb dodatnich i suma liczb ujemnych)
def main():
n = int(input("Ilość liczb do wczytania: "))
suma_dod = suma_ujem = 0
for j in range(0, n):
a = float(input("Podaj kolejna˛ liczb˛
e: "))
if a > 0:
suma_dod = suma_dod + a
if a < 0:
suma_ujem = suma_ujem + a
print("Suma liczb dodatnich =", suma_dod)
print("Suma liczb ujemnych =", suma_ujem)
main()
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Ilość oraz suma liczb dodatnich i liczb ujemnych)
def main():
n = int(input("Ilość liczb do wczytania: "))
ile_dod = ile_ujem = 0; suma_dod = suma_ujem = 0.0
for j in range(0, n):
a = float(input("Podaj kolejna˛ liczb˛
e: "))
if a > 0:
ile_dod = ile_dod + 1
suma_dod = suma_dod + a
if a < 0:
ile_ujem = ile_ujem + 1
suma_ujem = suma_ujem + a
print("Ilość dodatnich =", ile_dod, end = " ")
print("Suma dodatnich =", suma_dod)
print("Ilość ujemnych =", ile_dod, end = " ")
print("Suma ujemnych
=", suma_ujem)
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Instrukcja warunkowa
Składnia instrukcji warunkowej jest nastepuj
˛ aca:
˛
if wyrażenie:
blokInstrukcji_T
else:
blokInstrukcji_F
Wykonanie instrukcji warunkowej zaczyna sie˛ od obliczenia
wartości boolowskiej wyrażenia wyrażenie.
Jeżeli wartościa˛ ta˛ jest True, to wykonywany jest
blokInstrukcji_T.
W przeciwnym razie wykonywany jest blokInstrukcji_F.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Schemat blokowy instrukcji warunkowej
True
❄
❄
❅
❅
❅
False
wyrażenie ❅
❅
❅
❅
❅
blokInstrukcji T
❄
blokInstrukcji F
✲✛
❄
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Suma liczb dodatnich i suma liczb ujemnych)
def main():
y = int(input("Podaj rok: "))
print("Rok", y, "ma", number_of_days(y), "dni.")
def number_of_days(y):
if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
return 366
else:
return 365
if __name__ == "__main__":
main()
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Pełna postać instrukcji warunkowej
Składnia pełnej instrukcji warunkowej jest nastepuj
˛ aca:
˛
if wyrażenie:
blokInstrukcji_T
elif wyrażenie_1
blokInstrukcji_1
...
elif wyrażenie_n
blokInstrukcji_n
else:
blokInstrukcji_F
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Schemat blokowy pełnej instrukcji warunkowej
❄
❅
❅
❅ True
wyrażenie ❅
❅
❅
❅
❅
False
❄
❅
❅
❅ True
wyrażenie 1 ❅
❅
❅
❅
❅
✲ blokInstrukcji T
✲ blokInstrukcji 1
False
❄
blokInstrukcji F
✛
❄
❄
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Pierwiastki rzeczywiste równania kwadratowego)
import math
def wypisz_pierwiastki(a, b, c):
delta = b * b - 4 * a * c
if delta > 0:
print("Równanie ma dwa pierwiastki")
print("x1 =", (-b - math.sqrt(delta)) / (2 * a))
print("x2 =", (-b + math.sqrt(delta)) / (2 * a))
elif delta == 0:
print("Równanie ma podwójny pierwiastek")
print("x1 = x2 = ", -b / (2 * a))
else:
print("Równanie nie ma pierwiastków")
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Instrukcja iteracyjna while (dopóki)
Ogólna postać instrukcji iteracyjnej while jest nastepuj
˛ aca:
˛
while wyrażenie:
blokInstrukcji
else:
blokIntrukcjiElse
przy czym fragment
else:
blokIntrukcjiElse
może nie wystapić.
˛
Instrukcja iteracyjna while jest używana do wykonywania bloku
instrukcji tak długo, jak długo wartościa˛ logiczna˛ wyrażenia
wyrażenie jest True.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Semantyka instrukcji iteracyjnej while
Każdorazowo wartościowane jest wyrażenie wystepuj
˛ ace
˛ po
słowie kluczowym while; jeśli jest ono prawdziwe, wykonywany
jest blokInstrukcji.
Jeśli za którymś razem (być może już za pierwszym) wartościa˛
wyrażenia bedzie
˛
False, nastepuje
˛
przerwanie wykonywania
instrukcji iteracyjnej.
Jeśli w instrukcji wystepuje
˛
klauzula else, to wykonywany jest
zwiazany
˛
z nia˛ ciag
˛ instrukcji.
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Schemat blokowy instrukcji iteracyjnej while bez
klauzuli else
✲
❄
❅
❅
❅
False
warunek ❅
❅
❅
❅
❅
True
❄
blokInstrukcji
❄
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Suma liczb od 1 do n)
"""Oblicza sum˛
e liczb naturalnych od 1 do n"""
#!/usr/bin/env python3
def main():
n = int(input("Podaj liczb˛
e naturalna:
˛ "))
s = 0
j = 1
while j <= n:
s = s + j
j = j + 1
print("Suma liczb od 1 do", n, "wynosi", s)
main()
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Ciag
˛ Collatza)
def main():
n = int(input("Podaj liczb˛
e naturalna:
˛ "))
ciag3nplus1(n)
def ciag3nplus1(n):
while n > 1:
print(n, end = ", ")
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
print(n, end = ".\n")
if __name__ == "__main__":
main()
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23
Podstawy jezyka
˛
Python
Przykład (Ilość cyfr w liczbie naturalnej)
def main():
n = int(input("Podaj liczb˛
e naturalna˛ dodatnia:
˛ "))
if n > 0:
print("Ilość cyfr liczby", n, ":", ile_cyfr(n))
else:
print("Skup si˛
e! Powiedziałem \"Dodatnia\"!")
˛
def ile_cyfr(n):
ile = 0
while n > 0:
ile += 1; n //= 10
return ile
if __name__ == "__main__":
main()
Wykład na podstawie wykładów dr
Bożena Woźna-Szcześniak (IMI AJD)
JMP
/ 23