# coding: utf-8

# # Python: podstaw ciąg dalszy
# 
# ## Tomasz Dwojak
# 
# ### 13 czerwca 2018

# ## Co już znamy?
#  * podstawowe typy danych i operacje na nich
#  * Instrukcje sterujące: ``if``, ``for``
#  * pisanie funkcji
# 
# 

# ## Co na dziś?
# 
#  * ``tuple`` i ``set``,
#  * operacje na plikach,
#  * coś więcej o funkcjach
#  * korzystanie z bibliotek
#  * przegląd najważniejszych bibliotek

# In[9]:


def dwojak(x): 
    x *= 2
    return x
    
l = [1, 2, 3]
s = "123"

dwojak(l)
dwojak(s)
print(dwojak(1))
print(l)
print(s)


# ## Mutable i Immutable
# 
# ### Mutable
#  * listy,
#  * słowniki,
#  * sety,
#  * własnoręcznie zdefiniowane klasy.
#  
# ### Immutable
#  * liczby: inty i floaty,
#  * napisy,
#  * tuple.

# ## Nieoczywistości

# In[11]:


def dwojak1(x): x *= 2
def dwojak2(x): 
    x = x * 2
    print("F:", x)

l = [1,2, 3]
dwojak1(l)
print(l)

l = [1,2, 3]
dwojak2(l)
print(l)


# In[17]:


l = [1, 2, 3]
e = l[:]
e.append(4)
print(l)
print(e)


# In[19]:


e = []
f = [e for i in range(3)]
f[0].append(1)
print(f)


# ## To może ``tuple``?
#  * stały rozmiar,
#  * immutable,
#  * mogą być kluczami w słownikach

# In[25]:


t = (1, "napis", [])
t[-1].append(0)
print(t)
print(len(t))
print({t: None})


# ## Funkcje cz. 2

# In[36]:


def suma(*args):
    return sum(args)
print(suma(1,2,3,4,5))

def greet_me(z=None,**kwargs):
    if kwargs is not None:
        for key, value in kwargs.items():
            print("%s == %s" %(key,value))
greet_me(a=1, b=(3,4))


# ## Generatory

# In[38]:


def alfaRange(x, y):
    for i in range(ord(x), ord(y)):
        print(i)
        yield chr(i)

for c in alfaRange('a', 'e'):
    print(c)


# ## Operacje na plikach

# In[45]:


plik = open("haslo.txt", 'r')
for linia in plik.readlines():
    print(linia.strip())
print(plik.read())
print(">>")
plik.close()


# In[47]:


with open("haslo.txt", 'r') as plik:
    for linia in plik.readlines():
        print(linia)
print(plik.read())


# In[48]:


with open("haslo2.txt", 'w') as plik:
    for word in ('corect', 'horse', 'battery', 'staple'):
        plik.write(word)
    plik.write('\n')
with open("haslo2.txt", 'w+') as plik:
    plik.writelines([' '.join(('corect', 'horse', 'battery', 'staple'))])


# # Korzystanie z modułów

# ## Importowanie

# In[49]:


import os
print(os.name)

from os import getenv
print('Nazwa uzytkownika: {}'.format(getenv("USER")))


# In[50]:


from collections import *
print(Counter("konstantynopolitańczykowianeczka"))

import numpy as np
np.array([[1, 3, 4, 5]], dtype='float32')


# ## Instalacja
# 
#  * lokalnie (per użytkownik) lub globalnie
#  * pyCharm lub linia komend, np. ``pip install --user flask`` lub ``python -m pip install --user flask``

# ## Wczytywanie z klawiatury

# In[51]:


name = input("What's your name?\n")
print("Welcome home, {}.".format(name))


# In[ ]:


liczby = eval(input("Podaj liczby"))
print(sum(liczby))