Add labs 05
This commit is contained in:
parent
2f2b963402
commit
4212fd35a1
297
labs05/Lab05.ipynb
Normal file
297
labs05/Lab05.ipynb
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"# Python: część 3\n",
|
||||||
|
"\n",
|
||||||
|
"## Tomasz Dwojak\n",
|
||||||
|
"\n",
|
||||||
|
"### 16 grudnia 2017"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"## Co już było?\n",
|
||||||
|
" * podstawowe typy i struktury danych\n",
|
||||||
|
" * funkcje\n",
|
||||||
|
" * biblioteki\n",
|
||||||
|
" * klasy\n",
|
||||||
|
" * praca z plikami\n",
|
||||||
|
" * wyjątki"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"# Co na dziś?\n",
|
||||||
|
" * Dzielenie kodu na pliki\n",
|
||||||
|
" * Podstawy analizy danych: Pandas"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"## Dzielenie kodu\n",
|
||||||
|
"\n",
|
||||||
|
" * Zwiększenie jakości kodu\n",
|
||||||
|
" * Napisz raz i korzystaj w wielu sytuacjach\n",
|
||||||
|
" * Tworzenie własnej biblioteki"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"## Dzielenie kodu - podsumowanie\n",
|
||||||
|
" * import\n",
|
||||||
|
" * ``if __name__ == '__main__'``\n",
|
||||||
|
" * Pakiety i pliki ``__init__.py``\n",
|
||||||
|
" * zmienna PYTHONPATH i ``sys.path``"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"# Interpreter Pythona"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"# Jupyter notebook"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"## Argumenty do programu\n",
|
||||||
|
"\n",
|
||||||
|
" * czy potrzebujemy pyCharm żeby uruchomić prosty skrypt?"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"### sys.argv\n",
|
||||||
|
" * zawiera liste wszystkich argumentów\n",
|
||||||
|
" * pierwszy element zawiera nazwe pliku"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 5,
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "fragment"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"['/usr/lib/python2.7/site-packages/ipykernel/__main__.py', '-f', '/run/user/1000/jupyter/kernel-7efdb6ca-75d5-474e-90c4-fda3dadc3282.json']\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"import sys\n",
|
||||||
|
"print(sys.argv)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": [
|
||||||
|
"### Biblioteka argparse"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "fragment"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import argparse\n",
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.parse_args()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.add_argument(\"number\", help=\"Opis\")\n",
|
||||||
|
"args = parser.parse_args()\n",
|
||||||
|
"print(args.number)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.add_argument(\"number\", help=\"Opis\", nargs=\"+\")\n",
|
||||||
|
"args = parser.parse_args()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.add_argument(\"--verbosity\", help=\"increase output verbosity\")\n",
|
||||||
|
"args = parser.parse_args()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.add_argument(\"--verbose\", help=\"increase output verbosity\",\n",
|
||||||
|
" action=\"store_true\")\n",
|
||||||
|
"args = parser.parse_args()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.add_argument(\"-v\", \"--verbose\", help=\"increase output verbosity\",\n",
|
||||||
|
" action=\"store_true\")\n",
|
||||||
|
"args = parser.parse_args()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {
|
||||||
|
"collapsed": true,
|
||||||
|
"slideshow": {
|
||||||
|
"slide_type": "slide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"parser = argparse.ArgumentParser()\n",
|
||||||
|
"parser.add_argument(\"-v\", \"--verbose\", help=\"increase output verbosity\",\n",
|
||||||
|
" action=\"store_true\")\n",
|
||||||
|
"parser.add_argument(\"number\", help=\"Opis\", nargs=\"+\")\n",
|
||||||
|
"args = parser.parse_args()"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"celltoolbar": "Slideshow",
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 2",
|
||||||
|
"language": "python2",
|
||||||
|
"name": "python2"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython2",
|
||||||
|
"version": "2.7.14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
20
labs05/README.md
Normal file
20
labs05/README.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
** zad. 0 **
|
||||||
|
Napisz funkcję ``suma``, która przyjmnie jeden argument: listę liczb i zwróci ich sumę.
|
||||||
|
|
||||||
|
** zad. 1 **
|
||||||
|
Zaimportuj z zadania 0 fukcje ``suma``. Korzystając z tej fukcji i tablicy ``sys.argv`` oblicz i wyświetl sumę argumentów, jakie zostały przekazane do proramu. Załóź, że argumentami do programu będą tylko liczby zmiennoprzecinkowe.
|
||||||
|
|
||||||
|
** zad. 2 **
|
||||||
|
Uodpornoj program z zad. 1 w następujący sposób: do programu mogą zostać przekazane argumenty, które nie mają wartości liczbowej (przyjmijmy, że ich wartość to 0). Skorzystaj z mechanizmu wyjątków: złap wyjątek, jeżeli argumenty nie da się skonwertować na liczbę zmiennoprzecinkową.
|
||||||
|
|
||||||
|
** zad. 3 **
|
||||||
|
Przekształć rozwiązanie zadania drugiego w taki sposob, żeby korzystało z biblioteki ``argparse`` zamiast z z listy ``sys.argv``.
|
||||||
|
|
||||||
|
** zad. 4 (Domowe) **
|
||||||
|
Plik ``task04.py`` zawiera kod prorgamu, który działa jak popularne narzędzie unixowe ``wc`` (Word Counter): zlicza liczbę linii, wyrazów i znaków. Aktualnie program potrafi działać wyłącznie na wejściu podanym z klawiatury. Dodaj do niego opcje programu:
|
||||||
|
* domyślnie program ma zliczać na wejściu z klawiatury (stdin) i wyświetlać wszystkie 3 liczby.
|
||||||
|
* Jeżeli został podany przełącznik `-l`, to to ma zostać zwrócona tylko liczba linii.
|
||||||
|
* Jeżeli został podany przełącznik `-w`, to to ma zostać zwrócona tylko liczba słów.
|
||||||
|
* Jeżeli został podany przełącznik `-c`, to to ma zostać zwrócona tylko liczba znaków.
|
||||||
|
* Jeżeli został podany inny argument, to należy założyć że jest to nazwa pliku i potraktować ten plik jako wejście do programu.
|
||||||
|
|
0
labs05/__init__.py
Normal file
0
labs05/__init__.py
Normal file
10
labs05/argparse_min.py
Normal file
10
labs05/argparse_min.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import argparse
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.parse_args()
|
||||||
|
|
||||||
|
""""
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("number", help="Opis")
|
||||||
|
args = parser.parse_args()
|
||||||
|
"""
|
11
labs05/lib.py
Normal file
11
labs05/lib.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
def greetings():
|
||||||
|
print("Pozdrowienia!!!")
|
||||||
|
|
||||||
|
print("SPAM " * 6)
|
||||||
|
print(__name__)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print("Jestem głównym plikiem!")
|
18
labs05/main.py
Normal file
18
labs05/main.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env python2
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import lib
|
||||||
|
import tools.fib
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# sys.path.append("..")
|
||||||
|
# import labs02.task01
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print("Hello World")
|
||||||
|
lib.greetings()
|
||||||
|
print(tools.fib.non_reccurent_fibonacci(50))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
0
labs05/tools/__init__.py
Normal file
0
labs05/tools/__init__.py
Normal file
38
labs05/tools/fib.py
Normal file
38
labs05/tools/fib.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
"""
|
||||||
|
Obliczenie n-tego wyrazu ciągu fibonacciego na dwa sposoby.
|
||||||
|
1. Naiwna rekurencja: podstawienie do wzoru.
|
||||||
|
2. Wersja z cachem: każdy wyraz jest obliczany dokładnie raz.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def naive_fibonacci(n):
|
||||||
|
if n <= 0:
|
||||||
|
return 0
|
||||||
|
if n in [1,2]:
|
||||||
|
return 1
|
||||||
|
return naive_fibonacci(n-1) + naive_fibonacci(n-2)
|
||||||
|
|
||||||
|
|
||||||
|
def cache_fibonacci(n, cache=None):
|
||||||
|
if cache is None:
|
||||||
|
cache = [None for i in range(n+1)]
|
||||||
|
cache[0] = 0
|
||||||
|
cache[1] = cache[2] = 1
|
||||||
|
return cache_fibonacci(n, cache)
|
||||||
|
else:
|
||||||
|
if cache[n] is not None:
|
||||||
|
return cache[n]
|
||||||
|
else:
|
||||||
|
cache[n] = cache_fibonacci(n-1, cache) + cache_fibonacci(n-2, cache)
|
||||||
|
return cache[n]
|
||||||
|
|
||||||
|
def non_reccurent_fibonacci(n):
|
||||||
|
cache = [None for i in range(n+1)]
|
||||||
|
cache[0] = 0
|
||||||
|
cache[1] = cache[2] = 1
|
||||||
|
for i in range(2, n + 1):
|
||||||
|
cache[i] = cache[i-1] + cache[i-2]
|
||||||
|
return cache[n]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user