help([1, 2, 3])

dir([1, 2, 3])

sum??

"""
Explanation: <img src='http://pycircle.org/static/pycircle_big.png' style="margin-left:auto; margin-right:auto; height:70%; width:70%">
Wprowadzenie część 2
End of explanation
"""


all([1==1, True, 10, -1]), all([1==5, True, 10, -1])

any([False, True]), any([False, False])

bin(12), oct(12), hex(12), int('12'), float(12)

ord('A'), chr(65)

raw_input(u"Podaj liczbę: ")

zip([1,2,3], [2, 3, 4])

sorted([8, 3, 12, 9, 3]), reversed(range(10)), list(reversed(range(10)))

len([3, 2, 1]), len([[1, 2], [3, 4, 5]])

list(), dict(), set(), tuple()

"""
Explanation: Funkcje wbudowane
End of explanation
"""


A = (1, 2, 3)
B = [1, 2, 3]
A == B

"""
Explanation: Tuple (krotka)
End of explanation
"""


A = set()
A.add(2)
A.add(3)
A.add(4)
A

A.add(3)
A

B = set((4, 5, 6))
A.difference(B)

A.symmetric_difference(B)

A.intersection(B)

A.union(B)

"""
Explanation: Czym się różni krotka od listy?
Set (zbiory)
End of explanation
"""


pow(2, 10), divmod(10, 3), sum([1, 2, 3])

round(0.5), round(0.2), round(0.9)

min([1, 2, 3]), max([1, 2, 3])

abs(10), abs(-10)

24 % 5, 24 % 2

"""
Explanation: Prosta matematyka
End of explanation
"""


f = lambda x: x+1
f(3)

f = lambda a, b: a+b**3

f(2, 3)

map(lambda x: x+10, [0, 2, 5, 234])

[x+10 for x in [0, 2]]

map(chr, [80, 121, 67, 105, 114, 99, 108, 101])

[chr(x) for x in  [80, 121, 67, 105, 114, 99, 108, 101]]

filter(lambda x: x > 0, [-1, 0, 4, -3, 2])

[x for x in [-1, 0, 4, -3, 2] if x > 0]

reduce(lambda a, b: a - b, [2, 3, 4])

2 - 3 - 4

"""
Explanation: Trochę programowania funkcyjnego
map, filter, reduce
wyrażenie lambda $\lambda$
End of explanation
"""


%ls -l

fp = open("pycircle.txt", "w")

%ls -l

fp.write("Hello world\n")
fp.close()

%cat pycircle.txt

with open("pycircle.txt") as fp:
    print fp.read(),

"""
Explanation: Więcej informacji temat funkcji wbudowanych na https://docs.python.org/2/library/functions.html
Zadania 1
1 . Napisz kod tworzący listę z przedziału $[0, 100]$ liczb podzielnych przez 3 ale nie podzielnych przez 9
2 . Napisz kod który zwraca unikalne elementy z podanej listy
3 . Napisz kod który znajdzie maksimum wartości słownika
Pliki
End of explanation
"""


def fun1(a):
    a.append(9)
    return a
    
def fun2(a=[]):
    a.append(9)
    return a

lista1 = [1, 2, 3]
lista2 = [3, 4, 5]
fun1(lista1), fun2(lista2)

def fun2(a=[]):
    a.append(9)
    return a
fun2()

fun2()

fun2()

"""
Explanation: Funkcje
End of explanation
"""


def show_local():
    x = 23
    print("Local: %s" % x)
show_local()

def show_enclosing(a):
    def enclosing():
        print("Enclosing: %s" % a)
    enclosing()
show_enclosing(5)

x = 43
def show_global():
    print("Global %s" % x)
show_global()

def show_built():
    print("Built-in: %s" % abs)
show_built()

x = 43
def what_x():
    print(x)
    x = 4

what_x()

x = 43
def encl_x():
    x = 23
    def enclosing():
        print("Enclosing: %s" % x)
    enclosing()

encl_x()

x = 43
def what_about_globals():
    global x
    x = 37
    print("In function %s" % x)

what_about_globals()
print("After function %s" % x)

"""
Explanation: LEGB
<img src="http://sandeeps.in/_images/python_legb.png" style="margin-left:auto; margin-right:auto;">
End of explanation
"""


def f(x):
    f.l += x
    print "x: ", x
    print "f.l: ", f.l
f.l = 10

f(2)
f(14)

"""
Explanation: Funkcje to też obiekty!
End of explanation
"""


def powerer(power):
    def nested(number):
        return number ** power
    return nested

f = powerer(3)
f(2), f(10)

def licznik(start):
    def nested(label):
        print(label, nested.state)
        nested.state += 1
    nested.state = start
    return nested

f = licznik(0)
f('a')
f('b')
f('c')

"""
Explanation: Fabryki funkcji
End of explanation
"""


' '.join(['a', 'b', 'c'])

"""
Explanation: Zadania 2
1 . Napisz funkcję która stworzy plik z pierwiastkami liczb z zakresu $[0, 1]$, każdy w sobnej linii
2 . Napisz funkcję wczytująca pierwiastki z pliku z poprzedniego zadania, oblicz ich sumę i dopisz do pliku
3 . Napisz funkcję która będzie działała jak ''.join() za pomocą reduce
End of explanation
"""


