{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "\n", "\n", "# IB111\n", "## Základy programování\n", "\n", "##### ==František Lachman lachmanfrantisek@mail.muni.cz==\n", "##### cvičení 13\n", "\n", "\n", "###### ==11. prosinec 2017==\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Osnova\n", "\n", "- obrázky\n", "- čtvrtý domácí úkol\n", "- pátý domácí úkol\n", "- závěr semestru\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "\n", "# [Docházka](https://is.muni.cz/auth/ucitel/dochazka?fakulta=1433;obdobi=7403;predmet=1144573;masedleomezsk=500694)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Rozdíl mezi `list` a `tuple`?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Jakou knihovnu používáme na práci z obrázky?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "\n", "# Práce s obrázky" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from PIL import Image" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "width: 400 height: 266\n" ] } ], "source": [ "im = Image.open(\"picture.jpg\").convert(\"RGB\")\n", "width, height = im.size\n", "print(\"width: {} height: {}\".format(width, height))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "im.show()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "im = Image.new(\"RGB\", (width, height))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "r, g, b = im.getpixel((0, 0))\n", "\n", "for i in range(100):\n", " im.putpixel((i, i), (r + 60, g + 60, b + 60))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "im.show()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Příklady" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 12.1.1. Čtverec\n", "\n", "Na bílé pozadí o zadané velikosti nakreslete černý čtverec o zadané straně, jehož střed bude umístěn do středu obrázku." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "slideshow": { "slide_type": "slide" } }, "outputs": [], "source": [ "from PIL import Image\n", "\n", "def square(size=250, a=70):\n", " pass" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### + zkuste další obrazce: kruh, elipsa, spirála, šachovnice" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Příklady na transformace" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 12.2.2. Invertování barev\n", "\n", "Napište funkci, která invertuje barvy v daném obrázku." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def invert_colors(filename):\n", " pass" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### + zkuste další transformace" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 5. Domácí úkol\n", "\n", "- soft-deadline: ==21. 12. 2017==\n", " - zpětná vazba\n", "- hard-deadline: ==28. 12. 2017==\n", "- 40 bodů (+ bonus)\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 1. Želvy\n", "\n", "- Udělejte objektovou implementaci želví grafiky s vykreslováním do SVG (na základě kódů uvedených ve [slidech](https://is.muni.cz/auth/el/1433/podzim2018/IB111/um/obrazky.pdf) k přednášce).\n", "- Implementujte metody:\n", " - `turn_to_turtle(turtle)` pro \"otočení směrem k zadané želvě,\n", " - `line_to_turtle(turtle)` pro \"vykreslení spojnice se zadanou želvou\".\n", "---" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Za využití těchto metod vytvořte zajímavé obrázky (`>=2`), např. následující (první obrázek je \"želví honička\", kdy několik želv honí jednu, druhý obrázek vznikne tak, že dvě želvy jdou po kružnici, jedna jde rychleji než druhá, pravidelně vykreslujeme spojnice, barvy řešit můžete, ale nemusíte).\n", "\n", "![50%](https://www.fi.muni.cz/~xpelanek/IB111/podklady/turtles.png) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "# 2. Black and white\n", "\n", "- Napiště funkci `black_and_white(picture)`, která načte obrázek (uložený na cestě `picture`) a převede jej do černobílé.\n", "- Transformace obdobná příkladům na přednášce, nebo na cvičení.\n", "- Pixel po pixelu.\n", "- Přidejte volitelný parametr na ovlivnění výsledku. \n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 3. zpracování textu (jedna ze dvou možností):\n", "\n", "- **Libovolné využití \"open data\"** ➡ jakákoliv analýza, nebo statistika, která vám přijde zajímavá. K řešení přiložte použitá data a zmiňtě případné potřebné nestandardní balíky.\n", "\n", "- **Imitace textu** ➡ Funkce `lorem_ipsum(text_file)`, která načte textový soubor `text_file` a náhodně vygeneruje a vrátí text, který bude se souborem sdílet několik statistický vlastností, dle vaší volby. (Frekvence písmen/dvojhlásek, průměrná delka slov,..) Generovaný text by měl alespoň vzdáleně připomínat běžný text." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Co Dál?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Navazující kurzy\n", "- OOP\n", "- nízkoúrovňové\n", "- neimperativní\n", "- semináře" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# PYVO - srazy Python programátorů (pyvo.cz)\n", "\n", "- [Brno](https://pyvo.cz/brno-pyvo/) - každý poslední čtvrtek v měsíci\n", "- [Ostrava](https://pyvo.cz/ostrava-pyvo/) - každou první středu v měsíci\n", "- [Praha](https://pyvo.cz/praha-pyvo/) - každou třetí středu v měsíci\n", "\n", "\n", "- [Olomouc](https://pyvo.cz/olomouc-pyvo/) - poslední středa v měsíci (1 z 1 cvičícího doporučuje..;-)\n", "- [Plzeň](https://pyvo.cz/plzen-pyvo/) - druhá středa každý lichý měsíc\n", "- [Liberec](https://pyvo.cz/liberec-pyvo/)\n", "- [Hradec Králové](https://pyvo.cz/hradec-pyvo/)\n", "\n", "\"Krygl\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "\n", "\n", "https://djangogirls.org/prague/\n", "\n", "\n", "\n", "https://pyladies.cz/brno" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ![rh](https://research.redhat.com/wp-content/uploads/2016/05/logo-rh.png) Red Hat Open Source Contest\n", "\n", "\n", "> Are you a university student in Brno? Are you interested in learning about\n", "and becoming active in open source communities? Would you like to win prizes?\n", "You can by participating in the Red Hat Open Source Contest.\n", "\n", "- další běh v únoru\n", "- dobrá možnost praktického seznámení s opensource/programováním (python rozhodně nebude chybět..;-)\n", "- https://research.redhat.com/red-hat-open-source-contest/\n", "- lokální obdoba Google Summer of Code" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Projekty psané v Pythonu\n", "\n", "- Youtube, Dropbox, Google App Engine, Quora, Instagram, Spotify, Reddit, Totalspy, Pinterest, BitBucket, BitTorrent, Blender3D, Civilization IV, Eve Online, Mercurial Source Control, Unity 3D, Anaconda, MusicBrainz Picard, PiTiVi, OpenShot Video Editor, OpenStack, Calibre, Gunicorn, Ubuntu Software Center, yum, dnf, ansible, Bloodhound, ...\n", "\n", "-----\n", "\n", "- skryptování: Autodesk Maya, Blender, FreeCAD, GIMP, Inkscape, Rhythmbox, Rhinoceros 3D, Scribus, ...\n", "- jupyter notebooks/ipython\n", "\n", "---\n", "\n", "- [list of Python software](https://en.wikipedia.org/wiki/List_of_Python_software)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## ![150%](https://pypi.org/static/images/logo-small.6eef541e.svg) PyPI\n", "\n", "- https://pypi.org\n", "- Balíčkovací systém pro Python.\n", "- Windows instalace automaticky.\n", "- 🐧Linux:\n", " - `sudo apt-get install python-pip` \n", " - `sudo dnf install python-pip`\n", "- `pip install youtube-dl`\n", "---" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![100%](https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Django_logo.svg/260px-Django_logo.svg.png)\n", "\n", "- webový framework pro Python\n", "- [materiály django-girls](https://tutorial.djangogirls.org/cs/)\n", "- jednoduché programovaní v pythonu + html/css/javascript" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# ![100%](https://micropython.org/static/img/Mlogo_138wh.png) MicroPython" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pyb\n", "\n", "# turn on an LED\n", "pyb.LED(1).on()\n", "\n", "# print some text to the serial console\n", "print('Hello MicroPython!')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "-" } }, "source": [ "# ![60%](https://micropython.org/static/home/img/pybv11-persp.jpg)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "# ![400%](https://projects.raspberrypi.org/static/media/logomark.20300533.svg) Raspberry PI\n", "\n", "- spousta projektů kolem Pythonu\n", "- https://projects.raspberrypi.org/en/\n", "- https://www.raspberrypi.org/" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![100%](https://git-scm.com/images/logo@2x.png)\n", "\n", "- verzovací systém\n", "- spousta tutoriálů:\n", " - https://git-scm.com/book/cs/v2 (CZ)\n", " - https://www.codecademy.com/learn/learn-git \n", " - https://try.github.io/\n", " - https://learngitbranching.js.org/" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![15%](https://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/GitLab_logo.png/799px-GitLab_logo.png) https://gitlab.fi.muni.cz" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Zpětná vazba (IS)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Opakování na začátku?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Průběh cvičení?\n", "\n", "## - párové programování\n", "## - live-coding\n", "## - obcházení x neotravovat\n", "## - pochopitelnost" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Domácí úlohy (zadání)?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Soft-deadline?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Oprava?\n", "\n", "## - gitlab\n", "## - zmatené x přehledné\n", "## - zpětná vazba dostatečná/vhodná" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Vnitra?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Materiály, prezentace?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Další připomínky?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "---\n", "# Závěr\n", "- Připomínky, aneketa\n", "- Programujte!\n", "- Programujte v Pythonu!\n", "- Pěkné Vánoce!" ] } ], "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.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }