text: #!/usr/bin/env python
  # coding: utf-8
  
  # # Podstawy Pythona: cz. 1
  # 
  # &nbsp;
  # 
  # ##  26 stycznia 2019
  
  # In[ ]:
  
  contractions_expansions = {"don't": "do not"}
  sentence = "I'd guess that it's Frank Sinatra."
  sentence = sentence.replace(' \'', '\'')
  sentence = sentence.replace(' n\'t', 'n\'t')
  words = sentence.split()
  for i in range(len(words)):
      for contraction, expansion in contractions_expansions.items():
          if contraction == words[i]:
              words[i] = expansion
  sentence = ' '.join(words)
  
  
  # In[ ]:
  
  
  print('Hello Python')
  
  
  # In[4]:
  
  
  print('Hello') 
  print('Python')
  print('Hello', 'Python', '!')
  
  
  # Typy proste:
  #  * liczby całkowite: `int`, np. `3`, `1000`, `-100`, `0`
  #  * liczby rzeczywiste: `float`: `3.14`, `5.0`, `-0.001`
  #  * napisy: `str`: `"Python"`, `"Rock'n'Roll"`, `'zalicznie z przedmiotu'`
  #  * logiczne `bool`, `True`, `False`
  #  * None: `None`
  
  # In[6]:
  
  
  print(10)
  print(1000.0)
  print (100, 100.0, "Sto")
  print("Zaokrąglenie PI:", 3.141519)
  
  
  # In[4]:
  
  
  print(type(100))
  print(type(20.5))
  print(type("okno"))
  print(type(None))
  
  
  # Operacje arytmetyczne na liczbach:
  #  * dodawanie `+`, np. `2 + 3`
  #  * odejmowanie `-`, np. `10-9`
  #  * mnożenie `*`, np. `2.0 * 3.0`
  #  * dzielenie `/`, np. `3 / 4` ( == 0.75)
  #  * dzielenie całkowite `//`, `3 / 4` ( == 0)
  #  * potęgowanie `**`, np. `10 ** 3` ( == 1000)
  
  # In[15]:
  
  
  print(1 + 2 - 3)
  print("2 ** 10", "=", 2 ** 10)
  print(1 + 2 - 3 + (4 * 5) / 6 ** 2)
  
  
  # Operacje na napisach:
  #  * konkatenacja `+`, np. `"Tarnowo " + "Podgórne"`
  #  * wielokrotność: `*`, np. `"O" * 6` ("OOOOOO")
  
  # In[16]:
  
  
  print("N" + "o" * 10 + '!')
  
  
  # Konwersja typów:
  
  # In[24]:
  
  
  print(int("100") * 2)
  print(str(100) * 2)
  print(float(100) * 2)
  print(bool("Fałsz"))
  
  
  # ## Zmienne
  #  * case sensitive,
  #  * brak deklaracji typu,
  #  * do zmiennej można przypisać wszystko.
  
  # In[2]:
  
  
  user = "t.dwojak"
  domain = "amu.edu.pl"
  email = user + "@" + domain
  print("email:", email)
  
  
  # ## Komentarze
  #  * Komentarze nie są interpretowane.
  #  * Komentarze w Pythonie zaczynają się od znaku '#'
  #  * Istnieją komentarze wielolinijkowe tagowane potrójnym ", czyli """ """
  # 
  
  # In[ ]:
  
  
  print("Bardzo ważna wiadomość") # A to jest komentarz
  """
  Komentarz
  wielo-
  linijkowy
  """
  # print("Nie chcę być wydrukowanym")
  print("A teraz chcę")
  
  
  # # Podstawy cz. 2
  
  # ## Listy
  #  * W Pythonie nie ma tablic, są listy;
  #  * Listy mogą przechowywać elementy różnych typów;
  #  * Indeksowanie zaczyna się od 0.
  #  * Funkcja `len` zwraca liczbę elementów listy
  
  # In[32]:
  
  
  x = [] # albo równoważnie pusta_lista = list()
  oceny = [5, 4, 3, 5, 5]
  roznosci = [3.14, "pi", ["pi"], 3]
  list_0_9 = list(range(10))
  print("Liczba elementów", len(oceny))
  
  
  # In[33]:
  
  
  print(oceny)
  print(oceny[1])
  
  
  # ## Dodawanie i usuwanie elementów z listy
  # 
  # Istnieją dwie metody:
  #  * `append(x)`: dodaje x na koniec listy
  #  * `extend(x)`: rozszerza listę o każdy element z x 
  
  # In[13]:
  
  
  engines = []
  engines.append('duck-duck-go')
  engines.append("yahoo")
  print(engines)
  
  
  # In[9]:
  
  
  m = ["google", 'bing']
  m.extend(l)
  print(m)
  
  
  # In[15]:
  
  
  liczby = [1,2,3,2,3,1,2,4]
  liczby.pop() # Domyślnie usuwa ostatni element z listy
  liczby.remove(2)
  print(liczby)
  
  
  # Inne przydatne metody:
  #  * `sort()`: sortuje listę rosnąco
  #  * `count(x)`: zlicza wystąpienia x w  liście
  #  * `index(x)`: zwraca indeks pierwszego wystąpienia x
  
  # In[20]:
  
  
  liczby = [1,2,3,2,3,1,2,4]
  print(liczby.count(1))
  print(liczby.index(4))
  liczby.sort()
  print(liczby)
  
  
  # ## Indeksowanie
  
  # In[21]:
  
  
  oceny = [1, 3, 2, 3, 1, 2, 4]
  print('pierwszy element:', oceny[0])
  print('ostatni element:', oceny[-1])
  print('5 pierwszych:', oceny[:5])
  print('5 ostatnich', oceny[-5:])
  print('od drugiego, do piątego', oceny[1:5])
  print('parzyste:', oceny[1:6:2])
  print('od tyłu', oceny[::-1])
  
  
  # ## Pętla typu ```for```
  #  * W Pythonie pętla *for* działa jak pętla *for each* w innych językach;
  #  * W Pythonie nie ma klamr, ani *begin* i *end*; jako ciało pętli musi być wcięte (najcześciej 4 spacje).
  
  # In[22]:
  
  
  n = 3
  
  for i in range(n):
      print('element', i)
  
  
  # In[23]:
  
  
  l = ["jeden", "dwa", "trzy"]
  for item in l:
      print(item)
  
  
  # In[24]:
  
  
  kwadraty = []
  
  for i in range(10):
      kwadraty.append(i ** 2)
  
  print(kwadraty)
  
  
  # ## Słowniki: `dict`
  
  # In[25]:
  
  
  slownik = {}
  s_oceny = {"Justyna" : [5,5,5], "Bartek" : [3,4,5], "Ola": [3,3,3]}
  print(s_oceny)
  
  
  # In[26]:
  
  
  s_oceny["Jan"] = [3,4,5]
  print(s_oceny)
  
  
  # ## Iterowanie po słowniku
  
  # In[27]:
  
  
  for osoba in s_oceny:
      print(osoba,':', s_oceny[osoba])
  
  
  # In[ ]:
  
  
  for osoba, oceny in s_oceny.items():
      print(osoba,':', oceny)
  
  
  # ## Instrukcja sterująca ```if ... else```
  
  #  * działa tak samo, jak w innych języka;
  #  * jest dodatkowa instrukcja następnego warunku *elif...*;
  
  # In[30]:
  
  
  zmienna = int(input("Podaj liczbe:\n"))
  
  if zmienna < 0:
      print("Ujemna!")
  elif zmienna > 0:
      print("Dodatnia")    
  else:
       print("Zero!")
  
  
  # ## Przydatne warunki
  # 
  #  * Porównanie za pomocą `==`
  #  * znak różności: `!=`
  #  * Sprawdzenie, czy coś jest w liście: `item in l`
  #  * Do łączenia warunków służą słowa klucznowe `and` i `or`
  
  # In[ ]:
  
  
  if "Ala" in s_oceny:
      print("Ala jest w grupie!")
  else:
      print("Niestety Ali nie ma  grupie!")
  
  
  # # Łańcuchy znakowe
  
  # In[ ]:
  
  
  napis = "Wiadomość"
  print(napis)
  
  
  # In[ ]:
  
  
  for znak in napis:
      print(znak, ord(znak))
  
  
  # In[ ]:
  
  
  slowa = ['Bardzo' , 'ważna', 'wiadomość']
  print(' '.join(slowa))
  
  
  # In[ ]:
  
  
  if 'dom' in napis:
      print(True)
  else:
      print(False)
  
  
  # In[ ]:
  
  
  text = "Bardzo ważna wiadomość"
  print(text.split(' '))
  
  
  # In[ ]:
  
  
  text = "Nie wszyscy lubią spacje na końcu linii.       "
  print(text)
  print(text.strip(' '))
  
  
  # # Pytania?
  
  # ## Funkcje
  
  # In[ ]:
  
  
  def is_greater_than_5(x):
      if x > 5:
          return True
      else:
          return False
  
  
  # In[ ]:
  
  
  print(is_greater_than_5(5))
  print(is_greater_than_5(-100))
  print(is_greater_than_5(500))
  
  