{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Python: podstaw ciąg dalszy\n",
    "\n",
    "## Tomasz Dwojak\n",
    "\n",
    "### 13 czerwca 2018"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Co już znamy?\n",
    " * podstawowe typy danych i operacje na nich\n",
    " * Instrukcje sterujące: ``if``, ``for``\n",
    " * pisanie funkcji\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "## Co na dziś?\n",
    "\n",
    " * ``tuple`` i ``set``,\n",
    " * operacje na plikach,\n",
    " * coś więcej o funkcjach\n",
    " * korzystanie z bibliotek\n",
    " * przegląd najważniejszych bibliotek"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "[1, 2, 3, 1, 2, 3]\n",
      "123\n"
     ]
    }
   ],
   "source": [
    "def dwojak(x): \n",
    "    x *= 2\n",
    "    return x\n",
    "    \n",
    "l = [1, 2, 3]\n",
    "s = \"123\"\n",
    "\n",
    "dwojak(l)\n",
    "dwojak(s)\n",
    "print(dwojak(1))\n",
    "print(l)\n",
    "print(s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Mutable i Immutable\n",
    "\n",
    "### Mutable\n",
    " * listy,\n",
    " * słowniki,\n",
    " * sety,\n",
    " * własnoręcznie zdefiniowane klasy.\n",
    " \n",
    "### Immutable\n",
    " * liczby: inty i floaty,\n",
    " * napisy,\n",
    " * tuple."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Nieoczywistości"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 2, 3, 1, 2, 3]\n",
      "F: [1, 2, 3, 1, 2, 3]\n",
      "[1, 2, 3]\n"
     ]
    }
   ],
   "source": [
    "def dwojak1(x): x *= 2\n",
    "def dwojak2(x): \n",
    "    x = x * 2\n",
    "    print(\"F:\", x)\n",
    "\n",
    "l = [1,2, 3]\n",
    "dwojak1(l)\n",
    "print(l)\n",
    "\n",
    "l = [1,2, 3]\n",
    "dwojak2(l)\n",
    "print(l)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 2, 3]\n",
      "[1, 2, 3, 4]\n"
     ]
    }
   ],
   "source": [
    "l = [1, 2, 3]\n",
    "e = l[:]\n",
    "e.append(4)\n",
    "print(l)\n",
    "print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1], [1], [1]]\n"
     ]
    }
   ],
   "source": [
    "e = []\n",
    "f = [e for i in range(3)]\n",
    "f[0].append(1)\n",
    "print(f)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## To może ``tuple``?\n",
    " * stały rozmiar,\n",
    " * immutable,\n",
    " * mogą być kluczami w słownikach"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1, 'napis', [0])\n",
      "3\n"
     ]
    },
    {
     "ename": "TypeError",
     "evalue": "unhashable type: 'list'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-25-2bd2fa17fbf5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'list'"
     ]
    }
   ],
   "source": [
    "t = (1, \"napis\", [])\n",
    "t[-1].append(0)\n",
    "print(t)\n",
    "print(len(t))\n",
    "print({t: None})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Funkcje cz. 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15\n",
      "a == 1\n",
      "b == (3, 4)\n"
     ]
    }
   ],
   "source": [
    "def suma(*args):\n",
    "    return sum(args)\n",
    "print(suma(1,2,3,4,5))\n",
    "\n",
    "def greet_me(z=None,**kwargs):\n",
    "    if kwargs is not None:\n",
    "        for key, value in kwargs.items():\n",
    "            print(\"%s == %s\" %(key,value))\n",
    "greet_me(a=1, b=(3,4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Generatory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "97\n",
      "a\n",
      "98\n",
      "b\n",
      "99\n",
      "c\n",
      "100\n",
      "d\n"
     ]
    }
   ],
   "source": [
    "def alfaRange(x, y):\n",
    "    for i in range(ord(x), ord(y)):\n",
    "        print(i)\n",
    "        yield chr(i)\n",
    "\n",
    "for c in alfaRange('a', 'e'):\n",
    "    print(c)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Operacje na plikach"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W Paryżu najlepsze kasztany są na placu Pigalle\n",
      "Zuzanna lubi je tylko jesienią.\n",
      "\n",
      ">>\n"
     ]
    }
   ],
   "source": [
    "plik = open(\"haslo.txt\", 'r')\n",
    "for linia in plik.readlines():\n",
    "    print(linia.strip())\n",
    "print(plik.read())\n",
    "print(\">>\")\n",
    "plik.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "W Paryżu najlepsze kasztany są na placu Pigalle\n",
      "\n",
      "Zuzanna lubi je tylko jesienią.\n",
      "\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "I/O operation on closed file.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-47-f06513c1bbec>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      2\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mlinia\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mplik\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadlines\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m         \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlinia\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplik\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m: I/O operation on closed file."
     ]
    }
   ],
   "source": [
    "with open(\"haslo.txt\", 'r') as plik:\n",
    "    for linia in plik.readlines():\n",
    "        print(linia)\n",
    "print(plik.read())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "with open(\"haslo2.txt\", 'w') as plik:\n",
    "    for word in ('corect', 'horse', 'battery', 'staple'):\n",
    "        plik.write(word)\n",
    "    plik.write('\\n')\n",
    "with open(\"haslo2.txt\", 'w+') as plik:\n",
    "    plik.writelines([' '.join(('corect', 'horse', 'battery', 'staple'))])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Korzystanie z modułów"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Importowanie"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "posix\n",
      "Nazwa uzytkownika: tomaszd\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "print(os.name)\n",
    "\n",
    "from os import getenv\n",
    "print('Nazwa uzytkownika: {}'.format(getenv(\"USER\")))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Counter({'o': 4, 'n': 4, 'a': 4, 'k': 3, 't': 3, 'y': 2, 'i': 2, 'c': 2, 'z': 2, 's': 1, 'p': 1, 'l': 1, 'ń': 1, 'w': 1, 'e': 1})\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[ 1.,  3.,  4.,  5.]], dtype=float32)"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from collections import *\n",
    "print(Counter(\"konstantynopolitańczykowianeczka\"))\n",
    "\n",
    "import numpy as np\n",
    "np.array([[1, 3, 4, 5]], dtype='float32')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Instalacja\n",
    "\n",
    " * lokalnie (per użytkownik) lub globalnie\n",
    " * pyCharm lub linia komend, np. ``pip install --user flask`` lub ``python -m pip install --user flask``"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Wczytywanie z klawiatury"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "What's your name?\n",
      "Tomasz\n",
      "Welcome home, Tomasz.\n"
     ]
    }
   ],
   "source": [
    "name = input(\"What's your name?\\n\")\n",
    "print(\"Welcome home, {}.\".format(name))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [],
   "source": [
    "liczby = eval(input(\"Podaj liczby\"))\n",
    "print(sum(liczby))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Slideshow",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}