Wstęp do programowania¶

(semestr zimowy 2026/2027)¶

Dr Anna Muranova, UWM w Olsztynie¶

Wykład 2¶

Nazwy zmiennych¶

Programiści zazwyczaj wybierają dla swoich zmiennych nazwy, które są sensowne i opisują, do czego dana zmienna jest używana.

Nazwy zmiennych mogą być dowolnie długie. Mogą zawierać zarówno litery, jak i cyfry, ale nie mogą zaczynać się od cyfry. Użycie dużych liter jest poprawne, ale lepiej jest zacząć nazwy zmiennych od małej litery.

Co prawda w nazwach zmiennych można też używać np. polskich znaków diakrytycznych, ale lepiej trzymać się przyjętej w środowisku programistów konwencji i ich nie używać.

Znak podkreślenia (_) może pojawić się w nazwie. Jest on często używany w nazwach zawierających wiele słów, takich jak moje_imie lub predkosc_jaskolki_bez_obciazenia.

Nazwy zmiennych mogą zaczynać się od znaku podkreślenia, ale generalnie tego unikamy (chyba że piszemy kod biblioteki, która docelowo będzie używana przez inne osoby).

Przypisywanie wartości do zmiennej¶

Zmienna:¶

najprościej: przechowuje pewną wartość

Operator przypisania:¶

= przypisuje prawą stronę do lewej (!), często mylony z operatorem logicznym równa się ==

In [1]:
x = 5
y = "Piotr"
a = 4.5
A = 56
x, y, z = "Orange", "Banana", "Cherry"
x = y = z = "Apple"
z = 'Cherry'
y
Out[1]:
'Apple'
In [2]:
b
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[2], line 1
----> 1 b

NameError: name 'b' is not defined
In [3]:
a = 5
b = 10
a * b
Out[3]:
50
In [4]:
c = a * b
c
Out[4]:
50

Niepoprawne nazwy:¶

In [1]:
76trombones = ' big parade '
  Cell In[1], line 1
    76trombones = ' big parade '
     ^
SyntaxError: invalid decimal literal
In [6]:
class = ' Advanced Theoretical Zymurgy '
  Cell In[6], line 1
    class = ' Advanced Theoretical Zymurgy '
          ^
SyntaxError: invalid syntax
In [7]:
more@ = 1000000
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
Cell In[7], line 1
----> 1 get_ipython().run_line_magic('more', '@ = 1000000')

File /usr/lib/python3/dist-packages/IPython/core/interactiveshell.py:2456, in InteractiveShell.run_line_magic(self, magic_name, line, _stack_depth)
   2454     kwargs['local_ns'] = self.get_local_scope(stack_depth)
   2455 with self.builtin_trap:
-> 2456     result = fn(*args, **kwargs)
   2458 # The code below prevents the output from being displayed
   2459 # when using magics with decorator @output_can_be_silenced
   2460 # when the last Python token in the expression is a ';'.
   2461 if getattr(fn, magic.MAGIC_OUTPUT_CAN_BE_SILENCED, False):

File /usr/lib/python3/dist-packages/ipykernel/zmqshell.py:342, in KernelMagics.less(self, arg_s)
    340     cont = self.shell.pycolorize(openpy.read_py_file(arg_s, skip_encoding_cookie=False))
    341 else:
--> 342     with open(arg_s) as fid:
    343         cont = fid.read()
    344 page.page(cont)

FileNotFoundError: [Errno 2] No such file or directory: '@ = 1000000'

Python ma zarezerwowanych 35 słów kluczowych¶

and del from None True
as elif global nonlocal try
assert else if not while
break except import or with
class False in pass yield
continue finally is raise async
def for lambda return await

Uwaga: None jest słowem kluczowym, natomiast none nim nie jest.

Pierwsza instrukcja spowoduje błąd, ponieważ None jest słowem kluczowym. Druga jest poprawna — none może być nazwą zmiennej.

In [8]:
None = 100
  Cell In[8], line 1
    None = 100
    ^
SyntaxError: cannot assign to None
In [9]:
none = 100

Skróty dla operacji arytmetycznych na zmiennych¶

Operator Skrót Znaczenie
+ += dodawanie
- -= odejmowanie
* *= mnożenie
/ /= dzielenie
** **= potęgowanie
// //= dzielenie całkowite lub iloraz przy dzieleniu z resztą
% %= reszta z dzielenia
In [10]:
a = 3
a *= 2
a
Out[10]:
6
In [11]:
b*=a**2
In [12]:
a = 6
b = 2
b*=a**2
b
Out[12]:
72
In [13]:
b/=a
b
Out[13]:
12.0
In [14]:
a + b*=2
  Cell In[14], line 1
    a + b*=2
    ^
SyntaxError: 'expression' is an illegal expression for augmented assignment
In [15]:
3*=2
  Cell In[15], line 1
    3*=2
    ^
SyntaxError: 'literal' is an illegal expression for augmented assignment

Algorytmika¶

Algorytmika - dział matematyki oraz informatyki zajmujący się analizą oraz projektowaniem algorytmów.

Algorytmika ma bardzo duży wpływ na wydajność systemów komputerowych. Z tego względu algorytmy, podobnie jak układy elektroniczne komputera, są uznawane za technologię.

Algorytmy operują na strukturach danych, stąd w literaturze często zagadnienia te są omawiane w tych samych pozycjach.

Algorytm¶

Algorytm -- skończony ciąg jasno zdefiniowanych czynności koniecznych do wykonania pewnego rodzaju zadań, sposób postępowania prowadzący do rozwiązania problemu. Można go przedstawić na schemacie blokowym.

Słowo ,,algorytm'' pochodzi od łacińskiego słowa algorithmus, oznaczającego wykonywanie działań przy pomocy liczb arabskich (w odróżnieniu od abacism -- przy pomocy abakusa), które z kolei wzięło się od nazwy ,,Algoritm'', zlatynizowanej wersji nazwiska ,,al-Chwarizm'' Abu Abdullaha Muhammada ibn Musy al-Chuwarizmiego, matematyka perskiego z IX wieku.

Badaniem algorytmów zajmuje się algorytmika.

Zadaniem algorytmu jest przeprowadzenie systemu z pewnego stanu początkowego do pożądanego stanu końcowego.

Przykład niematematyczny¶

Jako przykład stosowanego w życiu codziennym algorytmu podaje się często przepis kulinarny. Dla przykładu, aby ugotować bigos, należy w określonej kolejności oraz odstępach czasowych dodawać właściwe rodzaje kapusty i innych składników. Może istnieć kilka różnych przepisów dających na końcu bardzo podobną potrawę. Przykład ten ma wyłącznie charakter poglądowy, ponieważ język przepisów kulinarnych nie został jasno zdefiniowany. Algorytmy zwykle formułowane są w sposób ścisły w oparciu o język matematyki.

Przykład matematyczny¶

Znalezienie największego elementu wśród podanych przez użytkownika po koleje. Użytkownik konczy badanie elementow podajac nie liczbowy symbol.

Niech maksimum oznacza największą dotychczas znalezioną wartość.

1 Pobieramy od uzytkownika pierwszy element.

  Jezeli on nie jest liczbą, to koniec.

  Inaczej ustalamy maksymum = podana liczba.

2. Pobieramy od użytkownika następny element.

  Jezeli on nie jest liczbą, to koniec.

  Jeżeli jego wartość jest większa od zawartości maksimum, to przypisz maksimum wartość tego elementu.

3. Wróć do punktu 2.

Wynikiem będzie maksymum

3 typy instrukcji¶

Istnieją tylko trzy typy instrukcji:

  • Instrukcja prosta
  • Instrukcja warunkowa
  • Pętla

Schemat blokowy¶

Schemat blokowy — narzędzie służące do przedstawienia kolejnych czynności w projektowanym algorytmie. Jest to diagram, na którym procedura, system lub program komputerowy są reprezentowane przez opisane figury geometryczne połączone strzałkami (niekiedy tylko liniami) zgodnie z kolejnością wykonywania czynności wynikających z przyjętego algorytmu rozwiązania zadania.

Schemat blokowy

Schemat blokowy¶

Schemat blokowy powinien zapewniać:

  • elastyczność zapisów
  • możliwość zapisu z użyciem składni wybranego języka programowania
  • łatwą kontrolę poprawności algorytmu

Schematy blokowe pozwalają na prostą zamianę instrukcji na instrukcje programu komputerowego.

Podstawowe elementy budowy¶

Do głównych elementów budowy schematów blokowych należą:

  • strzałka (łącznik) – wskazuje kierunek przepływu danych lub kolejność wykonywania
  • operator — prostokąt – wpisywane są do niego wszystkie operacje z wyjątkiem instrukcji wyboru
  • predykat — romb – wpisywane są do niego wyłącznie instrukcje wyboru
  • etykieta (blok graniczny) — owal służący do oznaczania początku albo końca sekwencji schematu (kończy, zaczyna albo przerywa lub przenosi schemat)

Blok graniczny¶

Wyróżnia się następujące rodzaje bloków:

Blok graniczny — oznacza początek, koniec, przerwanie lub wstrzymanie wykonywania działania, np. blok startu programu.

Blok graniczny

Blok wejścia-wyjścia¶

Blok wejścia-wyjścia — przedstawia czynność wprowadzania danych do programu i przyporządkowania ich zmiennym dla późniejszego wykorzystania, jak i wyprowadzenia wyników obliczeń, np. czytaj z, pisz z + 10.

Blok wejścia-wyjścia

Blok operacyjny¶

Blok operacyjny — oznacza wykonanie operacji, w efekcie której zmienią się wartości, postać lub miejsce zapisu danych, np. $z := z + 1$.

Blok operacyjny

Blok decyzyjny, warunkowy¶

Blok decyzyjny (warunkowy) — przedstawia wybór jednego z dwóch wariantów wykonywania programu na podstawie sprawdzenia warunku wpisanego w blok, np. $a = b$.

Blok decyzyjny

Blok wywołania podprogramu¶

Blok wywołania podprogramu — oznacza zmianę wykonywanej czynności na skutek wywołania podprogramu, np. $MAX(x,y,z)$.

Blok wywołania podprogramu

Blok fragmentu¶

Blok fragmentu — przedstawia część programu zdefiniowanego odrębnie, np. sortowanie.

Blok fragmentu

Blok komentarza¶

Blok komentarza — pozwala wprowadzać komentarze wyjaśniające poszczególne części schematu, co ułatwia zrozumienie go czytającemu, np. wprowadzenie danych.

Blok komentarza

Łącznik wewnętrzny¶

Łącznik wewnętrzny – służy do łączenia odrębnych części schematu znajdujących się na tej samej stronie; powiązane ze sobą łączniki oznaczone są tym samym napisem, np. $A1$, $7$.

Łącznik wewnętrzny

Łącznik zewnętrzny¶

Łącznik zewnętrzny – służy do łączenia odrębnych części schematu znajdujących się na różnych stronach; powinien być opisany jak łącznik zewnętrzny; poza tym powinien zawierać numer strony, do której się odwołuje, np. $2$, $4.3$, $B5$.

Łącznik zewnętrzny

Przykład¶

Znalezienie największego elementu wśród podanych przez użytkownika po koleje. Użytkownik konczy badanie elementow podając nie liczbowy symbol.

Niech maksimum oznacza największą dotychczas znalezioną wartość.

1 Pobieramy od uzytkownika pierwszy element.

  Jezeli on nie jest liczbą, to koniec.

  Inaczej ustalamy maksymum = podana liczba.

2. Pobieramy od użytkownika następny element.

  Jezeli on nie jest liczbą, to koniec.

  Jeżeli jego wartość jest większa od zawartości maksimum, to przypisz maksimum wartość tego elementu.

3. Wróć do punktu 2.

Wynikiem będzie maksymum

AI obrazek ze zmianami

Jak napisać program?¶

  • najpierw algorytm!
  • potem program w wybranym języku programowania

Styl PEP8¶

  • wymowa: pi-i-pi-ejt
  • standaryzacja kodu używana m.in. przy rozwijaniu nowych funkcjonalności
  • używanie daje lepszą organizację i czytelność kodu
  • pełna wersja: PEP 8

Znaki odstępu¶

  • we wcięciach stosujemy spacje (a nie tabulatory)
  • każdy poziom wcięcia powinien składać się z 4 spacji
  • wiersz powinien składać się z maksymalnie 79 znaków

Puste linie¶

  • dwie linie między funkcjami najwyższego poziomu i między klasami
  • pojedyncza linia między funkcjami w klasie

Kodowanie¶

  • dla Pythona 3 sugerowane i domyślne jest kodowanie UTF-8
In [16]:
var1 = 2 
var2 = 3
var1 += 2 
var3 = var1
var1 *= 3
var4 = var1/var2
var2 += 2

# wyświetlenie wartości:
print('var2 = ', var2)
var2 =  5

Instrukcja print()¶

print() -- polecenie wyświetlania

In [17]:
print("Hello World!")
Hello World!

Możesz połączyć dwa lub więcej napisów w jednym poleceniu oddzielając je przecinkiem, a spacja między nimi doda się automatycznie:

In [18]:
print("Witaj", "co u Ciebie?")
Witaj co u Ciebie?

Instrukcja print() pozwala na wyświetlanie różnych typów, nie tylko napisów.

In [19]:
print(3)
print(3, 6, 8)
print("Ania ma:", 3, "lata")
print()
print('doesn\'t')
3
3 6 8
Ania ma: 3 lata

doesn't
In [20]:
print('Hello' , 'world')
print('Hello' , 'world' , sep='*')
print('Hello' , 'world' , sep=' ')
print('Hello' , 'world', sep='\n')
Hello world
Hello*world
Hello world
Hello
world
Znak specjalny Znaczenie
\n znak nowej linii, dodanie „entera”
\t dodanie tabulacji (= 8 spacji)
\' apostrof
\" cudzysłów
\\ ukośnik zwrotny
In [21]:
print("To jest\nnowe")
print("To jest\n\tnowe")
To jest
nowe
To jest
	nowe
In [22]:
print(5+3)
print(4*5.2)
print(9-7)
print(25%7)
print(4/5)
8
20.8
2
4
0.8
In [23]:
print(4//5)
print(4/5.0)
print(4//5.0)
print(3**0)
0
0.8
0.0
1
In [24]:
print(0**0)
print(4/0)
1
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
Cell In[24], line 2
      1 print(0**0)
----> 2 print(4/0)

ZeroDivisionError: division by zero

print() ze zmiennymi

In [25]:
a = 5
b = 7
print(a + b)
print(s = 3)
12
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[25], line 4
      2 b = 7
      3 print(a + b)
----> 4 print(s = 3)

TypeError: 's' is an invalid keyword argument for print()
In [26]:
c, d = 2, 4
print(c/d**2)
print(c/(d**2))
print((c/d)**2)
0.125
0.125
0.25
In [27]:
x = 2
print(x)
x += 1
print(x)
2
3
In [28]:
x = 3
print(x += 1)
  Cell In[28], line 2
    print(x += 1)
            ^
SyntaxError: invalid syntax
In [29]:
slowo = 'Ala ma'
print(slowo + 'kota')
print(slowo, 'kota')
print(slowo, 'kota', sep= '*')
Ala makota
Ala ma kota
Ala ma*kota
In [30]:
slowo = "Pies"
print(slowo*2)
print(slowo, 3)
print(slowo+3)
PiesPies
Pies 3
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[30], line 4
      2 print(slowo*2)
      3 print(slowo, 3)
----> 4 print(slowo+3)

TypeError: can only concatenate str (not "int") to str

Przykład zadania¶

Obliczyć BMI dla wagi - 63, wzrost - 1.60.

Wzór na BMI: $$ BMI=\dfrac{waga}{wzrost^2} $$

In [31]:
wzrost = 1.60
waga = 53
BMI = waga / (wzrost ** 2)
BMI
print("Twoje bmi wynosi:",BMI)
Twoje bmi wynosi: 20.703124999999996

Oczywiście, można zrobić w jednej linii:

In [32]:
print("Twoje bmi wynosi:", 53.0 / (1.6 ** 2))
Twoje bmi wynosi: 20.703124999999996

Zaawansowane opcje print()¶

print(*objects, sep=' ', end='\n', file=sys.stdout, flush =False)

  • objects — to, co ma być wyświetlone
  • sep — separator, domyślnie znak spacji
  • end — to, co ma być wyświetlone na końcu, domyślnie znak końca linii
  • file — określa, gdzie mają być objects wyświetlone, domyślnie sys.stdout (domyślny ekran)
  • flush — określa, czy „wyjście” ma być buforowane przed przekazaniem do file, domyślnie False

Przykłady¶

In [33]:
print(1, 2, 3, 4)
print(1, 2, 3, 4, sep = '*')
print(1, 2, 3, 4, sep = '*', end = '&')
print('x', 'y', 'z', sep='', end='')
print('a', 'b', 'c', sep='', end='')
print('a', 'b', '\n', 'c')
print('sdf', 3456, -2, sep='\t')
1 2 3 4
1*2*3*4
1*2*3*4&xyzabca b 
 c
sdf	3456	-2

Formatowanie napisów¶

  • trzy różne konwencje
  • niektóre rzeczy nie działają w każdej wersji 3.x
  • warto zastanowić się czy warto używać tych konstrukcji?
  • czasem może lepiej skorzystać z funkcji print?

styl printf¶

Zaczerpnięty z języka C — stare.

Dokumentacja Pythona — Old String Formatting

In [2]:
a = "abc"
str = "a to %s" % a
print(str)
b = 4
c = 5
str2 = "%d + %d = %d" % (b, c, b + c)
print(str2)
a to abc
4 + 5 = 9

styl format¶

Dokumentacja Pythona — format

In [35]:
a = "abc"
str = "a to {}".format(a)
print(str)
b = 4.2
c = 5
str2 = "{0} + {1} = {2}".format(b, c, b + c)
print(str2)
a to abc
4.2 + 5 = 9.2

styl f-Strings¶

f-ciągi pojawiły się w wersji języka Python 3.6 i obecnie są zalecanym sposobem formatowania tekstu. Aby utworzyć f-ciąg, należy:

  • Wpisać literę f lub F, a zaraz po niej otwierający cudzysłów lub apostrof.
  • Wewnątrz łańcucha umieścić zmienne lub wyrażenia ujęte w nawiasy klamrowe ({}). Ich wartości zostaną automatycznie zamienione na tekst.

Dokumentacja Pythona — f-strings

In [36]:
a = "abc"
str = f"a to {a}"
print(str)
b = 4.2
c = 5
str2 = f"{b} + {c} = {b+c}"
print(str2)
a to abc
4.2 + 5 = 9.2
In [37]:
b = 4.2
c = 5
str2 = f"{b:f} + {c:d} = {b+c:e}"
print(str2)
print(f"{b:.2f} + {c:d} = {b+c:e}")
4.200000 + 5 = 9.200000e+00
4.20 + 5 = 9.200000e+00
In [38]:
wzrost = 1.60
waga = 53
BMI = waga / (wzrost ** 2)
BMI
print(f"Twoje bmi wynosi: {BMI}")
Twoje bmi wynosi: 20.703124999999996

Wczytywanie z konsoli:¶

In [39]:
x = input()
print(x)
print(type(x))
4
4
<class 'str'>
In [40]:
x = int(input())
print(x)
print(type(x))
5
5
<class 'int'>
In [41]:
x = int(input("Wpisz licbzą:"))
print(x)
print(type(x))
Wpisz licbzą:5
5
<class 'int'>

3 typy instrukcji¶

Istnieje tylko trzy typa instrukcje:

  • Instrukcja prosta
  • Instrukcja warunkowa
  • Pętla

Program z instrukcją prostą¶

In [43]:
a = int(input ("Wprowadź pierwszą liczbę : "))
b = int(input ("Wprowadź drugą liczbę : "))
print(a + b)
Wprowadź pierwszą liczbę : 2
Wprowadź drugą liczbę : 3
5

Gdzie pisac program?¶

My będzięmy w Notepad++i uruchamiać w Python console

Stył¶

Ustawienia -> Konfigurator stylow -> Python

Jak ustawić w editorze żeby Tab było 4 spacje:¶

Ustawienia -> Ustawienia -> wcięcia

  • Wcięcia za pomocą znaku spacji

Zpaiszć jako .py.Nie zapomniaj wybrać typ pliky .py

Jak uruchomiać?¶

W wierze poleceń przejść do folderu z plikiem, naprz.

cd /D D:\numerindeksu

I potem uruchomić plik w werszu poleceń

py nazwapliku.py

W PowerShell:

Set-Location -Path D:\numerindeksu py nazwapliku.py

Program z instrukcją prostą¶

In [45]:
a = int(input ("Wprowadź pierwszą liczbę : "))
b = int(input ("Wprowadź drugą liczbę : "))
print(a / b)
Wprowadź pierwszą liczbę : 6
Wprowadź drugą liczbę : 3
2.0

A jeżeli chcemy sprawdzić , ze $b\ne 0$?

Instrukcja warunkowa¶

Instrukcja warunkowa – element języka programowania, który pozwala na wykonanie różnych instrukcji w zależności od tego czy zdefiniowane przez programistę wyrażenie logiczne jest prawdziwe, czy fałszywe.

Przykład:¶

Jeżeli $b\ne 0$, wyświetl $a/b$.

Inaczej – wyświetl komunikat o błędzie (opcjonalne).

if <expr>:
    <statement(s)>

Jeżeli $b\ne 0$, wyświetl $a/b$, inaczej....

if <expr>:
    <statement(s)>
else:
    <statement(s)>

Warunek musi być typu bool lub mieć możliwość przekstałcenia bool.

In [48]:
a = int(input ("Wprowadź pierwszą liczbę : "))
b = int(input ("Wprowadź drugą liczbę : "))
if b != 0:
    print(a,":",b, "=", a/b)
Wprowadź pierwszą liczbę : 18
Wprowadź drugą liczbę : 6
18 : 6 = 3.0
In [50]:
a = int(input ("Wprowadź pierwszą liczbę : "))
b = int(input ("Wprowadź drugą liczbę : "))
if b:
    print(a,":",b, "=", a/b)
Wprowadź pierwszą liczbę : 3
Wprowadź drugą liczbę : 0

Wprowadź pierwszą liczbę : 14

Wprowadź drugą liczbę : 2

7