Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
bfae3fa2c2 | ||
|
8bff1e02b1 | ||
|
963a52dfc9 | ||
|
b220d146da | ||
|
2c48227e49 | ||
|
1e4aea4ff3 | ||
|
733f26b9c7 | ||
|
694c10f993 | ||
|
fc40cd3b02 | ||
|
2d671ed2d6 |
11
.idea/Python2017.iml
Normal file
11
.idea/Python2017.iml
Normal 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
4
.idea/misc.xml
Normal 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
8
.idea/modules.xml
Normal 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>
|
@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/labs03/python-scripts" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -7,7 +7,7 @@ która zawiera tylko elementy z list o parzystych indeksach.
|
||||
"""
|
||||
|
||||
def even_elements(lista):
|
||||
pass
|
||||
return lista[::2]
|
||||
|
||||
|
||||
def tests(f):
|
||||
|
@ -6,7 +6,10 @@
|
||||
"""
|
||||
|
||||
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):
|
||||
inputs = [[2015], [2012], [1900], [2400], [1977]]
|
||||
|
@ -13,7 +13,12 @@ jak 'set', która przechowuje elementy bez powtórzeń.)
|
||||
|
||||
|
||||
def oov(text, vocab):
|
||||
pass
|
||||
wynik = set()
|
||||
for wyraz in text.split(' '):
|
||||
if wyraz.lower() not in vocab:
|
||||
wynik.add(wyraz.lower())
|
||||
return wynik
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -7,7 +7,13 @@ Jeśli podany argument jest mniejszy od 1 powinna być zwracana wartość 0.
|
||||
"""
|
||||
|
||||
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):
|
||||
|
@ -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):
|
||||
pass
|
||||
return ((x[0]-y[0])**2 + (x[1]-y[1])**2 + (x[2]-y[2])**2)**0.5
|
||||
|
||||
def tests(f):
|
||||
inputs = [[(2.3, 4.3, -7.5), (2.3, 8.5, -7.5)]]
|
||||
|
@ -10,7 +10,10 @@ ma być zwracany napis "It's not a Big 'No!'".
|
||||
"""
|
||||
|
||||
def big_no(n):
|
||||
pass
|
||||
if n < 5:
|
||||
return "It's not a Big 'No!'"
|
||||
else:
|
||||
return "N" + n*"O" + "!"
|
||||
|
||||
def tests(f):
|
||||
inputs = [[5], [6], [2]]
|
||||
|
@ -6,7 +6,10 @@ Napisz funkcję char_sum, która dla zadanego łańcucha zwraca
|
||||
sumę kodów ASCII znaków.
|
||||
"""
|
||||
def char_sum(text):
|
||||
pass
|
||||
wynik = 0
|
||||
for litera in text:
|
||||
wynik += ord(litera)
|
||||
return wynik
|
||||
|
||||
def tests(f):
|
||||
inputs = [["this is a string"], ["this is another string"]]
|
||||
|
@ -7,7 +7,14 @@ przez 3 lub 5 mniejszych niż 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):
|
||||
inputs = [[10], [100], [3845]]
|
||||
|
@ -9,7 +9,18 @@ Np. leet('leet') powinno zwrócić '1337'.
|
||||
|
||||
|
||||
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):
|
||||
|
@ -9,7 +9,16 @@ na wielką. Np. pokemon_speak('pokemon') powinno zwrócić 'PoKeMoN'.
|
||||
|
||||
|
||||
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):
|
||||
|
@ -9,7 +9,13 @@ Oba napisy będą składać się wyłacznie z małych liter.
|
||||
"""
|
||||
|
||||
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):
|
||||
|
@ -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))
|
@ -232,13 +232,13 @@
|
||||
{
|
||||
"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'"
|
||||
]
|
||||
],
|
||||
"output_type": "error"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
@ -398,13 +398,13 @@
|
||||
{
|
||||
"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."
|
||||
]
|
||||
],
|
||||
"output_type": "error"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
|
@ -3,10 +3,13 @@
|
||||
## Zadania
|
||||
|
||||
**ć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**
|
||||
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,
|
||||
* napis (string),
|
||||
* 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.
|
||||
|
||||
**ć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)
|
||||
* Wyświetl tylko pełną nazwe pliku (wraz z ścieżką).
|
||||
|
||||
|
12
labs03/task00.py
Normal file
12
labs03/task00.py
Normal 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
8
labs03/task01.py
Normal 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
16
labs03/task02.py
Normal 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
8
labs03/task03.py
Normal 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
16
labs03/task04.py
Normal 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
20
labs03/task05.py
Normal 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)
|
@ -309,13 +309,13 @@
|
||||
{
|
||||
"ename": "AttributeError",
|
||||
"evalue": "'Parser' object has no attribute '__parse'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\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;31mAttributeError\u001b[0m: 'Parser' object has no attribute '__parse'"
|
||||
]
|
||||
],
|
||||
"output_type": "error"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
@ -465,13 +465,13 @@
|
||||
{
|
||||
"ename": "FileNotFoundError",
|
||||
"evalue": "[Errno 2] No such file or directory: 'nieistniejący_plik.txt'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\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;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'nieistniejący_plik.txt'"
|
||||
]
|
||||
],
|
||||
"output_type": "error"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
@ -614,13 +614,13 @@
|
||||
{
|
||||
"ename": "MyError",
|
||||
"evalue": "Coś poszło nie tak!",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\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;31mMyError\u001b[0m: Coś poszło nie tak!"
|
||||
]
|
||||
],
|
||||
"output_type": "error"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
|
@ -1,18 +1,26 @@
|
||||
**ć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**
|
||||
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.
|
||||
* 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.
|
||||
* 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.
|
||||
* 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) **
|
||||
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.
|
||||
* 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.
|
||||
* Konstruktor ma przyjąc tylko 1 parametr: listę współrzednych. Wykorzystaj funkcję z pierwszego zadania,
|
||||
ż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ę __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.
|
||||
|
||||
|
||||
|
@ -1,3 +1,12 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- 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]))
|
@ -1,3 +1,40 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- 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)
|
||||
|
||||
|
@ -1,3 +1,40 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- 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)
|
@ -125,7 +125,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"slideshow": {
|
||||
"slide_type": "fragment"
|
||||
|
@ -2,16 +2,20 @@
|
||||
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.
|
||||
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ą.
|
||||
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:
|
||||
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.
|
||||
|
@ -1,11 +1,21 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
|
||||
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():
|
||||
print(summa([1, 2, 3, 4]))
|
||||
print(suma([1, 2, 3, 4]))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
else:
|
||||
suma(sys.argv[1:])
|
||||
|
@ -0,0 +1,3 @@
|
||||
import task00
|
||||
|
||||
print(task00.suma([5.2,3.4,4.5]))
|
@ -0,0 +1,3 @@
|
||||
import task00
|
||||
|
||||
print(task00.suma(['def',3.4,4.5]))
|
@ -4,13 +4,18 @@
|
||||
Sprawdź, czy masz zainstalowany pakiet ``pandas``. Jeżeli nie, zainstaluj go.
|
||||
|
||||
** 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. 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. 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. 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. 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. 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. Dodaj kolumnę ``Borough``, która będzie zawierać informacje o dzielnicach i powstanie z kolumny ``Localization``. Wykorzystaj do tego funkcję ``find_borough``.
|
||||
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. 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. 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,14 +1,22 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import pandas as pd
|
||||
import matplotlib
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def wczytaj_dane():
|
||||
pass
|
||||
dane = pd.read_csv('mieszkania.csv',
|
||||
sep=',',
|
||||
encoding='utf-8')
|
||||
return dane
|
||||
|
||||
def most_common_room_number(dane):
|
||||
pass
|
||||
return dane.Rooms.mode()[0]
|
||||
|
||||
def cheapest_flats(dane, n):
|
||||
pass
|
||||
dane = dane.sort_values('Expected',ascending=True)
|
||||
return dane.head(n)
|
||||
|
||||
def find_borough(desc):
|
||||
dzielnice = ['Stare Miasto',
|
||||
@ -19,23 +27,35 @@ def find_borough(desc):
|
||||
'Winogrady',
|
||||
'Miłostowo',
|
||||
'Dębiec']
|
||||
pass
|
||||
|
||||
for dzielnica in dzielnice:
|
||||
if desc.find(dzielnica)>=0:
|
||||
return dzielnica
|
||||
|
||||
return 'Inne'
|
||||
|
||||
|
||||
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):
|
||||
pass
|
||||
dane['Borough'].hist()
|
||||
plt.savefig(filename)
|
||||
|
||||
def mean_price(dane, room_number):
|
||||
pass
|
||||
dane = dane[dane.Rooms == room_number]
|
||||
return round(dane.Expected.mean(),2)
|
||||
|
||||
def find_13(dane):
|
||||
pass
|
||||
dane = dane[dane.Floor == 13]
|
||||
return list(dane.Borough)
|
||||
|
||||
def find_best_flats(dane):
|
||||
pass
|
||||
dane = dane[(dane.Borough=='Winogrady') & (dane.Rooms==3) & (dane.Floor == 1)]
|
||||
return dane
|
||||
|
||||
def main():
|
||||
dane = wczytaj_dane()
|
||||
@ -44,11 +64,22 @@ def main():
|
||||
print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}"
|
||||
.format(most_common_room_number(dane)))
|
||||
|
||||
najtansze = cheapest_flats(dane,10)
|
||||
|
||||
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: {}"
|
||||
.format(mean_price(dane, 3)))
|
||||
|
||||
find_13(dane)
|
||||
|
||||
find_best_flats(dane)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
BIN
labs06/wykres.png
Normal file
BIN
labs06/wykres.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Loading…
Reference in New Issue
Block a user