Dla osób których nie było na kursie: https://www.learnpython.org/en/Map,_Filter,_Reduce
Jak sama nazwa wskazuje, filtr tworzy listę elementów, dla których funkcja zwraca wartość True.
Dla większego zrozumienia polecam uruchomić kod i postarać się go przeanalizaować
k = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# 1 sposób
nowa_lista = []
for x in k:
if x % 2 == 0:
nowa_lista.append(x)
print(nowa_lista)
# 2 sposób
def jest_parzysty(x):
if x % 2 == 0:
return True
else:
return False
print(tuple(filter(jest_parzysty, k)))
print(tuple(filter(lambda x: x % 2 == 0, k)))
Mapa wykonuje funkcję do wszystkich pozycji na liście_wejściowej.
Dla większego zrozumienia polecam uruchomić kod i postarać się go przeanalizaować
k = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# 1 sposób
nowa_lista = []
for x in k:
if x % 2 == 0:
nowa_lista.append(x)
print(nowa_lista)
# 2 sposób
def jest_parzysty(x):
if x % 2 == 0:
return True
else:
return False
print(tuple(filter(jest_parzysty, k)))
print(tuple(filter(lambda x: x % 2 == 0, k)))
Reduce to bardzo przydatna funkcja do wykonywania niektórych obliczeń na liście i zwracania wyniku. Stosuje obliczenia kroczące do sekwencyjnych par wartości na liście.
Dla większego zrozumienia polecam uruchomić kod i postarać się go przeanalizaować
from functools import reduce
# WYLOSOWANIE listy dziesięcioelementowej
import numpy as np
x = np.random.rand(10)
# Pierwszy sposób
elem = 1
for a in x:
elem = elem * a
print(elem)
# 2 sposób
print(reduce(lambda a, b: a*b, x))
# W jaki sposób reduce wykonuje operacje na kolekcjach:
# [1,2,3,4,5]
# [2,3,4,5]
# [6,4,5]
# [24,5]
# [120]
Funkcja zip () Pythona tworzy iterator, który agreguje elementy z dwóch lub więcej iteratorów.
Polecam przeczytać: https://realpython.com/python-zip-function/ dla większego zrozumienia, oraz uruchomić kod i postarać się go przeanalizaować
slowa = ['jablko', 'czeresnia', 'maslo', 'jajka']
liczby = [3, 10, 1, 6]
print(list(zip(slowa, liczby)))
print(list(zip(slowa)))
print(list(zip(slowa, liczby, slowa)))
lista_liczb = [1.12, 121.12, 12.0]
print(list(zip(slowa, lista_liczb)))
from itertools import zip_longest
print(list(zip_longest(lista_liczb, slowa, fillvalue=max(lista_liczb))))
print(list(sorted(zip(liczby, slowa, lista_liczb))))
print(list(sorted(zip(slowa, liczby))))
print(dict(sorted(zip(slowa, liczby))))
Dla osób które nie były na zajęciach zapresentowano kod projektu. Projekt, który przygotujemy w ramach zajęć będzie powszechnie znaną grą "Snake".
Aby uruchomić program należy wcześniej zainstalwoać bibliotekę pygame komendą pip install pygame. Następnie kod umieścić w pliku main.py.
Kod programu można również znaleść https://github.com/AdrianKnapczyk/codebrainers-snake
import pygame
step = 20
width = 800
height = 600
dimensions = (width, height)
pygame.init()
screen = pygame.display.set_mode(dimensions)
pygame.display.set_caption("codebrainers-snake")
clock = pygame.time.Clock()
def turn(direction):
pressed_key = pygame.key.get_pressed()
if pressed_key[pygame.K_DOWN]:
return 2
if pressed_key[pygame.K_UP]:
return 0
if pressed_key[pygame.K_LEFT]:
return 3
if pressed_key[pygame.K_RIGHT]:
return 1
return direction
def set_new_position(x_pos, y_pos, direction):
if direction == 2:
return (x_pos, y_pos + step)
if direction == 0:
return (x_pos, y_pos - step)
if direction == 3:
return (x_pos - step, y_pos)
if direction == 1:
return (x_pos + step, y_pos)
return (x_pos, y_pos)
head_x = 400
head_y = 300
head_direction = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit(1)
head_direction = turn(head_direction)
head_x, head_y = set_new_position(head_x, head_y, head_direction)
screen.fill((255, 255, 255))
kwadrat = pygame.Rect(head_x, head_y, 20, 20)
pygame.draw.rect(screen, (128, 128, 128), kwadrat)
pygame.display.flip()
clock.tick(12)
jupyther lab), oraz przerobić podane w nim zadania.