a =5if a >0:print("Liczba dodatnia")elif a ==0:print("Zero")else:print("Liczna ujemna")
Liczba dodatnia
Zagnieżdżone instrukcje warunkowe:
if<expr>:<statement(s)>if<expr>:<statement(s)>
i =21if i >0:print("liczba jest dodatnia")if i %2==0:print("Liczba jest dodatkowo parzysta")
liczba jest dodatnia
for - pętla
for i in<collection>:<loop body>
Przykład:
for i inrange(5):print(i)
0
1
2
3
4
range
Generuje nam ciąg liczb (dedykowany typ range). Trzeba zamienić na listę “by podejrzeć”.
Uwaga: wszystkie argumenty muszą być w typie całkowitym.
Jeden argument - to “koniec” - ciąg tworzą liczby naturalne od \(0\) do \(n-1\). Krok domyślny to 1.
Dwa argumenty - to “początek” i “koniec”. Krok domyślny to 1. Wtedy wyświetlone są liczby całkowite z przedziału lewostronnie domkniętego \([początek, koniec)\).
Trzy argumenty - to “początek”, “koniec” oraz krok.
Co oznacza w Pythonie, że wartości przekazywane są przez referencję?
a =5b = ab +=2print(a)print(b)
5
7
Typy sekwencyjne
Listy
Lista w Pythonie to tzw. typ sekwencyjny umożliwia przechowywanie elementów różnych typów.
Cechy:
zmienny (mutable) - umożliwia przypisanie wartości pojedynczym elementom
do zapisu używamy nawiasów kwadratowych
poszczególne elementy rozdzielamy przecinkami
każdy element listy ma przyporządkowany indeks
elementy listy są numerowane od zera
listy dopuszczają porządek (o ile elementy są porównywalne)
listy są dynamiczne (mogą mieć różną długość)
listy mogą być zagnieżdżone
Uwaga!
Listy w języku Python są specyficzną strukturą danych nie zawsze dostępną w innych językach programowania. Pojęcie listy w całej informatyce “szersze”. Wyróżnia się np. listy jednokierunkowe, które nie muszą mieć indeksu. Nie będziemy takich przypadków analizować.
nazwa = [element1, element2, ..., elementN]
Pusta lista:
a = []b =list()
Lista z liczbami:
a = [2, 3, 4.5, 5, -3.2]
Lista mieszana:
b = ['abcd', 25+3j, True, 1]
Kolejność ma znaczenie
a = [1, 2, 3, 4]b = [4, 3, 2, 1]print(a == b)
False
Elementy na liście nie muszą być unikalne
a = [1, 2, 3, 4, 2]b = [1, 2, 3, 4]print(a)print(a == b)
[1, 2, 3, 4, 2]
False
Indeks - dostęp do elementów listy (od zera)
a = [1, 3, 'abc', False, -2.3, 'XYZ', 9.3]print(a[1])print(a[4])print(a[0])#print(a[7])
3
-2.3
1
a = [1, 3, 'abc', False, -2.3, 'XYZ', 9.3]print(a[-1])print(a[-5])print(a[-7])
9.3
abc
1
a = [1, 3, 'abc', False, -2.3, 'XYZ', 9.3]print(a[1:4])print(a[-5:-2])print(a[:4])
list.clear() - usuwa wszystkie elementy z listy. Równoważnie: del a[:]
a = [1, 3, 'abc', False]a.clear()print(a)
[]
list.index(x) - zwraca indeks elementu x (o ile istnieje, inaczej błąd), w przypadku duplikatów pierwszy z lewej list.index(x,start) - zwraca indeks elementu x (o ile istnieje, inaczej błąd) zaczynając od pozycji start, w przypadku duplikatów pierwszy z lewej list.index(x,start,end) - zwraca indeks elementu x (o ile istnieje, inaczej błąd) zaczynając od pozycji start a kończąc na end-1, w przypadku duplikatów pierwszy z lewej
a ="Olsztyn"b ="Gdańsk"print(a + b)print(a *2)print(2* a)
OlsztynGdańsk
OlsztynOlsztyn
OlsztynOlsztyn
Specjalne funkcje
chr() zamienia liczbę całkowitą na znak
ord() zamienia znak na liczbę całkowitą odpowiadającą pozycji w tabeli znaków
len() - długość napisu
str() - rzutuje argument na napis
Porządek leksykograficzny
Mądra definicja z wikipedii:
Relację leksykograficzną \(\preccurlyeq\) między ciągami \(\alpha, \beta \in X^*\) ustala się następująco:
jeśli istnieje wskaźnik \(j\) taki, że \(\alpha(j) \neq \beta(j),\) to znajdujemy najmniejszy \(i\) o tej własności. Wówczas
\(\alpha \preccurlyeq \beta\) gdy \(\alpha(i) \preccurlyeq \beta(i)\) lub \(\beta \preccurlyeq \alpha\) gdy \(\beta(i) \preccurlyeq \alpha(i)\) (tzn. relacja między ciągami jest zgodna z relacją między odpowiednimi elementami)
jeśli taki \(j\) nie istnieje, to
jeśli oba są skończone i tej samej długości, to \(\alpha = \beta\)
jeśli oba ciągi są nieskończone, to \(\alpha = \beta\)
jeśli są różnej długość np. \(\beta\) jest dłuższy od \(\alpha\) (w szczególności \(\beta\) może być nieskończony), to \(\alpha\ \preccurlyeq\ \beta\)
By uruchomić to też w skrypcie, to potrzebujemy argumentu:
print((lambda x: x +1)(2))
lub
add_one =lambda x: x +1print(add_one(2))
Możemy też tworzyć złożenia funkcji (funkcje wyższych rzędów):
high_ord_func =lambda x, func: x + func(x)print(high_ord_func(2, lambda x: x * x))print(high_ord_func(2, lambda x: x +3))
6
7
Możemy również skorzystać z różnych opcji argumentów jak dla funkcji:
print((lambda x, y, z: x + y + z)(1, 2, 3))print((lambda x, y, z=3: x + y + z)(1, 2))print((lambda x, y, z=3: x + y + z)(1, y=2))print((lambda*args: sum(args))(1,2,3))print((lambda**kwargs: sum(kwargs.values()))(one=1, two=2, three=3))print((lambda x, *, y=0, z=0: x + y + z)(1, y=2, z=3))
6
6
6
6
6
6
Typ
string ='abc'print(lambda string: string)
<function <lambda> at 0x0000029EC4F6A440>
Różnice względem zwykłej funkcji:
def cube(y):print(f"Finding cube of number:{y}")return y * y * ylambda_cube =lambda num: num **3print("invoking function defined with def keyword:")print(cube(30))print("invoking lambda function:", lambda_cube(30))
invoking function defined with def keyword:
Finding cube of number:30
27000
invoking lambda function: 27000
Przykłady praktyczne
r =lambda a: a +15print(r(10))r =lambda x, y: x * yprint(r(12, 4))
25
48
subject_marks = [('English', 88), ('Science', 90), ('Maths', 97), ('Social sciences', 82)]print("Original list of tuples:")print(subject_marks)subject_marks.sort(key=lambda x: x[1])print("\nSorting the List of Tuples:")print(subject_marks)
Original list of tuples:
[('English', 88), ('Science', 90), ('Maths', 97), ('Social sciences', 82)]
Sorting the List of Tuples:
[('Social sciences', 82), ('English', 88), ('Science', 90), ('Maths', 97)]
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print("Original list of integers:")print(nums)print("\nEven numbers from the said list:")even_nums =list(filter(lambda x: x %2==0, nums))print(even_nums)print("\nOdd numbers from the said list:")odd_nums =list(filter(lambda x: x %2!=0, nums))print(odd_nums)
Original list of integers:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Even numbers from the said list:
[2, 4, 6, 8, 10]
Odd numbers from the said list:
[1, 3, 5, 7, 9]
array_nums1 = [1, 2, 3, 5, 7, 8, 9, 10]array_nums2 = [1, 2, 4, 8, 9]print("Original arrays:")print(array_nums1)print(array_nums2)result =list(filter(lambda x: x in array_nums1, array_nums2))print("\nIntersection of the said arrays: ", result)
Original arrays:
[1, 2, 3, 5, 7, 8, 9, 10]
[1, 2, 4, 8, 9]
Intersection of the said arrays: [1, 2, 8, 9]
“Obiektowość”
Programowanie obiektowe w Pythonie
Lego jako model programowanie obiektowego
class Employee:"""Common base class for all employees""" empCount =0def__init__(self, name, salary):self.name = nameself.salary = salary Employee.empCount +=1def displayCount(self):print("Total Employee %d"% Employee.empCount)def displayEmployee(self):print("Name : ", self.name, ", Salary: ",self.salary)emp1 = Employee("John", 2000)emp2 = Employee("Anna", 5000)emp1.displayEmployee()emp2.displayEmployee()
Name : John , Salary: 2000
Name : Anna , Salary: 5000