Compare commits

...

10 Commits

Author SHA1 Message Date
s45160
bfae3fa2c2 zadania z zajec 16-17.12.2017 2017-12-25 12:08:16 +01:00
s45160
8bff1e02b1 Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-16 09:05:36 +01:00
s45160
963a52dfc9 zadania z zajec 02-03.12.2017 2017-12-10 15:12:51 +01:00
s45160
b220d146da Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-03 13:36:48 +01:00
s45160
2c48227e49 zajecia 02.12.2017 2017-12-02 15:42:37 +01:00
s45160
1e4aea4ff3 python scripts - github repository 2017-12-02 15:27:46 +01:00
s45160
733f26b9c7 python scripts - github repository 2017-12-02 15:12:31 +01:00
s45160
694c10f993 update all tasks 2017-11-19 15:45:22 +01:00
s45160
fc40cd3b02 update all tasks 2017-11-19 15:44:36 +01:00
s45160
2d671ed2d6 update test task 2017-11-19 14:52:33 +01:00
37 changed files with 363 additions and 74 deletions

11
.idea/Python2017.iml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

4
.idea/misc.xml Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6.2 (C:\software\python3\python.exe)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Python2017.iml" filepath="$PROJECT_DIR$/.idea/Python2017.iml" />
</modules>
</component>
</project>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" /> <mapping directory="" vcs="Git" />
<mapping directory="$PROJECT_DIR$/labs03/python-scripts" vcs="Git" />
</component> </component>
</project> </project>

View File

@ -7,7 +7,7 @@ która zawiera tylko elementy z list o parzystych indeksach.
""" """
def even_elements(lista): def even_elements(lista):
pass return lista[::2]
def tests(f): def tests(f):

View File

@ -6,7 +6,10 @@
""" """
def days_in_year(days): def days_in_year(days):
pass if days % 4 == 0 and days % 100 != 0 or days % 400 == 0:
return 366
else:
return 365
def tests(f): def tests(f):
inputs = [[2015], [2012], [1900], [2400], [1977]] inputs = [[2015], [2012], [1900], [2400], [1977]]

View File

@ -13,7 +13,12 @@ jak 'set', która przechowuje elementy bez powtórzeń.)
def oov(text, vocab): def oov(text, vocab):
pass wynik = set()
for wyraz in text.split(' '):
if wyraz.lower() not in vocab:
wynik.add(wyraz.lower())
return wynik

View File

@ -7,7 +7,13 @@ Jeśli podany argument jest mniejszy od 1 powinna być zwracana wartość 0.
""" """
def sum_from_one_to_n(n): def sum_from_one_to_n(n):
pass wynik = 0
if n < 1:
return 0
else:
for i in range(n):
wynik += (i+1)
return wynik
def tests(f): def tests(f):

View File

@ -10,7 +10,7 @@ np. odległość pomiędzy punktami (0, 0, 0) i (3, 4, 0) jest równa 5.
""" """
def euclidean_distance(x, y): def euclidean_distance(x, y):
pass return ((x[0]-y[0])**2 + (x[1]-y[1])**2 + (x[2]-y[2])**2)**0.5
def tests(f): def tests(f):
inputs = [[(2.3, 4.3, -7.5), (2.3, 8.5, -7.5)]] inputs = [[(2.3, 4.3, -7.5), (2.3, 8.5, -7.5)]]

View File

@ -10,7 +10,10 @@ ma być zwracany napis "It's not a Big 'No!'".
""" """
def big_no(n): def big_no(n):
pass if n < 5:
return "It's not a Big 'No!'"
else:
return "N" + n*"O" + "!"
def tests(f): def tests(f):
inputs = [[5], [6], [2]] inputs = [[5], [6], [2]]

View File

@ -6,7 +6,10 @@ Napisz funkcję char_sum, która dla zadanego łańcucha zwraca
sumę kodów ASCII znaków. sumę kodów ASCII znaków.
""" """
def char_sum(text): def char_sum(text):
pass wynik = 0
for litera in text:
wynik += ord(litera)
return wynik
def tests(f): def tests(f):
inputs = [["this is a string"], ["this is another string"]] inputs = [["this is a string"], ["this is another string"]]

View File

@ -7,7 +7,14 @@ przez 3 lub 5 mniejszych niż n.
""" """
def sum_div35(n): def sum_div35(n):
pass wynik = 0
if n<0:
return 0
else:
for i in range(n):
if i % 3 == 0 or i % 5 == 0:
wynik += i
return wynik
def tests(f): def tests(f):
inputs = [[10], [100], [3845]] inputs = [[10], [100], [3845]]

View File

@ -9,7 +9,18 @@ Np. leet('leet') powinno zwrócić '1337'.
def leet_speak(text): def leet_speak(text):
pass text = text.lower()
text = text.replace('o', '0')
text = text.replace('l', '1')
text = text.replace('z', '2')
text = text.replace('e', '3')
text = text.replace('h', '4')
text = text.replace('s', '5')
text = text.replace('g', '6')
text = text.replace('t', '7')
text = text.replace('b', '8')
return text
def tests(f): def tests(f):

View File

@ -9,7 +9,16 @@ na wielką. Np. pokemon_speak('pokemon') powinno zwrócić 'PoKeMoN'.
def pokemon_speak(text): def pokemon_speak(text):
pass wynik = []
indeks = 0
for litera in text:
if indeks % 2 == 0:
wynik.append(litera.upper())
else:
wynik.append(litera)
indeks += 1
return ''.join(wynik)
def tests(f): def tests(f):

View File

@ -9,7 +9,13 @@ Oba napisy będą składać się wyłacznie z małych liter.
""" """
def common_chars(string1, string2): def common_chars(string1, string2):
pass common = []
for lit in string1:
if lit in string2 and lit != ' ':
common.append(lit)
common = list(set(common))
common.sort()
return common
def tests(f): def tests(f):

View File

@ -1,21 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def suma(a, b):
"""
Napisz funkcję, która zwraca sumę elementów.
"""
return a + b
def tests(f):
inputs = [(2, 3), (0, 0), (1, 1)]
outputs = [5, 0, 2]
for input, output in zip(inputs, outputs):
if f(*input) != output:
return "ERROR: {}!={}".format(f(*input), output)
break
return "TESTS PASSED"
print(tests(suma))

View File

@ -232,13 +232,13 @@
{ {
"ename": "TypeError", "ename": "TypeError",
"evalue": "unhashable type: 'list'", "evalue": "unhashable type: 'list'",
"output_type": "error",
"traceback": [ "traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\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;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'" "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'list'"
] ],
"output_type": "error"
} }
], ],
"source": [ "source": [
@ -398,13 +398,13 @@
{ {
"ename": "ValueError", "ename": "ValueError",
"evalue": "I/O operation on closed file.", "evalue": "I/O operation on closed file.",
"output_type": "error",
"traceback": [ "traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\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;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." "\u001b[0;31mValueError\u001b[0m: I/O operation on closed file."
] ],
"output_type": "error"
} }
], ],
"source": [ "source": [

View File

@ -3,10 +3,13 @@
## Zadania ## Zadania
**ćwiczenie 0** **ćwiczenie 0**
Sklonuj repozytorium ``https://github.com/realpython/python-scripts``, które różne, przydatne skrypty. Przejrzyj je i zobacz na ile jesteś w stanie zrozumieć co i jak robią. Uruchom kilka z nich, np. ``27_send_sms.py``. Sklonuj repozytorium ``https://github.com/realpython/python-scripts``, które różne, przydatne skrypty. Przejrzyj je i
zobacz na ile jesteś w stanie zrozumieć co i jak robią. Uruchom kilka z nich, np. ``27_send_sms.py``.
**ćwiczenie 1** **ćwiczenie 1**
Każdy obiekt w Pythonie na wbudowaną funkcję ``id()``, która zwraca liczbę, która jest unikatowa i stała dla obiektu. Pozwala ona w prosty sposób sprawdzić, który obiekt jest *mutable*a, który *immutable*: jeżeli po wykonaniu operacji, zwracana liczba jest stała, to oznacza, że obiekt jest *mutable*. Sprawdź zachowanie funkcji na obiektach typy: Każdy obiekt w Pythonie na wbudowaną funkcję ``id()``, która zwraca liczbę, która jest unikatowa i stała dla obiektu.
Pozwala ona w prosty sposób sprawdzić, który obiekt jest *mutable*a, który *immutable*: jeżeli po wykonaniu operacji,
zwracana liczba jest stała, to oznacza, że obiekt jest *mutable*. Sprawdź zachowanie funkcji na obiektach typy:
* lista, * lista,
* napis (string), * napis (string),
* liczba zmiennoprzecinkowa. * liczba zmiennoprzecinkowa.
@ -27,7 +30,10 @@ Zainstaluj bibliotekę ``weather-api`` (https://pypi.python.org/pypi/weather-api
* Korzystając z prognozy, znajdź dzień, w którym będzie najzimniej. Wypisz nazwę tygodnia (w języku polskim) i temperaturę w C. * Korzystając z prognozy, znajdź dzień, w którym będzie najzimniej. Wypisz nazwę tygodnia (w języku polskim) i temperaturę w C.
**ćwiczenie 5** **ćwiczenie 5**
Katalog scores zawiera 64 pliki tekstowe, które posiadają informacje o wysokości miary ``BLEU`` na różnych etapach trenowania modelu. Nazwa każdego pliku na postać ``model.iterXXXXXXX.npz.bleu``, gdzie ``XXXXXXX``, to liczba iteracji.Zawartość każdego pliku jest podobna i ma następującą formę: *BLEU = YY.YY, 44.4/18.5/9.3/5.0 (BP=1.000, ratio=1.072, hyp_len=45976, ref_len=42903)*, gdzie ``YY.YY`` to wartość miary ``BLEU``. Znajdź plik, który zawiera najwyższą wartość miary ``BLEU``. Katalog scores zawiera 64 pliki tekstowe, które posiadają informacje o wysokości miary ``BLEU`` na różnych etapach trenowania modelu.
Nazwa każdego pliku na postać ``model.iterXXXXXXX.npz.bleu``, gdzie ``XXXXXXX``, to liczba iteracji.Zawartość każdego pliku jest
podobna i ma następującą formę: *BLEU = YY.YY, 44.4/18.5/9.3/5.0 (BP=1.000, ratio=1.072, hyp_len=45976, ref_len=42903)*,
gdzie ``YY.YY`` to wartość miary ``BLEU``. Znajdź plik, który zawiera najwyższą wartość miary ``BLEU``.
* Wykorzystaj bibliotekę ``glob`` (https://docs.python.org/2/library/glob.html) * Wykorzystaj bibliotekę ``glob`` (https://docs.python.org/2/library/glob.html)
* Wyświetl tylko pełną nazwe pliku (wraz z ścieżką). * Wyświetl tylko pełną nazwe pliku (wraz z ścieżką).

12
labs03/task00.py Normal file
View File

@ -0,0 +1,12 @@
import requests
message = input('Enter a Message: ')
number = input('Enter the phone number: ')
payload = {'number': number, 'message': message}
r = requests.post("http://textbelt.com/text", data=payload)
if r.json()['success']:
print('Success!')
else:
print('Error!')

8
labs03/task01.py Normal file
View File

@ -0,0 +1,8 @@
lista = [1,2,3]
string = 'abc'
liczba = 4.55
print(id(lista))
print(id(string))
print(id(liczba))

16
labs03/task02.py Normal file
View File

@ -0,0 +1,16 @@
def Fibonacci(x):
for i in range(x):
if i==0 or i == 1:
a = 1
b = 1
yield 1
else:
temp = a
a += b
b = temp
yield a
nr = 5
for c in Fibonacci(nr):
print(c)

8
labs03/task03.py Normal file
View File

@ -0,0 +1,8 @@
from requests import get
from json import loads
plik = get('https://api.fixer.io/latest')
plik_json = loads(plik.text)
waluta = 'PLN'
print(plik_json['rates'][waluta])

16
labs03/task04.py Normal file
View File

@ -0,0 +1,16 @@
from weather import Weather
weather = Weather()
lookup = weather.lookup_by_location("Poznan")
astronomy = lookup.astronomy()
atmosphere = lookup.atmosphere()
condition = lookup.condition()
units = lookup.units()
wind = lookup.wind()
print(astronomy)
print(atmosphere)
print(condition.text())
print(units)
print(wind)

20
labs03/task05.py Normal file
View File

@ -0,0 +1,20 @@
from glob import glob
iteracje = 0
for plik in glob('scores/model.iter*.npz.bleu'):
with open(plik,'r') as otwarty_plik:
fl = otwarty_plik.readline()
current_bleu = float(fl[fl.find("=")+1:fl.find(",")])
if iteracje == 0:
max_bleu = current_bleu
max_bleu_file = plik
else:
if current_bleu > max_bleu:
max_bleu = current_bleu
max_bleu_file = plik
iteracje += 1
otwarty_plik.close()
print(max_bleu_file)

View File

@ -309,13 +309,13 @@
{ {
"ename": "AttributeError", "ename": "AttributeError",
"evalue": "'Parser' object has no attribute '__parse'", "evalue": "'Parser' object has no attribute '__parse'",
"output_type": "error",
"traceback": [ "traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-6-80ee186598d3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__parse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m<ipython-input-6-80ee186598d3>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParser\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mparser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__parse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m: 'Parser' object has no attribute '__parse'" "\u001b[0;31mAttributeError\u001b[0m: 'Parser' object has no attribute '__parse'"
] ],
"output_type": "error"
} }
], ],
"source": [ "source": [
@ -465,13 +465,13 @@
{ {
"ename": "FileNotFoundError", "ename": "FileNotFoundError",
"evalue": "[Errno 2] No such file or directory: 'nieistniejący_plik.txt'", "evalue": "[Errno 2] No such file or directory: 'nieistniejący_plik.txt'",
"output_type": "error",
"traceback": [ "traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-20-41928d542bef>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"nieistniejący_plik.txt\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplik\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \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[0;32m<ipython-input-20-41928d542bef>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mwith\u001b[0m \u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"nieistniejący_plik.txt\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplik\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \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[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'nieistniejący_plik.txt'" "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'nieistniejący_plik.txt'"
] ],
"output_type": "error"
} }
], ],
"source": [ "source": [
@ -614,13 +614,13 @@
{ {
"ename": "MyError", "ename": "MyError",
"evalue": "Coś poszło nie tak!", "evalue": "Coś poszło nie tak!",
"output_type": "error",
"traceback": [ "traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mMyError\u001b[0m Traceback (most recent call last)", "\u001b[0;31mMyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-36-4fb306b42ebc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Coś poszło nie tak!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m<ipython-input-36-4fb306b42ebc>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mMyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Coś poszło nie tak!\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mMyError\u001b[0m: Coś poszło nie tak!" "\u001b[0;31mMyError\u001b[0m: Coś poszło nie tak!"
] ],
"output_type": "error"
} }
], ],
"source": [ "source": [

View File

@ -1,18 +1,26 @@
**ćwiczenie 1** **ćwiczenie 1**
Napisz funckję ``is_numeric``, która sprawdzi, czy każdy element z przekazanej listy jest typu int lub float. Wykorzystaj funcję ``isinstance()`` (https://docs.python.org/2/library/functions.html#isinstance). Napisz funckję ``is_numeric``, która sprawdzi, czy każdy element z przekazanej listy jest typu int lub float.
Wykorzystaj funcję ``isinstance()`` (https://docs.python.org/2/library/functions.html#isinstance).
**ćwiczenie 2** **ćwiczenie 2**
Napisz prostą hierarchię klas: Napisz prostą hierarchię klas:
* Klasa bazowa ``Employee``, która będzie zawierać informacje o imieniu i nazwisku pracownika. Ponadto każdy pracownik otrzyma numer ``id``, który będzie unikatowy. Wykorzystaj do tego atrybut statyczny. Napisz metodę ``get_id``, która zwraca identyfikator pracownika. * Klasa bazowa ``Employee``, która będzie zawierać informacje o imieniu i nazwisku pracownika.
* Klasy pochodna: ``Recruiter``, która ma dodatkową mtodę ``recruit``, która jako parament przyjmuje obiekt ``Employee`` i zapisuje jego ``id`` w liście ``self.recruited``. Ponadto każdy pracownik otrzyma numer ``id``, który będzie unikatowy. Wykorzystaj do tego atrybut statyczny.
* Klasa pochodna ``Programmer``. Klasa ``Programmer`` ma przyjąć w konstruktorze podstawowe informacje (imię i nazwisko) oraz obiekt rekturera. Ponadto stwórz atrybut ``recruiter``, który będzie przechowywać ``id`` rekrutera. Napisz metodę ``get_id``, która zwraca identyfikator pracownika.
* Klasy pochodna: ``Recruiter``, która ma dodatkową mtodę ``recruit``, która jako parament przyjmuje obiekt ``Employee``
i zapisuje jego ``id`` w liście ``self.recruited``.
* Klasa pochodna ``Programmer``. Klasa ``Programmer`` ma przyjąć w konstruktorze podstawowe informacje (imię i nazwisko)
oraz obiekt rekturera. Ponadto stwórz atrybut ``recruiter``, który będzie przechowywać ``id`` rekrutera.
**ćwiczenie 3 (zadanie domowe) ** **ćwiczenie 3 (zadanie domowe) **
Stwórz klasę ``Point``, która będzie reprezentować punkt w przestrzeni wielowymiarowej: Stwórz klasę ``Point``, która będzie reprezentować punkt w przestrzeni wielowymiarowej:
* Konstruktor ma przyjąc tylko 1 parametr: listę współrzednych. Wykorzystaj funkcję z pierwszego zadania, żeby sprawdzić, czy lista zawiera wyłącznie liczby. * Konstruktor ma przyjąc tylko 1 parametr: listę współrzednych. Wykorzystaj funkcję z pierwszego zadania,
* Napisz metodę add, która dida dwa punkty po współrzędnych i zwróci obiekt typu ``Punkt``. Zaimplementuj własny wyjątek ``DimensionError``, który zostaje wyrzucony, jeżeli dodawany punkt ma inny wymiar. żeby sprawdzić, czy lista zawiera wyłącznie liczby.
* Napisz metodę add, która dida dwa punkty po współrzędnych i zwróci obiekt typu ``Punkt``.
Zaimplementuj własny wyjątek ``DimensionError``, który zostaje wyrzucony, jeżeli dodawany punkt ma inny wymiar.
* Napisz metodę ``to\_string``, która zwróci łancuch znakowy, który w czytelny sposób przedstawi punkt. * Napisz metodę ``to\_string``, która zwróci łancuch znakowy, który w czytelny sposób przedstawi punkt.
* Napisz metodę __len__, która zwróci liczbę współrzędnych punktu. Zobacz, czy możesz teraz wywołać funkcję len na obiekcie typy punkt. * Napisz metodę __len__, która zwróci liczbę współrzędnych punktu. Zobacz, czy możesz teraz wywołać funkcję len na obiekcie typy punkt.
* Napisz metodę __str__, która bedzie działać dokładnie tak samo jak metoda ``to_string``. Wyświetl obiekt typy Point korzystając z funkcji print. * Napisz metodę __str__, która bedzie działać dokładnie tak samo jak metoda ``to_string``. Wyświetl obiekt typy Point
korzystając z funkcji print.

View File

@ -1,3 +1,12 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
def is_numeric(a):
for i in a:
if not(isinstance(i,int)) and not(isinstance(i,float)):
return False
return True
print(is_numeric([10,20,30]))
print(is_numeric([10.9,20.4,30]))
print(is_numeric(['abc','def',10]))

View File

@ -1,3 +1,40 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
class Employee:
_ID=1
def __init__(self, imie, nazwisko):
self.imie = imie
self.nazwisko = nazwisko
self.id = self._ID
self.__class__._ID += 1
def get_id(self):
return self.id
class Recruiter(Employee):
recruited = []
def recruit(self, Employee):
self.recruited.append(Employee.get_id())
class Programmer(Employee):
def __init__(self, imie, nazwisko, Recruiter):
Employee._ID += 1
super().__init__(imie, nazwisko)
self.recruiter = Recruiter.id
pracownik = Employee("Jan","Nowak")
pracownik2 = Employee("Adam","Kowalski")
pracownik3 = Employee("Piotr","Adolfowski")
print(pracownik.get_id(),pracownik2.get_id(),pracownik3.get_id())
rekruter = Recruiter("Andrzej","Mściszewski")
rekruter.recruit(pracownik)
print(rekruter.id, rekruter.imie, rekruter.nazwisko, rekruter.recruited)
programista = Programmer("Bill", "Gates", rekruter)
print(programista.id, programista.imie, programista.nazwisko, programista.recruiter)

View File

@ -1,3 +1,40 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import operator
def is_numeric(a):
for i in a:
if not(isinstance(i,int)) and not(isinstance(i,float)):
return False
return True
def add(punkt1, punkt2):
if len(punkt1.wspolrzedne) == len(punkt2.wspolrzedne):
return Point(list(map(operator.add,punkt1.wspolrzedne,punkt2.wspolrzedne)))
else:
raise Exception("Dimension error")
class Point:
wspolrzedne = []
def __init__(self,wspolrzedne):
if is_numeric(wspolrzedne):
self.wspolrzedne = wspolrzedne
def to_string(self):
return "Współrzędne punktu to: " + str(self.wspolrzedne)
def __len__(self):
return len(self.wspolrzedne)
def __str__(self):
return self.to_string()
punkt = Point([0,1,2])
punkt2 = Point([10,15,20])
punkt3 = add(punkt,punkt2)
#punkt4 = add(punkt,Point([10,20]))
print(punkt.wspolrzedne, punkt2.wspolrzedne, punkt3.wspolrzedne)#, punkt4.wspolrzedne)
print(punkt.to_string())
print(punkt3)

View File

@ -125,7 +125,7 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 5, "execution_count": null,
"metadata": { "metadata": {
"slideshow": { "slideshow": {
"slide_type": "fragment" "slide_type": "fragment"

View File

@ -2,16 +2,20 @@
Napisz funkcję ``suma``, która przyjmnie jeden argument: listę liczb i zwróci ich sumę. Napisz funkcję ``suma``, która przyjmnie jeden argument: listę liczb i zwróci ich sumę.
** zad. 1 ** ** 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. 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 ** ** 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ą. 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 ** ** zad. 3 **
Przekształć rozwiązanie zadania drugiego w taki sposob, żeby korzystało z biblioteki ``argparse`` zamiast z z listy ``sys.argv``. Przekształć rozwiązanie zadania drugiego w taki sposob, żeby korzystało z biblioteki ``argparse`` zamiast z z listy ``sys.argv``.
** zad. 4 (Domowe) ** ** 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: 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. * 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 `-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 `-w`, to to ma zostać zwrócona tylko liczba słów.

View File

@ -1,11 +1,21 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys
def suma(liczby): def suma(liczby):
pass suma_liczb = 0
for i in liczby:
try:
suma_liczb += float(i)
except:
suma_liczb += 0
return suma_liczb
def main(): def main():
print(summa([1, 2, 3, 4])) print(suma([1, 2, 3, 4]))
if __name__ == "__main__": if __name__ == "__main__":
main() main()
else:
suma(sys.argv[1:])

View File

@ -0,0 +1,3 @@
import task00
print(task00.suma([5.2,3.4,4.5]))

View File

@ -0,0 +1,3 @@
import task00
print(task00.suma(['def',3.4,4.5]))

View File

@ -4,13 +4,18 @@
Sprawdź, czy masz zainstalowany pakiet ``pandas``. Jeżeli nie, zainstaluj go. Sprawdź, czy masz zainstalowany pakiet ``pandas``. Jeżeli nie, zainstaluj go.
** zad. 2 (domowe) ** ** zad. 2 (domowe) **
Jest to zadanie złożone, składające się z kilku części. Całość będzie opierać się o dane zawarte w pliku *mieszkania.csv* i dotyczą cen mieszkań w Poznaniu kilka lat temu. Jest to zadanie złożone, składające się z kilku części. Całość będzie opierać się o dane zawarte w pliku *mieszkania.csv* i dotyczą cen mieszkań
w Poznaniu kilka lat temu.
1, Otwórz plik ``task02.py``, który zawiera szkielet kodu, który będziemy rozwijać w tym zadaniu. 1, Otwórz plik ``task02.py``, który zawiera szkielet kodu, który będziemy rozwijać w tym zadaniu.
1. Napisz funkcje, która wczyta zestaw danych z pliku *mieszkania.csv* i zwróci obiekt typu *DataFrame*. Jeżeli wszystko zostało zrobione poprawnie, powinno się wyśtwietlić 5 pierwszych wierszy. 1. Napisz funkcje, która wczyta zestaw danych z pliku *mieszkania.csv* i zwróci obiekt typu *DataFrame*.
1. Uzupełnij funkcję ``most_common_room_number``, która zwróci jaka jest najpopularniejsza liczba pokoi w ogłoszeniach. Funkcji powinna zwrócić liczbę całkowitą. Jeżeli wszystko zostało zrobione poprawnie, powinno się wyśtwietlić 5 pierwszych wierszy.
1. Uzupełnij funkcję ``most_common_room_number``, która zwróci jaka jest najpopularniejsza liczba pokoi w ogłoszeniach.
Funkcji powinna zwrócić liczbę całkowitą.
1. Uzupełnij kod w funkcji ``cheapest_flats(dane, n)``, która wzróci *n* najtańszych ofert mieszkań. Wzrócony obiekt typu ``DataFrame``. 1. Uzupełnij kod w funkcji ``cheapest_flats(dane, n)``, która wzróci *n* najtańszych ofert mieszkań. Wzrócony obiekt typu ``DataFrame``.
1. Napisz funkcje ``find_borough(desc)``, która przyjmuje 1 argument typu *string* i zwróci jedną z dzielnic zdefiniowaną w liście ``dzielnice``. Funkcja ma zwrócić pierwszą (wzgledem kolejności) nazwę dzielnicy, która jest zawarta w ``desc``. Jeżeli żadna nazwa nie została odnaleziona, zwróć *Inne*. 1. Napisz funkcje ``find_borough(desc)``, która przyjmuje 1 argument typu *string* i zwróci jedną z dzielnic zdefiniowaną w liście ``dzielnice``.
1. Dodaj kolumnę ``Borough``, która będzie zawierać informacje o dzielnicach i powstanie z kolumny ``Localization``. Wykorzystaj do tego funkcję ``find_borough``. Funkcja ma zwrócić pierwszą (wzgledem kolejności) nazwę dzielnicy, która jest zawarta w ``desc``. Jeżeli żadna nazwa nie została odnaleziona, zwróć *Inne*.
1. Dodaj kolumnę ``Borough``, która będzie zawierać informacje o dzielnicach i powstanie z kolumny ``Localization``.
Wykorzystaj do tego funkcję ``find_borough``.
1. Uzupełnił funkcje ``write_plot``, która zapisze do pliku ``filename`` wykres słupkowy przedstawiający liczbę ogłoszeń mieszkań z podziałem na dzielnice. 1. Uzupełnił funkcje ``write_plot``, która zapisze do pliku ``filename`` wykres słupkowy przedstawiający liczbę ogłoszeń mieszkań z podziałem na dzielnice.
1. Napisz funkcje ``mean_price``, która zwróci średnią cenę mieszkania ``room_numer``-pokojowego. 1. Napisz funkcje ``mean_price``, która zwróci średnią cenę mieszkania ``room_numer``-pokojowego.
1. Uzupełnij funkcje ``find_13``, która zwróci listę dzielnic, które zawierają ofertę mieszkanie na 13 piętrze. 1. Uzupełnij funkcje ``find_13``, która zwróci listę dzielnic, które zawierają ofertę mieszkanie na 13 piętrze.

View File

@ -1,14 +1,22 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
def wczytaj_dane(): def wczytaj_dane():
pass dane = pd.read_csv('mieszkania.csv',
sep=',',
encoding='utf-8')
return dane
def most_common_room_number(dane): def most_common_room_number(dane):
pass return dane.Rooms.mode()[0]
def cheapest_flats(dane, n): def cheapest_flats(dane, n):
pass dane = dane.sort_values('Expected',ascending=True)
return dane.head(n)
def find_borough(desc): def find_borough(desc):
dzielnice = ['Stare Miasto', dzielnice = ['Stare Miasto',
@ -19,23 +27,35 @@ def find_borough(desc):
'Winogrady', 'Winogrady',
'Miłostowo', 'Miłostowo',
'Dębiec'] 'Dębiec']
pass
for dzielnica in dzielnice:
if desc.find(dzielnica)>=0:
return dzielnica
return 'Inne'
def add_borough(dane): def add_borough(dane):
pass borough = []
for current_location in dane:
borough.append(find_borough(current_location))
return pd.Series(borough)
def write_plot(dane, filename): def write_plot(dane, filename):
pass dane['Borough'].hist()
plt.savefig(filename)
def mean_price(dane, room_number): def mean_price(dane, room_number):
pass dane = dane[dane.Rooms == room_number]
return round(dane.Expected.mean(),2)
def find_13(dane): def find_13(dane):
pass dane = dane[dane.Floor == 13]
return list(dane.Borough)
def find_best_flats(dane): def find_best_flats(dane):
pass dane = dane[(dane.Borough=='Winogrady') & (dane.Rooms==3) & (dane.Floor == 1)]
return dane
def main(): def main():
dane = wczytaj_dane() dane = wczytaj_dane()
@ -44,11 +64,22 @@ def main():
print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}" print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}"
.format(most_common_room_number(dane))) .format(most_common_room_number(dane)))
najtansze = cheapest_flats(dane,10)
print("{} to najłądniejsza dzielnica w Poznaniu." print("{} to najłądniejsza dzielnica w Poznaniu."
.format(find_borough("Grunwald i Jeżyce")))) .format(find_borough("Grunwald i Jeżyce")))
dzielnice = add_borough(dane['Location'])
dane['Borough'] = dzielnice.values
write_plot(dane,'wykres.png')
print("Średnia cena mieszkania 3-pokojowego, to: {}" print("Średnia cena mieszkania 3-pokojowego, to: {}"
.format(mean_price(dane, 3))) .format(mean_price(dane, 3)))
find_13(dane)
find_best_flats(dane)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

BIN
labs06/wykres.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB