Podstawy programowania w Pythonie

Transkrypt

Podstawy programowania w Pythonie
Podstawy programowania w Pythonie
Wykład 5
dr Andrzej Zbrzezny
Instytut Matematyki i Informatyki
Akademia Jana Długosza w Cz˛estochowie
7 listopada 2012
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
1 / 20
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.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
2 / 20
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'.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
3 / 20
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.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
4 / 20
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
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
5 / 20
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.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
6 / 20
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
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
7 / 20
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.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
8 / 20
Podstawy jezyka
˛
Python
Schemat blokowy prostej instrukcji warunkowej
❄
❅
❅
❅
False
wyrażenie ❅
❅
❅
❅
❅
True
❄
blokInstrukcji
✛
❄
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
9 / 20
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()
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
10 / 20
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)
main()
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
11 / 20
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.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
12 / 20
Podstawy jezyka
˛
Python
Schemat blokowy instrukcji warunkowej
True
❄
❅
❅
❅
False
wyrażenie ❅
❅
❅
❅
❅
❄
blokInstrukcji T
❄
blokInstrukcji F
✲✛
❄
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
13 / 20
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()
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
14 / 20
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
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
15 / 20
Podstawy jezyka
˛
Python
Schemat blokowy pełnej instrukcji warunkowej
❄
❅
❅
❅ True
wyrażenie ❅
❅
❅
❅
❅
False
❄
❅
❅
❅ True
wyrażenie 1 ❅
❅
❅
❅
❅
✲ blokInstrukcji T
✲ blokInstrukcji 1
False
❄
blokInstrukcji F
✛
❄
❄
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
16 / 20
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")
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
17 / 20
Podstawy jezyka
˛
Python
Notacja BNF
Gramatyka jezyka
˛
Python zapisana jest przy użyciu
zmodyfikowanej notacji Backusa-Naura (w skrócie BNF od
angielskiego Backus-Naur Form).
W notacji BNF używa sie˛ definicji takich jak poniższe:
nazwa
::=
m_litera ::=
m_litera (m_litera | "_")*
"a"..."z"
Pierwsza linia mówi, że nazwa jest ciagiem
˛
małych liter i znaków
podkreślenia zaczynajacym
˛
sie˛ od małej litery.
Druga linia mówi, że m_litera jest jednym ze znaków od a do z.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
18 / 20
Podstawy jezyka
˛
Python
Notacja BNF
Każda reguła zaczyna sie˛ do nazwy i symbolu ::=.
Pionowa kreska | jest operatorem alternatywy i ma najniższy
priorytet.
Gwiazdka (*) oznacza zero lub wiecej
˛
powtórzeń poprzedniego
elementu, natomiast plus (+) oznacza jedno lub wiecej
˛
powtórzeń.
Ujecie
˛
frazy w nawiasy kwadratowe ([]) oznacza zero lub jedno
wystapienie
˛
tej frazy.
Operatory * i + maja˛ najwyższy priorytet.
Nawiasy sa˛ używane do grupowania.
Symbole terminalne ujmuje sie˛ w cudzysłowy.
Białe znaki (spacje i tabulatory) służa˛ do oddzielania tokenów.
Reguły sa˛ zwykle zapisywane w pojedynczych liniach.
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
19 / 20
Podstawy jezyka
˛
Python
Składnia instrukcji warunkowej w zmodyfikowanej notacji BNF
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
Składnia bloku instrukcji w zmodyfikowanej notacji BNF
compound_stmt ::= if_stmt | while_stmt | for_stmt
| try_stmt | with_stmt
| funcdef | classdef
suite
::= stmt_list NEWLINE
| NEWLINE INDENT statement+ DEDENT
statement
::= stmt_list NEWLINE
| compound_stmt
stmt_list
::= simple_stmt (";" simple_stmt)* [";"]
dr Andrzej Zbrzezny (IMI AJD)
Podstawy programowania w Pythonie
07.11.2012
20 / 20