Podstawowe elementy komputera to:

Realizowany przez komputer program składa się z rozkazów – instrukcji maszynowych w kodzie zero-jedynkowym. Tak zapisany program w języku wewnętrznym jest bardzo nieczytelny.
Użytkownicy formułują algorytmy w językach programowania wyższego poziomu.
Języki programowania posiadają:
Program napisany w języku programowania może być przetłumaczony na język wewnętrzny komputera przez program nazywany translatorem.
Wyróżnia się dwa rodzaje translatorów:
W przypadku wykorzystania kompilatora obliczenia prowadzone są w dwóch fazach:
1. faza kompilacji

2. faza kompilacji

W przypadku wykorzystania do obliczeń interpretatora każda instrukcja programu źródłowego, po przetłumaczeniu, jest natychmiast wykonywana. Nie tworzona jest wersja wynikowa programu (najczęściej posiadająca rozszerzenie .exe). Za każdym razem wykonanie programu wymaga ponownego tłumaczenia.
Język Python wyposażony jest w translator typu interpretator, co daje większą łatwość modyfikacji gotowego programu, lecz obniża efektywność działania w stosunku do języków kompilowanych, takich jak C.
Paradygmaty programowania są różnymi sposobami lub podejściami do tworzenia programów lub korzystania z języków programowania. Każdy paradygmat ma swoje własne struktury, cechy i zalecenia dotyczące rozwiązywania typowych problemów programistycznych.
Programowanie imperatywne — paradygmat programowania, który opisuje proces wykonywania jako sekwencję instrukcji zmieniających stan programu. Podobnie jak tryb rozkazujący w języku naturalnym wyraża żądania jakichś czynności do wykonania. Programy imperatywne składają się z ciągu komend do wykonania przez komputer. Kanonicznymi przykładami imperatywnych języków programowania są FORTRAN i ALGOL. Wielu zalicza do nich także Pascala, C i Adę.
Programowanie deklaratywne — paradygmat programowania, w którym programista opisuje co należy osiągnąć (oczekiwany wynik), zamiast instruować komputer jak ma to zrobić krok po kroku. W przeciwieństwie do programów napisanych imperatywnie, programista opisuje warunki, jakie musi spełniać końcowe rozwiązanie (co chcemy osiągnąć), a nie szczegółową sekwencję kroków, które do niego prowadzą (jak to zrobić). Programowanie deklaratywne często traktuje programy jako pewne hipotezy wyrażone w logice formalnej, a wykonywanie obliczeń jako ich dowodzenie. Wyróżnia się dwa rodzaje języków deklaratywnych: opisowe (HTML, SQL) oraz programowalne (Ocaml, XSLT czy Prolog).
Programowanie obiektowe różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane. Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów.
Poprawna wymowa: pajton.
Język Python stworzył we wczesnych latach 90. Guido van Rossum – jako następcę języka ABC.
Najbardziej popularny język programowania w latach 1965–2025:
https://youtu.be/5yAbVkIMl_M?si=J5gjJRKQ_tNaOxp6
Nazwa języka pochodzi od serialu komediowego emitowanego w latach siedemdziesiątych przez BBC – „Monty Python’s Flying Circus” (Latający cyrk Monty Pythona). Projektant, będąc fanem serialu i poszukując nazwy krótkiej, unikalnej i nieco tajemniczej, uznał tę za świetną.
Python wspiera obiektowy paradygmat programowania.
Zen of Python to lista założeń w okół których był tworzony ten język. Co ciekawe, zasady te są dostępne z poziomu samego języka.
import this
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!
Zintegrowane środowisko programistyczne, IDE (od ang. Integrated Development Environment) — program lub zespół programów (pakiet, środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania.
Programy będące zintegrowanymi środowiskami programistycznymi charakteryzują się tym, że udostępniają złożoną i wieloraką funkcjonalność, obejmującą między innymi:
oraz tworzenie innych elementów oprogramowania.
Visual Studio, PyCharm, i td.
Interpreter: Python w wersji 3.12.
W systemie Windows:
Interpreter Pythona 3 można bezpłatnie pobrać ze strony:
https://www.python.org/downloads/release/python-31214/
Pobieramy odpowiedni plik poprzez link:
Windows x86-64 executable installer
albo poprzez link:
Windows x86 executable installer
Instalujemy Pythona, klikając na pobrany plik.
☑ Add Python to PATH
Praca w Pythonie może odbywać się na dwa sposoby:
tryb interaktywny (linia poleceń) – wprowadzane są pojedyncze instrukcje i natychmiast wykonywane;
tryb skryptowy (aplikacyjny) – grupa instrukcji zapisywana jest w pliku nazywanym skryptem (rozszerzenie .py), a następnie sekwencyjnie wykonywana.
My nie będziemy uzywać żadnego IDE. Tylko konsolę Pythona na pierwszym zajęciu i Notepad++ pozniej do napisania programów. Programy będziemy uruchamiać wprost z wiersza poleceń.
Jeżeli Python jest dodany do PATH, w terminalu wpisujemy:
python
lub:
py
Po uruchomieniu pojawi się znak zachęty:
>>>
Jeżeli Python NIE jest dodany do PATH, w terminalu wpisujemy:
py
lub calą ścieżką do Pythona, nprz.:
C:\Users\Anna\AppData\Local\Programs\Python\Python312\python.exe
Po uruchomieniu pojawi się znak zachęty:
>>>
Znajdź path

Dodaj ścieżką do Python, nprz. C:\Users\Anna\AppData\Local\Programs\Python\Python312\python.exe

Konsola Pythona pozwala wykonywać polecenia pojedynczo i natychmiast obserwować ich wyniki.
"Hello World!"
'Hello World!'
3 + 5
8
Konsola Pythona pozwala wykonywać polecenia pojedynczo i natychmiast obserwować ich wyniki.
"Hello World!"
'Hello World!'
2 + 4 * 8
34
5 + 3
8
5 + 3 * 2
11
2 * 5 ** 2
50
2 - 5 ** 2
-23
- 3 * 2
-6
10 - 3 * 2 ** 2
-2
125 / 5 ** 2
5.0
4 / 0
--------------------------------------------------------------------------- ZeroDivisionError Traceback (most recent call last) Cell In[14], line 1 ----> 1 4 / 0 ZeroDivisionError: division by zero
Dla zmiany kolejności operacje używają się nawiasy.
5 + 3 * 2
11
(5 + 3) * 2
16
2 * 5 ** 2
50
(2 * 5) ** 2
100
Dla zmiany kolejności operacje używają się nawiasy.
2 - 5 ** 2
-23
(2 - 5) ** 2
9
-3 ** 2
-9
(-3) ** 2
9
10 - 3 * 2 ** 2
-2
Dla zmiany kolejności operacje używają się nawiasy.
10 - (3 * 2) ** 2
-26
(10 - 3 * 2) ** 2
16
(10 - 3) * 2 ** 2
28
((10 - 3) * 2) ** 2
196
(125 / 5) ** 2
625.0
int: całkowityfloat: zmiennoprzecinkowycomplex: zespolony — nie omawiamy terazW Pythonie wszystko jest obiektem klasy.
type(15)
int
type(0.5)
float
type(3 / 2)
float
type(15.0)
float
System typów w Pythonie jest ściśle związany z systemem klas. W Pythonie wszystkie wartości są obiektami, a typy wbudowane stanowią klasy, które mogą być rozszerzane przez dziedziczenie.
W Pythonie klasa (class) jest rodzajem „szablonu” opisującego, jakie dane (atrybuty) i operacje (metody) mają obiekty danego typu. Klasa definiuje, jak taki obiekt działa i jakie ma właściwości.
Typ mówi, jakiego rodzaju jest obiekt (tzn. do jakiej klasy należy),
Zobaczmy listę nazw atrybutów i metod dostępnych dla klasy int
dir(int)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'is_integer', 'numerator', 'real', 'to_bytes']
bez kropki dziesiętnej
może być dowolnie długi (ograniczenie: ilość dostępnej pamięci)
1234567891011121314151617181920 + 1
1234567891011121314151617181921
1234567891011121314151617181921 * 5
6172839455055606570758085909605
1234567891011121314151617181921 ** 2
1524157877515647915714744640675603557820864898241665609250241
10000 ** 1000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
10000 ** 10000
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) File /usr/lib/python3/dist-packages/IPython/core/formatters.py:708, in PlainTextFormatter.__call__(self, obj) 701 stream = StringIO() 702 printer = pretty.RepresentationPrinter(stream, self.verbose, 703 self.max_width, self.newline, 704 max_seq_length=self.max_seq_length, 705 singleton_pprinters=self.singleton_printers, 706 type_pprinters=self.type_printers, 707 deferred_pprinters=self.deferred_printers) --> 708 printer.pretty(obj) 709 printer.flush() 710 return stream.getvalue() File /usr/lib/python3/dist-packages/IPython/lib/pretty.py:393, in RepresentationPrinter.pretty(self, obj) 390 for cls in _get_mro(obj_class): 391 if cls in self.type_pprinters: 392 # printer registered in self.type_pprinters --> 393 return self.type_pprinters[cls](obj, self, cycle) 394 else: 395 # deferred printer 396 printer = self._in_deferred_types(cls) File /usr/lib/python3/dist-packages/IPython/lib/pretty.py:778, in _repr_pprint(obj, p, cycle) 776 """A pprint that just redirects to the normal repr function.""" 777 # Find newlines and replace them with p.break_() --> 778 output = repr(obj) 779 lines = output.splitlines() 780 with p.group(): ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
File /usr/lib/python3/dist-packages/IPython/lib/pretty.py:778,
in _repr_pprint(obj, p, cycle)
776 """A pprint that just redirects to the normal repr function."""
777 # Find newlines and replace them with p.break_()
--> 778
output = repr(obj)
779 lines = output.splitlines()
780 with p.group():
ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
</div>
101
101
0b101
5
0B101
5
int(0b101)
5
bin(257)
'0b100000001'
0x101
257
0X101
257
hex(257)
'0x101'
int(0x101)
257
0o101
65
0O101
65
oct(65)
'0o101'
int(0o101)
65
int(0xA102)
41218
bin(41218)
'0b1010000100000010'
bin(0xA102)
'0b1010000100000010'
hex(0b1010000100000010)
'0xa102'
float¶Liczby rzeczywiste zazwyczaj zapisuje się w pamięci komputera za pomocą tzw. techniki zmiennoprzecinkowej (z ang. floating point), stąd często stosowana nazwa — liczba zmiennoprzecinkowa. Praktyczną konsekwencją jest to, że liczba jest zapisywana z określoną dokładnością.
type(0.4)
float
4.0
4.0
4.
4.0
.4
0.4
125/2
62.5
125/5
25.0
float(32)
32.0
0.3-0.1*3
-5.551115123125783e-17
Zajętość pamięci wszystkich typów danych oraz zakres danych typu float mogą się różnić w zależności od komputera, na którym jest uruchamiany program.
float: zapis wykładniczy¶3e4
30000.0
.3e4
3000.0
2e-2
0.02
1.79e308
1.79e+308
1.79e+308 + 1
1.79e+308
int(1.79e+308)
178999999999999996376899522972626047077637637819240219954027593177370961667659291027329061638406108931437333529420935752785895444161234074984843178962619172326295244262722141766382622299223626438470088150218987997954747866198184686628013966119769261150988554952970462018533787926725176560021258785656871583744
int(1.79e+308)+1
178999999999999996376899522972626047077637637819240219954027593177370961667659291027329061638406108931437333529420935752785895444161234074984843178962619172326295244262722141766382622299223626438470088150218987997954747866198184686628013966119769261150988554952970462018533787926725176560021258785656871583745
int(1.79e+308 + 1)
178999999999999996376899522972626047077637637819240219954027593177370961667659291027329061638406108931437333529420935752785895444161234074984843178962619172326295244262722141766382622299223626438470088150218987997954747866198184686628013966119769261150988554952970462018533787926725176560021258785656871583744
1.8e308
inf
5e-324
5e-324
5e-324+1
1.0
5e-325
0.0
float oraz int¶| Operator | Znaczenie |
|---|---|
// |
dzielenie liczb całkowitych lub iloraz przy dzieleniu z resztą |
% |
reszta z dzielenia |
3 / 2
1.5
3 // 2
1
3.5 // 2
1.0
type(2 / 2)
float
type(2 // 2)
int
type(2.0 // 2)
float
Utworzenie drugiej gałęzi rozwoju 3.x. Początkowo obie gałęzie były rozwijane niezależnie, lecz wsparcie Pythona 2.x zostało zakończone w roku 2020.
Python 2.x może być spotkany w starych projektach.
| Polecenie | Python 2 | Python 3 |
|---|---|---|
3 / 2 |
1 |
1.5 |
3 // 2 |
1 |
1 |
3 / 2.0 |
1.5 |
1.5 |
3 // 2.0 |
1.0 |
1.0 |
Spróbować Pythona 2 można tutaj:
3 % 2
1
5 % 3
2
5.5 % 2
1.5
2**2
4
2**.5
1.4142135623730951
2**1/2
1.0
2**(1/2)
1.4142135623730951
4**(1/2)
2.0
(-4)**(1/2)
(1.2246467991473532e-16+2j)
-4**(1/2)
-2.0
(-4)**(-1/2)
(3.061616997868383e-17-0.5j)
16**(1/4)
2.0
type(16**(1/4))
float
16**0.5
4.0
16**0.25
2.0
type(16**0.25)
float
str¶Kolejnym ważnym typem zmiennej są stringi, czyli napisy.
str — string, napis, łańcuch znaków.
Obecnie odchodzi się od określenia „tablica znaków”.
Stringi definiujemy za pomocą apostrofów ('...') lub cudzysłowów ("...").
Inaczej zapis:
Hello World!
nie zadziała, ponieważ Python potraktuje Hello jako nazwę zmiennej.
Hello world!
Cell In[15], line 1 Hello world! ^ SyntaxError: invalid syntax
'Hello world!'
'Hello world!'
"Hello world!"
'Hello world!'
'napis"
Cell In[19], line 1 'napis" ^ SyntaxError: unterminated string literal (detected at line 1)
"to jest 'napis'"
"to jest 'napis'"
'i to tez jest "napis"'
'i to tez jest "napis"'
'doesn't'
Cell In[22], line 1 'doesn't' ^ SyntaxError: unterminated string literal (detected at line 1)
"doesn't"
"doesn't"
'doesn\'t'
"doesn't"
Stringi:
stringu chcemy użyć cudzysłowu.Każdy string musi zaczynać się i kończyć tym samym znakiem — niezależnie od tego, czy używamy apostrofów ('...'), czy cudzysłowów ("...").
'To jest \"napis\"'
'To jest "napis"'
'Kto to jest?'+'To Adam'
'Kto to jest?To Adam'
'Kto to jest?'+'"To Adam" odpowiedziała Magda'
'Kto to jest?"To Adam" odpowiedziała Magda'
'herbata' * 3
'herbataherbataherbata'
'herbata' + 3
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[28], line 1 ----> 1 'herbata' + 3 TypeError: can only concatenate str (not "int") to str
'herbata' + "3"
'herbata3'
'herbata' + str(3)
'herbata3'
len('herbata')
7
len('herbata'*3)
21
len(34)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[43], line 1 ----> 1 len(34) TypeError: object of type 'int' has no len()
bool¶Typ logiczny bool obejmuje dwie wartości:
True — prawda logiczna,False — fałsz logiczny.W Pythonie jako fałsz logiczny traktuje się m.in.:
0, 0.0, 0e0, 0j itp.),False i None,""),__bool__(), jeśli zwraca ona False,__len__(), jeśli zwraca ona 0.Wszystkie pozostałe wartości są traktowane jako prawda logiczna.
Wartości True i False zostały wprowadzone w Pythonie 2.3. Są to wartości logiczne odpowiadające odpowiednio 1 i 0. W kontekście operacji liczbowych do tej pory są oni przekształcony na 0 i 1.
type(True)
bool
bool(0)
False
bool(5)
True
True + False
1
5 + True
6
type(False + 2)
int
bool('')
False
bool(' ')
True
'napis' + True
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[53], line 1 ----> 1 'napis' + True TypeError: can only concatenate str (not "bool") to str
str(True)
'True'
Wynikiem działania operatora logicznego jest wartość typu bool.
| Symbol | Znaczenie | Przykład | Wynik |
|---|---|---|---|
and |
i | x and y |
jeżeli x jest prawdą, wtedy x, inaczej y |
or |
lub | x or y |
jeżeli x jest falszą, wtedy x, inaczej y |
not |
negacja | not x |
jeżeli x jest falszą, wtedy True, inaczej False |
https://docs.python.org/3/builtins/stdtypes.html#boolean-operations-and-or-not
True and False
False
5 and False
False
5 and True
True
True and 5
5
5 and 6
6
"" or 0
0
not 42
False
0 or "napis"
'napis'
6 or "napis"
6
"" or 1
1
Wynikiem działania operatora porównania jest wartość typu bool.
| Symbol | Znaczenie | Przykład |
|---|---|---|
> |
większe niż | x > y |
< |
mniejsze niż | x < y |
== |
równe | x == y |
!= |
różne od | x != y |
>= |
większe lub równe | x >= y |
<= |
mniejsze lub równe | x <= y |
3 == 5
False
type(3 != 5)
bool
3 >= 5
False
3 <= 5
True
0.3 == 0.3
True
0.3 == 3*0.1
False
3 == 3.0
True
3/10 == 3*(1/10)
False
0.3-3*0.1
-5.551115123125783e-17
"a" < "b"
True
"A" < "a"
True
"Abc" < "aT"
True
"vccx" < "123"
False
"ABC" < "AB"
False
"AB" < "ABC"
True
"ABC" < "ab"
True
"AB" < "abc"
True
"A" < 5
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[91], line 1 ----> 1 "A" < 5 TypeError: '<' not supported between instances of 'str' and 'int'