Wstęp do programowania¶

(semestr zimowy 2026/2027)¶

Dr Anna Muranova, UWM w Olsztynie¶

Wykład 1¶

Komputery¶

Pojęcia podstawowe¶

  • Komputer to elektroniczne urządzenie, które przechowuje i przetwarza informacje zgodnie z wykonywanym programem.
  • Większość współczesnych komputerów oparta jest na tzw. architekturze von Neumanna (od nazwiska Johna von Neumanna).
  • Cechą charakterystyczną tej architektury jest to, że programy oraz dane do programów znajdują się w tej samej pamięci, zwanej pamięcią operacyjną.
  • Podstawowe elementy komputera to:

    • procesor (CPU – od ang. Central Processing Unit)
    • pamięć operacyjna (RAM – od ang. Random Access Memory)
    • urządzenia wejścia/wyjścia
    • pamięć zewnętrzna

Funkcjonalny schemat komputera¶

Funkcjonalny schemat komputera

Programy¶

  • Program komputerowy to szczegółowy zestaw instrukcji określający działanie komputera.
  • Programowanie to proces tworzenia kodu źródłowego programu w wybranym języku programowania.
  • Język programowania to zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Programy¶

Postacie programu¶

  • Kod źródłowy to ciąg instrukcji i deklaracji zapisany w zrozumiałym dla człowieka języku programowania.
  • Kod maszynowy to postać programu komputerowego (nazywana wykonywalną lub binarną) przeznaczona do bezpośredniego lub prawie bezpośredniego wykonania przez procesor.
  • Postać binarna programu jest dopasowana do konkretnego typu procesora i wyrażona w postaci rozumianych przez niego kodów rozkazów oraz ich argumentów.

Języki programowania¶

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ą:

  • ściśle określony alfabet, tj. zbiór możliwych słów,
  • ściśle określone reguły składniowe (syntaktyka),
  • jednoznaczne reguły interpretujące znaczenie poszczególnych napisów (semantyka).

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:

  • kompilatory,
  • interpretatory.

Kompilator¶

W przypadku wykorzystania kompilatora obliczenia prowadzone są w dwóch fazach:

  • 1. faza kompilacji

  • 2. faza kompilacji

Interpretator¶

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¶

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.

Imperatywne i deklaratywne¶

  • 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).

Paradygmaty programowania imperatywnego¶

  • Programowanie proceduralne — paradygmat programowania zalecający dzielenie kodu na procedury, czyli fragmenty wykonujące ściśle określone operacje. Procedury nie powinny korzystać ze zmiennych globalnych (w miarę możliwości), lecz pobierać i przekazywać wszystkie dane (czy też wskaźniki do nich) jako parametry wywołania. Programowanie proceduralne polega na implementowaniu działania programu komputerowego za pomocą procedur (zwanych również funkcjami lub podprogramami), które wywołują się wzajemnie. W rezultacie program stanowi sekwencję kroków tworzącą hierarchię wywołań poszczególnych procedur.Pierwsze ważniejsze języki programowania proceduralnego pojawiły się około lat 1957–1964. Należały do nich m.in. Fortran, ALGOL, COBOL, PL/I oraz BASIC. Języki Pascal i C zostały opracowane około lat 1970–1972.

Paradygmaty programowania imperatywnego¶

  • Programowanie obiektowe – paradygmat programowania, w którym programy definiuje się za pomocą obiektów – elementów łączących stan (czyli dane, nazywane najczęściej atrybutami) i zachowanie (czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. ęJzyki Ada, ActionScript, C++, C#, Common Lisp, Dart, Eiffel, Fortran, Haxe, Java, JavaScript, Kotlin, Logo, MATLAB, Objective-C, Object Pascal, Perl, PHP, Python, R, Raku, Ruby, Scala, SIMSCRIPT, Simula, Smalltalk, Swift, Vala and Visual Basic (.NET).

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.

Język Python¶

  • 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¶

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.

In [1]:
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!
  • Piękne jest lepsze niż brzydkie.
  • Jawne jest lepsze niż niejawne.
  • Proste jest lepsze niż złożone.
  • Złożone jest lepsze niż skomplikowane.
  • Płaskie jest lepsze niż wielopoziomowe.
  • Rzadkie jest lepsze niż gęste.
  • Czytelność ma znaczenie.
  • Wyjątki nie są na tyle wyjątkowe, by łamać zasady.
  • Praktyczność ma jednak pierwszeństwo przed konsekwencją.
  • Błędy nie powinny być przemilczane.
  • Chyba że zostały celowo ukryte.
  • W obliczu niejasności nie ulegaj pokusie zgadywania.
  • Powinien istnieć jeden — i najlepiej tylko jeden — oczywisty sposób na zrobienie danej rzeczy.
  • Choć ten sposób może nie być oczywisty, jeśli nie jesteś Holendrem.
  • Lepiej zrobić coś teraz niż nigdy.
  • Choć czasami lepiej nie robić tego nigdy niż natychmiast.
  • Jeśli rozwiązanie trudno wyjaśnić, to prawdopodobnie jest złym pomysłem.
  • Jeśli rozwiązanie łatwo wyjaśnić, może być dobrym pomysłem.
  • Przestrzenie nazw to jeden z naprawdę genialnych pomysłów — korzystajmy z nich jak najwięcej!

Oprogramowanie¶

Klasycznie: Interpretator + środowisko (IDE)¶

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:

  • edycję kodu źródłowego,
  • kompilowanie kodu źródłowego,
  • tworzenie zasobów programu, takich jak: szablony, ekrany i okna dialogowe, menu, raporty, elementy graficzne, np. ikony i obrazy,
  • tworzenie baz danych,
  • tworzenie komponentów

oraz tworzenie innych elementów oprogramowania.

Visual Studio, PyCharm, i td.

Oprogramowanie: interpreter¶

Interpreter: Python w wersji 3.12.

https://www.python.org/

  • W systemie Linux: w Ubuntu Python 3 jest domyślnie zainstalowany.
  • 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

Tryby pracy¶

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ń.

Python console¶

Python console w systemie Windows¶

Uruchomienie¶

W systemie Windows możemy uruchomić konsolę Pythona z poziomu:

  • Wiersza polecenia (Command Prompt)
  • PowerShell

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:

>>>

Dodawanie Pythona do PATH:¶

otwórz edit enviroment variables for your account

Znajdź path

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

Zatwierdź zmiany.¶

Uwaga!¶

Możliwe będzie konieczneie przesunięcie ścieżki do Pythona do góry w Path (Move Up)!¶

Konsola Pythona pozwala wykonywać polecenia pojedynczo i natychmiast obserwować ich wyniki.

Przykład¶

In [3]:
"Hello World!"
Out[3]:
'Hello World!'
In [4]:
3 + 5
Out[4]:
8

Zakończenie pracy¶

>>> exit()

lub Ctrl+Z, a następnie Enter.

Python console¶

Python console w systemie Linux¶

Uruchomienie¶

W systemie Linux możemy uruchomić konsolę Pythona z poziomu terminala.

W terminalu wpisujemy:

python3

W niektórych systemach można również użyć:

python

Po uruchomieniu pojawi się znak zachęty:

>>>

Konsola Pythona pozwala wykonywać polecenia pojedynczo i natychmiast obserwować ich wyniki.

Przykład¶

In [5]:
"Hello World!"
Out[5]:
'Hello World!'
In [2]:
2 + 4 * 8
Out[2]:
34

Zakończenie pracy¶

>>> exit()

lub Ctrl+Z, a następnie Enter.

Tryb interaktywny¶

Podstawowe operacje arytmetyczne¶

Operator Operacja
+ dodawanie
- odejmowanie
* mnożenie
/ dzielenie
** potęgowanie

Kolejność wykonywania działań¶

Potęgowanie → mnożenie i dzielenie → dodawanie i odejmowanie

Przykłady cz. 1¶

In [7]:
5 + 3
Out[7]:
8
In [8]:
5 + 3 * 2
Out[8]:
11
In [9]:
2 * 5 ** 2
Out[9]:
50
In [10]:
2 - 5 ** 2
Out[10]:
-23
In [11]:
- 3 * 2
Out[11]:
-6

Przykłady cz. 2¶

In [12]:
10 - 3 * 2 ** 2
Out[12]:
-2
In [13]:
125 / 5 ** 2
Out[13]:
5.0
In [14]:
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.

Przykłady cz. 1:¶

In [15]:
5 + 3 * 2
Out[15]:
11
In [20]:
(5 + 3) * 2
Out[20]:
16
In [21]:
2 * 5 ** 2
Out[21]:
50
In [3]:
(2 * 5) ** 2
Out[3]:
100

Dla zmiany kolejności operacje używają się nawiasy.

Przykłady cz. 2:¶

In [22]:
2 - 5 ** 2
Out[22]:
-23
In [23]:
(2 - 5) ** 2
Out[23]:
9
In [24]:
-3 ** 2
Out[24]:
-9
In [25]:
(-3) ** 2
Out[25]:
9
In [26]:
10 - 3 * 2 ** 2
Out[26]:
-2

Dla zmiany kolejności operacje używają się nawiasy.

Przykłady cz. 3:¶

In [27]:
10 - (3 * 2) ** 2
Out[27]:
-26
In [28]:
(10 - 3 * 2) ** 2
Out[28]:
16
In [29]:
(10 - 3) * 2 ** 2
Out[29]:
28
In [31]:
((10 - 3) * 2) ** 2
Out[31]:
196
In [33]:
(125 / 5) ** 2
Out[33]:
625.0

Liczbowe typy danych¶

  • int: całkowity
  • float: zmiennoprzecinkowy
  • complex: zespolony — nie omawiamy teraz

W Pythonie wszystko jest obiektem klasy.

Sprawdzanie typu¶

In [36]:
type(15)
Out[36]:
int
In [39]:
type(0.5)
Out[39]:
float
In [40]:
type(3 / 2)
Out[40]:
float
In [4]:
type(15.0)
Out[4]:
float

Wszystko jest obiektem¶

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

In [35]:
dir(int)
Out[35]:
['__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)

In [5]:
1234567891011121314151617181920 + 1
Out[5]:
1234567891011121314151617181921
In [6]:
1234567891011121314151617181921 * 5
Out[6]:
6172839455055606570758085909605
In [7]:
1234567891011121314151617181921 ** 2
Out[7]:
1524157877515647915714744640675603557820864898241665609250241
In [8]:
10000 ** 1000
Out[8]:
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
In [51]:
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
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

</div>

  • Jaki system liczbowy? Domyślnie dziesiętny
In [10]:
101
Out[10]:
101
In [22]:
0b101
Out[22]:
5
In [23]:
0B101
Out[23]:
5
In [24]:
int(0b101)
Out[24]:
5
In [25]:
bin(257)
Out[25]:
'0b100000001'

Szesnastkowy (heksadecymalny)¶

In [26]:
0x101
Out[26]:
257
In [27]:
0X101
Out[27]:
257
In [28]:
hex(257)
Out[28]:
'0x101'
In [30]:
int(0x101)
Out[30]:
257

Osemkowy (oktalny) system liczbowy¶

In [31]:
0o101
Out[31]:
65
In [32]:
0O101
Out[32]:
65
In [34]:
oct(65)
Out[34]:
'0o101'
In [35]:
int(0o101)
Out[35]:
65

Jeszcze przyklad¶

In [37]:
int(0xA102)
Out[37]:
41218
In [38]:
bin(41218)
Out[38]:
'0b1010000100000010'
In [39]:
bin(0xA102)
Out[39]:
'0b1010000100000010'
In [40]:
hex(0b1010000100000010)
Out[40]:
'0xa102'

Typ 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ą.

In [45]:
type(0.4)
Out[45]:
float
In [42]:
4.0
Out[42]:
4.0
In [43]:
4.
Out[43]:
4.0
In [44]:
.4
Out[44]:
0.4

Przykłady¶

In [46]:
125/2
Out[46]:
62.5
In [47]:
125/5
Out[47]:
25.0
In [49]:
float(32)
Out[49]:
32.0

Uwagi!¶

In [48]:
0.3-0.1*3 
Out[48]:
-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.

Typ float: zapis wykładniczy¶

In [52]:
3e4
Out[52]:
30000.0
In [53]:
.3e4
Out[53]:
3000.0
In [54]:
2e-2
Out[54]:
0.02
In [55]:
1.79e308
Out[55]:
1.79e+308
In [88]:
1.79e+308 + 1
Out[88]:
1.79e+308

Przykłady cz. 1¶

In [60]:
int(1.79e+308)
Out[60]:
178999999999999996376899522972626047077637637819240219954027593177370961667659291027329061638406108931437333529420935752785895444161234074984843178962619172326295244262722141766382622299223626438470088150218987997954747866198184686628013966119769261150988554952970462018533787926725176560021258785656871583744
In [61]:
int(1.79e+308)+1
Out[61]:
178999999999999996376899522972626047077637637819240219954027593177370961667659291027329061638406108931437333529420935752785895444161234074984843178962619172326295244262722141766382622299223626438470088150218987997954747866198184686628013966119769261150988554952970462018533787926725176560021258785656871583745
In [62]:
int(1.79e+308 + 1)
Out[62]:
178999999999999996376899522972626047077637637819240219954027593177370961667659291027329061638406108931437333529420935752785895444161234074984843178962619172326295244262722141766382622299223626438470088150218987997954747866198184686628013966119769261150988554952970462018533787926725176560021258785656871583744

Przykłady cz. 2¶

In [63]:
1.8e308
Out[63]:
inf
In [64]:
5e-324
Out[64]:
5e-324
In [65]:
5e-324+1
Out[65]:
1.0
In [66]:
5e-325
Out[66]:
0.0

Typ float oraz int¶

Operator Znaczenie
// dzielenie liczb całkowitych lub iloraz przy dzieleniu z resztą
% reszta z dzielenia
In [81]:
3 / 2
Out[81]:
1.5
In [82]:
3 // 2
Out[82]:
1
In [83]:
3.5 // 2
Out[83]:
1.0

Uwaga¶

In [84]:
type(2 / 2)
Out[84]:
float
In [85]:
type(2 // 2)
Out[85]:
int
In [86]:
type(2.0 // 2)
Out[86]:
float

Python 2. vs Python 3.¶

  • 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:

https://onecompiler.com/python2

Reszta z dzielenia¶

In [80]:
3 % 2
Out[80]:
1
In [79]:
5 % 3
Out[79]:
2
In [87]:
5.5 % 2
Out[87]:
1.5

Potęgowanie cz. 1¶

In [1]:
2**2
Out[1]:
4
In [2]:
2**.5
Out[2]:
1.4142135623730951
In [3]:
2**1/2
Out[3]:
1.0
In [4]:
2**(1/2)
Out[4]:
1.4142135623730951

Potęgowanie cz. 2¶

In [5]:
4**(1/2)
Out[5]:
2.0
In [6]:
(-4)**(1/2)
Out[6]:
(1.2246467991473532e-16+2j)
In [8]:
-4**(1/2)
Out[8]:
-2.0
In [9]:
(-4)**(-1/2)
Out[9]:
(3.061616997868383e-17-0.5j)

Potęgowanie cz.3¶

In [10]:
16**(1/4)
Out[10]:
2.0
In [11]:
type(16**(1/4))
Out[11]:
float
In [12]:
16**0.5
Out[12]:
4.0
In [13]:
16**0.25
Out[13]:
2.0
In [14]:
type(16**0.25)
Out[14]:
float

Typ 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.

Przykłady cz. 1¶

In [15]:
Hello world!
  Cell In[15], line 1
    Hello world!
          ^
SyntaxError: invalid syntax
In [16]:
'Hello world!'
Out[16]:
'Hello world!'
In [17]:
"Hello world!"
Out[17]:
'Hello world!'
In [19]:
'napis"
  Cell In[19], line 1
    'napis"
    ^
SyntaxError: unterminated string literal (detected at line 1)

Przykłady cz. 2¶

In [20]:
"to jest 'napis'"
Out[20]:
"to jest 'napis'"
In [21]:
'i to tez jest "napis"'
Out[21]:
'i to tez jest "napis"'
In [22]:
'doesn't'
  Cell In[22], line 1
    'doesn't'
            ^
SyntaxError: unterminated string literal (detected at line 1)
In [23]:
"doesn't"
Out[23]:
"doesn't"
In [24]:
'doesn\'t'
Out[24]:
"doesn't"

Uwaga!¶

Stringi:

  • Można używać zarówno pojedynczych apostrofów, jak i podwójnych cudzysłowów.
  • Ważne, aby stosować wybraną notację konsekwentnie.
  • Wyjątkiem jest sytuacja, gdy wewnątrz 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 ("...").

In [42]:
'To jest \"napis\"'
Out[42]:
'To jest "napis"'

Co jeszcze możemy zrobić ze stringami?¶

Ciągi znaków możemy dodawać (inaczej łączyć, inaczej konkatenować) czy mnożyć:¶

In [25]:
'Kto to jest?'+'To Adam'
Out[25]:
'Kto to jest?To Adam'
In [26]:
'Kto to jest?'+'"To Adam" odpowiedziała Magda'
Out[26]:
'Kto to jest?"To Adam" odpowiedziała Magda'
In [27]:
'herbata' * 3
Out[27]:
'herbataherbataherbata'

Jeszcze przykłady¶

In [28]:
'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
In [29]:
'herbata' + "3"
Out[29]:
'herbata3'
In [30]:
'herbata' + str(3)
Out[30]:
'herbata3'

Dlugość¶

In [31]:
len('herbata')
Out[31]:
7
In [32]:
len('herbata'*3)
Out[32]:
21
In [43]:
len(34)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[43], line 1
----> 1 len(34)

TypeError: object of type 'int' has no len()

Typ logiczny 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.:

  • liczbę zero (0, 0.0, 0e0, 0j itp.),
  • wartości False i None,
  • puste kolekcje (np. pusta lista, krotka, słownik),
  • puste napisy (""),
  • obiekty posiadające metodę __bool__(), jeśli zwraca ona False,
  • obiekty posiadające metodę __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.

Przykłady cz. 1¶

In [45]:
type(True)
Out[45]:
bool
In [46]:
bool(0)
Out[46]:
False
In [47]:
bool(5)
Out[47]:
True
In [48]:
True + False
Out[48]:
1
In [49]:
5 + True
Out[49]:
6
In [52]:
type(False + 2)
Out[52]:
int

Przykłady cz. 2¶

In [50]:
bool('')
Out[50]:
False
In [51]:
bool(' ')
Out[51]:
True
In [53]:
'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
In [54]:
str(True)
Out[54]:
'True'

Operatory logiczne¶

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

Przykłady cz. 1¶

In [55]:
True and False
Out[55]:
False
In [56]:
5 and False
Out[56]:
False
In [65]:
5 and True
Out[65]:
True
In [67]:
True and 5
Out[67]:
5
In [68]:
5 and 6
Out[68]:
6

Przykłady cz. 2¶

In [58]:
"" or 0
Out[58]:
0
In [59]:
not 42
Out[59]:
False
In [70]:
0 or "napis"
Out[70]:
'napis'
In [64]:
6 or "napis"
Out[64]:
6
In [69]:
"" or 1
Out[69]:
1

Operatory porównania¶

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

Przykłady¶

In [71]:
3 == 5
Out[71]:
False
In [72]:
type(3 != 5)
Out[72]:
bool
In [73]:
3 >= 5
Out[73]:
False
In [75]:
3 <= 5
Out[75]:
True

Uwaga!¶

In [76]:
0.3 == 0.3
Out[76]:
True
In [77]:
0.3 == 3*0.1
Out[77]:
False
In [79]:
3 == 3.0
Out[79]:
True
In [81]:
3/10 == 3*(1/10)
Out[81]:
False
In [82]:
0.3-3*0.1
Out[82]:
-5.551115123125783e-17

Porównanie napisów: porządek leksykograficzny¶

In [86]:
"a" < "b"
Out[86]:
True
In [83]:
"A" < "a"
Out[83]:
True
In [84]:
"Abc" < "aT"
Out[84]:
True
In [85]:
"vccx" < "123"
Out[85]:
False
In [87]:
"ABC" < "AB"
Out[87]:
False

Przykłady¶

In [88]:
"AB" < "ABC"
Out[88]:
True
In [89]:
"ABC" < "ab"
Out[89]:
True
In [90]:
"AB" < "abc"
Out[90]:
True
In [91]:
"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'