Wstęp

Ten plik jest zasadniczo notesikiem, który będę sobie pisał podczas prostych zajęć z informatyki prowadzonymi przez Janusza.


Podstawowy Syntax

Funkcje built-it

FunkcjaCo robiPrzykład
print()Pokazuje tekst w konsoliiprint('elo')
len()Zwraca długość obiektulen([1,2]) = 2
type()Pokazuje jaki rodzaj danych to jesttype(5) = int
str()Zamienia dane na stringastr(100) = “100”
int()Zamienia dane na liczbę całkowitąint("32") = 32
list()Zamienia dane na listelist("abc") = [a, b, c]

Atrybuty

FunkcjaCo robi
.valPokazuje wartość
.nextZwraca pointer
.shapeNp. w Pandas zwraca liczbę wymiarów

Akcje (Methods)

FunkcjaCo robiPrzykład
.append()Dodaje item do końca listylista.append(2)
.pop()Usuwa ostatni item z listy i go zwracalista.pop()
.lower()Zmienia wszystkie litery string na małe"HELLO".lower()
.split()Rozdziela tekst na listę słów"raz dwa trzy".split()
.keys()Zwraca wszystkie dane w słownikslownik.key()

Z zajęć 11.03.2026


Zajęcia 25/02

Algorytm Euklidesa - szuka największe wspólnego dzielnika (Greatest Common Divisor)

while n is different from k
    if n > k
        n = n - k
    else
        k = k - n
GCD = n

A tutaj jest kod do rozwiązywania równania kwadratowego ;)

import math
 
#Program rozwiązujący równanie kwadratowe
# ax^2+bx+c = 0
#inf. dla użytkownika
print("Rozwiązywanie równania kwadratowego ax^2 + bx + c = 0")
# Inicjalizacja zmiennych
a=2 # wsp. przy x^2
b=10
c=6
#Inf dla uż.
print("Rozwiązywanie równania kwadratowego " + str(a) + "*x^2 + " + str(b) + " *x + " + str(c) + "= 0")
if a == 0:
    if b == 0:
        if c == 0:
            print("Niekończenie wiele rozwiązań")
        else:
            print("Sprzeczne")
    else: #b!= 0
        print("x = " + str(-b / 2 * a))
else:
    delta = b ** 2 - 4 * a * c
    if delta < 0:
        print("Sprzeczne")
    elif delta == 0:
        print("x = " + str(-c/b))
    else:
        x1 = (-b + math.sqrt(delta)) / (2 * a)
        x2 = (-b - math.sqrt(delta)) / (2 * a)
        print("x = " + str(x1))
        print("x = " + str(x2))

Zajęcia 04/03

W sumie to nic się nie działo 😴


Zajęcia 11/03

Janusz programuje a ja patrzę na funkcje i inne w Pythonie3
Stworzyłem prostą tabelkę z prostszymi funkcjami do którego będę dodawał w przyszłości nowe rzeczy.

# Najprostrze pętle  
  
# Dla każdego i w danym zakresie (liczymy od 0), bez samego ograniczenia górnego  
for i in range(10):  
    print(i, end=", ")  
  
# Zwraca 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,

Zajęcia 18/03

FunkcjaCo robiPrzykład
len(lista)Zwraca długość listy-||-
lista[i]Zwraca wartość na miejscu indeksu-||-
range(k,n) ! BEZ n !-||-
range(k,n,m)range(-5,5,2) = -5, -3, -1, 1, 3
list(range(n))Zwraca listę z elementami rangelist(range(3)) = [0,1,2]

Zajęcia 25/03

Dzisiaj na zajęciach omawiamy listy z Januszem, znowu dużo gada :P
Listy można zagnieżdżać w sobie (nested) list_1 = [1, 2, [3, 4, 5]]

Pętla for in możemy np. iterować w pętli po każdej wartości danej listy

for x in [1, 2, 3, 10]:
	print(x, end = ', ')
	
# otrzymamy wyniki 1, 2, 3, 10, 
 
#nawet kiedy mamy drugą listę
for x in [1, 2, 3, 10, [11,12,13]]:
    if type(x) == list:
        for y in x:
            priynt(y, end = ', ')
    else:
        print(x, end = ', ')
# otrzymamy wynik 1, 2, 3, 10, 11, 12, 13, 

Mamy też polecenie in gdzie, <element> in <list>

3 in [1, 2, 3, 4] # TRUE
[1, 2] in [1, 2, 3] # FALSE
[1, 2] in [[1, 2], 3] # TRUE

Dwuwymiarowe listy np. :

#lista dwuwymiarowa 3x3
lst = [[1,2,3], [4,5,6], [7,8,9]]
 
lst[0] # [1,2,3]
lst[0][2] # 3
 
lst[2][1] = 500 # lst == [[1,2,3], [4,500,6], [7,8,9]]

Slicing w listach polega na nadaniu przedziału w danej liście, za pomocą dwukropka A:B :

lst = [0,1,2,3,4,5]
 
print(lst[10:20]) # []
print(lst[0:20]) # [0, 1, 2, 3, 4, 5]

Append dodaje na koniec słowa dany cały element lst.append()

lst = [0,1,2,3]
lst.append(4) # [0, 1, 2, 3, 4]
lst.append([5,6,7]) # [0, 1, 2, 3, 4, [5, 6, 7]]

Extend bardzo analogicznie ale, ale iteruje przez każdy podany element lst.extend()

lst = [0, 1, 2, 3]
lst.extend(4) # error
lst.extend([4]) # [0, 1, 2, 3, 4]
lst.extend([5, 6, 7]) # [0, 1, 2, 3, 4, 5, 6, 7]
# zauważ, że w ostatnim mamy po kolei 4, 5, 6, 7

Sort sortuje rosnąco listę lst.sort() albo według podanych parametrów lst.sort(key=dany_parametr, reverse=True) np.

lst = [3, -1, 3, 0, 2, -3]
lst.sort() # [-3, -1, 0, 2, 3, 3]
lst.sort(reverse=True) # [3, 3, 2, 0, -1, -3]
lst.sort(key=abs) # [0, -1, 2, 3, 3, -3]

Małe (znaczące!) różnice:

  • mnożenie listy powoduję, że wskaźnik stworzony w ten sposób wskazuję na tą samą informację np.
lst = [[1]*3]*2 # lst == [[1, 1, 1], [1, 1, 1]]
lst[0][0] = 3 # lst == [[3, 1, 1], [3, 1, 1]

Zajęcia 1/04

Słowniki
Słowniki służą do przypisywania wartości, dla każdej danej zmiennej

eng2sp = {'one': 'uno', 'two': 'dos', 'three': 3}
print(eng2sp['two']) # 'dos'
print(eng2sp['three']) # 3

Oraz mamy dwie dodatkowe funkcje typu Atrybuty, czyli:

eng2sp.keys() # ['one', 'two', 'three']
eng2sp.values() # ['uno', 'dos', 3]

Zajęcia 15/04

Prosty program, który samoczynnie odgaduje liczbę w danym zakresie

 
  
from random import randint  
  
  
dół = 0  
góra = 1000000  
  
  
lewy, prawy = dół, góra  
  
szukana = randint(dół, góra)  
liczbapytań = 0  
  
print("Gra w zgadywankę")  
  
  
while liczbapytań <= 20:  
    # print("Podaj liczbę z zakresu " + str(dół) + "-" + str(góra))  
  
    strzał = (prawy+lewy)//2  
    print(strzał)  
  
  
    # odp = int(input(f"Podaj liczbę z zakresu {dół}-{góra}: "))  
    # print(f"{type(szukana)}, {type(odp)}")    liczbapytań += 1  
  
    if szukana == strzał:  
        print (f"Trafiłeś !!!! Zgadłeś za {liczbapytań} razem")  
        break  
    # else: # szukane != odp  
        print("Pudło")  
        if szukana > odp:  
            print("za mało")  
        else: # szukane < odp  
            print("za dużo")  
    elif szukana > strzał:  
        print("za mało")  
        lewy = strzał  
    else: # szukane < odp  
        print("za dużo")  
        prawy = strzał  
  
  
  
if liczbapytań == 21:  
    print("Skończyły się pytania")

Wynik:

> Gra w zgadywankę
500000
za dużo
250000
za mało
375000
za dużo
312500
za dużo
281250
za dużo
265625
za mało
273437
za mało
277343
za dużo
275390
za dużo
274413
za mało
274901
za mało
275145
za mało
275267
za dużo
275206
za dużo
275175
za mało
275190
za dużo
275182
za dużo
275178
za mało
275180
Trafiłeś !!!! Zgadłeś za 19 razem

Zajęcia 22/04

Tym razem, programujemy proste funkcje i opieramy się głównie na listach itp. z ciekawych rzeczy Janusz przedstawia użycie wbudowanego modłu doctest w Pythonie. DocTest jest wywoływant przez >>> otoczone w komentarzu """ , gdzie syntax widać w przykładzie. Funkcja ta jest przydatna, ponieważ zwraca nam powiadomienie czy naszy przypusczalny wynik (który chcemy otrzymać) się zgadza lub nie. np.

def suma(lista):  
    
    """  
    >>> suma([1,2,3])  
    5    
    """  
    
    suma = 0  
    for elem in lista:  
        suma += elem  
    return suma  

Sprawdzamy czy def suma() zwróci nam sumę , a my się spodziewamy , więc dostajemy powiadomienie w konsoli

Failure
 
**********************************************************************
File "C:\Users\drewn\PycharmProjects\PythonProject2\listy.py", line 5, in listy.suma
Failed example:
    suma([1,2,3])
Expected:
    5
Got:
    6

Zajęcia 29/04

Dzisiaj uczymy się o w Pythonie, czyli o , gdzie mamy możliwość:

  • Otwierania plików
  • Pisania w pliku
  • Zamykania pliku
  • Ogólnego edytowania pliku

Otwieranie pliku
Podstawową komendą otwierania pliku w Pythonie jest komenda open()

file = open(path, mode)
# path - odpowiada za ścieżke, czyli lokalizacja pliku
# mode - czyli tryb otwierania pliku

Wyróżniamy 7 trybów:
1. r - reading, czyli czytanie pliku, bazowy tryb jeśli nie podamy innego
2. w - writing, usuwa zawartość pliku albo tworzy nowy
3. x - writing, tworzy nowy plik
4. a - writing, ustawia “pozycję kursora” na samym końcu pliku albo tworzy nowy plik
5. + (r+, w+, x+, a+) - umożliwia dodatkowo czytanie albo pisanie
6. b - tryb binarny
7. t - tryb tekstowy, bazowy tryb jeśli nie podamy innego

Przykłady

# Pełny SYNTAX
file = open(file, mode='r', buffering=-1, encoding=None, \ errors=None, newline=None, closefd=True, opener=None)
 
'w'  # Usuwa zawartość pliku jeśli już istniał
'w+' # Writing and reading mode, text mode -> Pisanie oraz zczytywanie, tryb tekstowy

Zamykanie pliku
Podstawową komendą jest komenda .close()

file.close()
# Zamyka tylko już otwarty plik

Praca z plikami
Jest wiele sposobów czytania plików (reading):

file.read() # Czyta w całym pliku, zwraca STRING
 
file.read(size) # Czyta maksymalnie 'size' znaków (nie bajtów!) z pliku
 
file.readline() # Czyta następną linijkę  z pliku
 
# Pętle
for line in file:
	# Robi coś z linijką
	
file.readlines() # Czyta wszystkie linijki pliku - zwraca listę
list(file) # Robi dokładnie to samo

Jeśli chodzi o pisanie w pliku:

file.write(string) # Dopisuje string do pliku
 
while there_is_next_line():
	file.write(generate_next_line())

Uwaga!

W pythonie “Program” zapamiętuje aktualny stan czytania i pisania pliku, co ma swoje konsekwencje np.

contents1 = file.read()
contents2 = file.read()
 
# W tym przypadku contents2 BĘDZIE PUSTE!!!

Zajęcia 06.05

Powierzchowne wprowadzenie biblioteki Module os , która odpowiada za manipulacjami na folderach i plikach (directories), m. in.:

  • chdir(path) - zmienia katalog do podane w path
  • getcwd() - zwraca aktualny folder w którym pracujemy (cwd - current working directory)
  • mkdir(path, mode) - tworzy katalog z podaną nazwą path
  • remove(path) - usuwa plik/folder podany w path
  • rename(old,new) - zmienia nazwę pliku/katalog z old na new, (są to ścieżki)

walk(start) - przeszukuję wszystkie sub-foldery od podanego początkowego start (uproszczona wersja)

Przykład użycia:

def file_sizes(path):
	import os # path, walk
	from os.path import join, getsize
	# illustration of the different ways to use the modules
	for directory, subdirectories, files in os.walk(path):
		print(f"{directory:50} has {sum(getsize(join(directory, name)) for name in files):10,} bytes in {len(files):5,} files.")