Compare commits

...

18 Commits

Author SHA1 Message Date
s45146 81731a6026 Zadanie domowe labs06 - zad2 - task02
Rozwiązanie s45146
_Bez regresji liniowej_
2017-12-22 22:10:17 +01:00
s45146 ef426e0c64 Zadanie domowe Zad4
Labs05 - task04
Rozwiązanie s45146
2017-12-20 21:03:42 +01:00
s45146 2e6466143b Zadania na zajęciach Labs05
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-16 12:56:09 +01:00
s45146 4c0515a9fa Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-16 09:03:31 +01:00
s45146 6a3a51aa64 labs04 - Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-09 20:16:51 +01:00
s45146 d7ea17b325 labs04 - task02
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-09 20:15:43 +01:00
s45146 eef90997bc labs04 - task01
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-09 20:15:23 +01:00
s45146 ed8ed03e5b Praca domowa nr 2 (labs03)
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-09 18:18:34 +01:00
s45146 5352a03460 Praca domowa nr 2
Initial commit - Piotr Bystrzycki - nr indeksu 45146
2017-12-08 23:09:55 +01:00
s45146 7e16e6d4d7 Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-08 23:05:31 +01:00
s45146 d588bcddf3 Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-08 20:32:04 +01:00
s45146 16cd898241 Praca domowa nr 2
Rozwiązanie - nr indeksu 45146
2017-12-08 20:29:13 +01:00
s45146 c723ed6bb1 Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-03 15:14:31 +01:00
s45146 233a2250f6 Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-03 14:50:19 +01:00
s45146 ee29b2e399 Nowe pliki lab04 2017-12-03 14:35:28 +01:00
s45146 3c8fb8cd60 Praca domowa nr 2
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-12-03 13:12:25 +01:00
s45146 6c2b8ac2f9 Praca domowa nr 1
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-11-20 22:33:08 +01:00
s45146 3a65bc85f2 Praca domowa nr 1
Rozwiązanie - Piotr Bystrzycki - nr indeksu 45146
2017-11-20 22:27:59 +01:00
26 changed files with 534 additions and 32 deletions

View File

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

View File

@ -6,7 +6,11 @@
"""
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]]

View File

@ -13,7 +13,11 @@ jak 'set', która przechowuje elementy bez powtórzeń.)
def oov(text, vocab):
pass
rett = list()
for s in text.lower().split():
if not s in vocab:
rett.append(s)
return set(rett)

View File

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

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import math as mt
"""
Napisz funkcję euclidean_distance obliczającą odległość między
@ -10,7 +11,15 @@ np. odległość pomiędzy punktami (0, 0, 0) i (3, 4, 0) jest równa 5.
"""
def euclidean_distance(x, y):
pass
x1 = x[0]
y1 = x[1]
z1 = x[2]
x2 = y[0]
y2 = y[1]
z2 = y[2]
return mt.sqrt((x1 - x2)**2 + (y1 - y2)**2 + (z1 - z2)**2)
def tests(f):
inputs = [[(2.3, 4.3, -7.5), (2.3, 8.5, -7.5)]]

View File

@ -10,7 +10,13 @@ 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!'"
t = list('N')
for i in range(n):
t.append('O')
return ''.join(t) + '!'
def tests(f):
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.
"""
def char_sum(text):
pass
s = 0
for z in text:
s +=ord(z)
return s
def tests(f):
inputs = [["this is a string"], ["this is another string"]]

View File

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

View File

@ -7,9 +7,17 @@ na podobnie wyglądające cyfry: 'e' na '3', 'l' na '1', 'o' na '0', 't' na '7'.
Np. leet('leet') powinno zwrócić '1337'.
"""
import string
def leet_speak(text):
pass
dt = {"e":"3", "l":"1", "o":"0", "t":"7"}
ltx = text.lower()
ret = text + ""
for k in list(ltx):
v = dt.get(k)
if v is not None:
ret = ret.replace(k, v)
return ret
def tests(f):

View File

@ -7,9 +7,15 @@ Napisz funkcję pokemon_speak, która zamienia w podanym napisie co drugą liter
na wielką. Np. pokemon_speak('pokemon') powinno zwrócić 'PoKeMoN'.
"""
import string as str
def pokemon_speak(text):
pass
lt = list(text)
for i in range(len(lt)):
if i%2 == 0:
lt[i] = lt[i].upper()
return ''.join(lt)
def tests(f):

View File

@ -9,8 +9,13 @@ Oba napisy będą składać się wyłacznie z małych liter.
"""
def common_chars(string1, string2):
pass
t1 = list(''.join(string1.split(' ')))
t2 = list(''.join(string2.split(' ')))
rett = list()
for lit in t1:
if lit in t2:
rett.append(lit)
return sorted(set(rett))
def tests(f):
inputs = [["this is a string", "ala ma kota"]]

29
labs03/task01.py Normal file
View File

@ -0,0 +1,29 @@
"""
**ć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:
* lista,
* napis (string),
* liczba zmiennoprzecinkowa.
"""
print("id(mL)")
mL = list()
print(id(mL))
mL.append(4)
print(id(mL))
print("id(mS)")
mS = "my string"
print(id(mS))
mS = mS + "xyz"
print(id(mS))
print("id(mF)")
mF = 2.71
print(id(mF))
mF =3.14 * mF
print(id(mF))

26
labs03/task02.py Normal file
View File

@ -0,0 +1,26 @@
"""
**ćwiczenie 2**
Napisz generator, który będzie zwracać ``n`` kolejnych liczb ciągu Fibonacciego (``F(0)=1, F(1)=1, FN=F(N-1) + F(N-2)``).
"""
def Fibogen(n):
if n == 0:
yield 1
if n == 1:
yield 1
yield 1
if n >= 2 :
i, j = 1, 1
yield 1
yield 1
for k in range(2, n):
f = i + j
i = j
j = f
yield f
for i in Fibogen(15):
print(i)

19
labs03/task03.py Normal file
View File

@ -0,0 +1,19 @@
"""
**ćwiczenie 3**
Strona ``https://api.fixer.io/latest`` udostępnia kursy różnych walut w stosunku do euro. Napisz skrypt, który:
* pobierze zawartość JSONa. Wykorzystaj bibliotekę ``requests`` (http://docs.python-requests.org/en/master/).
* korzystając z biblioteki ``json`` przekształć go do obiketu typu JSON.
* Wyświetl wartość kursu EUR do PLN.
"""
import requests as rr
import json as jsn
url_rates = "https://api.fixer.io/latest"
website = rr.get(url_rates)
json_s = website.text
ratesJson = jsn.loads(json_s)
#print(ratesJson)
#print("EUR/PLN = ", ratesJson['rates']['PLN'])
print(ratesJson['rates']['PLN'])

74
labs03/task04.py Normal file
View File

@ -0,0 +1,74 @@
"""
ćwiczenie 4 Zainstaluj bibliotekę weather-api (https://pypi.python.org/pypi/weather-api). Korzystając z niej:
Wypisz informacje o aktualnej pogodzie.
Napisz funkcję, która zamieni stopnie F na C.
Korzystając z prognozy, znajdź dzień, w którym będzie najzimniej. Wypisz nazwę tygodnia (w języku polskim) i temperaturę w C.
"""
import weather as wth
import locale
dayPL = {
'Mon':'Poniedziałek',
'Tue':'Poniedziałek',
'Wed':'Środa',
'Thu':'Czwartek',
'Fri':'Piątek',
'Sat':'Sobota',
'Sun':'Niedziela'
}
mthPL = {
'Jan':'Styczeń',
'Feb':'Luty',
'Mar':'Marzec',
'Apr':'Kwiecień',
'May':'Maj',
'Jun':'Czerwiec',
'Jul':'Lipiec',
'Aug':'Sierpień',
'Sep':'Wrzesień',
'Oct':'Październik',
'Nov':'Listopad',
'Dec':'Grudzień'
}
def fconvF2C (pFdeg):
return round((float(pFdeg) - 32) / 1.8, 1)
m = "Katowice"
wth = wth.Weather()
ort = wth.lookup_by_location(m)
pog = ort.condition()
pd = pog.date()
men = pd.split(' ')[2]
mpl = mthPL[men]
pdd = pd.replace(',','').split(' ')[0]
#dpl = pd.replace(pdd, dayPL[pdd])
dpl = pd.replace(pdd, dayPL[pdd]).replace(men, mpl)
print("Aktualna pogoda w:", m)
print("Data = ", dpl, "\nPogoda ogólnie (ang.) = ", pog.text(), "\nTemperatura = ", fconvF2C(pog.temp()), "C (", pog.temp(), "F )")
progs = ort.forecast()
tmin = pog.temp()
dmin = pog.date()
for pr in progs:
if pr.low() < tmin:
tmin = pr.low()
dmin = pr.date()
# print(pr.date())
# print(pr.text())
# print(pr.high())
# print(pr.low())
print("Przewidywana minimalna temperatura dla:", m)
mth = dmin.split(' ')[1]
mpl = mthPL[mth]
print(dmin.replace(mth, mpl), "|", fconvF2C(float(tmin)), "st. C")

36
labs03/task05.py Normal file
View File

@ -0,0 +1,36 @@
"""
ć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.
Wykorzystaj bibliotekę glob (https://docs.python.org/2/library/glob.html)
Wyświetl tylko pełną nazwe pliku (wraz z ścieżką).
"""
import glob
def maxBleu(dir = './scores/', retmax = False):
maxbleu, fmax = None, None
for fn in glob.glob(dir+'model.iter*.npz.bleu'):
with open(fn, 'r') as f:
nmax = f.readline().replace(',', '').split(' ')[2]
if (maxbleu is None) or (float(maxbleu) < float(nmax)):
maxbleu = nmax
fmax = fn
else:
pass
if retmax:
retval = fmax+' : '+maxbleu
else:
retval = fmax
return retval
if __name__ == "__main__":
#print(maxBleu(retmax = True))
print(maxBleu())

View 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": [

View File

@ -1,3 +1,18 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
**ć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).
"""
def is_numeric(my_list):
for item in my_list:
if not (isinstance(item, int) or isinstance(item, float)):
return False
return True and len(my_list) > 0
if __name__ == "__main__":
print(is_numeric([]))

View File

@ -1,3 +1,37 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
**ć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.
"""
class Employee:
maxid = 0
def __init__(self, vorname, name):
self.imie = vorname
self.nazwisko = name
Employee.maxid += 1
self.id = Employee.maxid
def get_id(self):
return self.id
class Recruiter(Employee):
def __init__(self, vorname, name):
super().__init__(vorname, name)
self.recruited = list()
def recruit(self, oEmployee):
self.recruited.append(oEmployee.id)
class Programmer(Employee):
def __init__(self, vorname, name, oRecruiter):
super().__init__(vorname, name)
self.recruiter = oRecruiter.get_id()

View File

@ -1,3 +1,80 @@
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
**ć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.
* 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.
"""
class DimensionError(Exception):
"""Klasa reprezentująca wyjątek ilości współrzędnych <> 3"""
def __init__(self, text):
self.text = text
def __str__(self):
return self.text
class Point:
"""Klasa reprezentująca punkt w 3D.
Pola publiczne:
x, y , z - współrzędne punktu w 3 D
"""
def __is_numeric(self, my_list):
"""Zwraca True jeśli podana lista argumentów ma dokładnie 3 elementy typu int lub float
argument my_list - lista 3 współzednych liczbowych typu int lub float"""
for item in my_list:
if not (isinstance(item, int) or isinstance(item, float)):
return False
return True and len(my_list) > 0
def __init__(self, xyz):
"""Konstruktor klasy Point
argument xyz - lista współrzędnych punktu w 3D. Musi zawierać 3 współrzędne!
"""
if not self.__is_numeric(xyz):
raise DimensionError("Invalid coordindates!. Check the numbers!")
if len(xyz) != 3:
raise DimensionError("Invalid number of coordindates! (<> 3)")
self.x = xyz[0]
self.y = xyz[1]
self.z = xyz[2]
def to_string(self):
"""Wypisuje wektor współrzędnych punktu w 3D jako string"""
return '[' + ','.join([str(self.x), str(self.y), str(self.z)]) + ']'
def add(oPoint1, oPoint2):
"""Metoda statyczna klasy Point. Zwraca sumę współrzędnych danych 2 punktów w 3D.
arg1 - obiekt klasy Punkt
arg2 - obiekt klasy Punkt
"""
l1 = [oPoint1.x, oPoint1.y, oPoint1.z]
l2 = [oPoint2.x, oPoint2.y, oPoint2.z]
nl = [c1+c2 for c1, c2 in zip(l1, l2)]
return Point(nl)
def __len__(self):
"""Zwraca liczbę współrzędnych = 3 bo punkt w przestrzeni 3D :-)"""
return 3
def __str__(self):
"""Funkcja string dla klasy Point. Wypisuje współrzędne punktu jako string"""
return self.to_string()
####################################################
if __name__ == "__main__":
p1 = Point([1, 2, 3])
print('p1 =', p1)
p2 = Point([-3, 0, -2])
print('p2 =', p2)
p3 = Point.add(p1, p2)
print('p3 = p1 (+) p2 = ', p3)

View File

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

View File

@ -0,0 +1,9 @@
import task00 as t0
import sys
def main():
liczby = sys.argv[1:]
print(t0.suma(liczby))
if __name__ == "__main__":
main()

View File

@ -0,0 +1,13 @@
import task00 as t0
import sys
def main():
liczby = sys.argv[1:]
try:
print(t0.suma(liczby))
except ValueError:
print("Wrong types of arguments passed!")
raise
if __name__ == "__main__":
main()

View File

@ -0,0 +1,20 @@
import task00 as t0
import sys, argparse
def main():
#liczby = sys.argv[1:]
parser = argparse.ArgumentParser()
parser.add_argument("floats", help="Lista liczb zmiennoprzecinkowych", nargs = "+")
args = parser.parse_args()
liczby = args.floats
try:
print(t0.suma(liczby))
except ValueError:
print("Wrong types of arguments passed!")
raise
if __name__ == "__main__":
main()

View File

@ -7,6 +7,7 @@ Zwraca liczbę słów, znaków i linii.
"""
import sys
import argparse
def count_lines(text):
@ -29,11 +30,50 @@ def wc(text):
chars = count_chars(text)
return lines, words, chars
#Moja klasa wyjątku
class ArgException(Exception):
def __init__(self, text):
self.text = text
def __str__(self):
return self.text
def main():
""" main """
print(wc(sys.stdin.read()))
msg_usage = "Usage: task04.py [-h | -l | -w | -c] [file_name | stdin]"
parser = argparse.ArgumentParser()
parser.add_argument("-l", help="-l returns number of lines", action = 'store_true')
parser.add_argument("-w", help="-w returns number of words", action = 'store_true')
parser.add_argument("-c", help="-c returns number of characters", action = 'store_true')
parser.add_argument("file_name", help="This is path to the text input file to read the lines from or stdin if not given", type = argparse.FileType('rt'), nargs='?')
args = parser.parse_args()
if args.l + args.w + args.c > 1: #Jeśli więcej niż 1 argument {-l, -w, -c}
print(msg_usage, "\nToo many arguments passed!")
#print(args.l, args.w, args.c, args.input)
return
res = "" #Zwracany napis
if args.file_name is None:
fh_lines = sys.stdin.read()
else:
fh_lines = args.file_name.read()
if args.l:
res = count_lines(fh_lines)
elif args.w:
res = count_words(fh_lines)
elif args.c:
res = count_chars(fh_lines)
elif not (args.l and args.w and args.c):
res = wc(fh_lines)
else: #Coś jest nie tak!
raise ArgException(msg_usage, "\nError in arguments!")
#print(wc(sys.stdin.read()))
# print(wc(fh_lines))
#print(fh_lines)
print(res)
if __name__ == "__main__":
main()

View File

@ -1,15 +1,32 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pandas as pd, numpy as np
import argparse, sys, os
import matplotlib.pyplot as plt
# 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.
def wczytaj_dane():
pass
return pd.read_csv('mieszkania.csv', sep = ',')
# 1' Wczytaj_dane z parametrem
def wczytaj_dane_2(file_name):
return pd.read_csv(file_name, sep = ',')
# 2. 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ą.
def most_common_room_number(dane):
pass
rooms = dane['Rooms']
return rooms.value_counts(sort = True, ascending = False).index[0]
# 3. Uzupełnij kod w funkcji cheapest_flats(dane, n), która wzróci n najtańszych ofert mieszkań. Wzrócony obiekt typu DataFrame.
def cheapest_flats(dane, n):
pass
return dane['Expected'].sort_values(ascending = True).head(n).to_string(index = False).split('\n')
# 4. 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.
def find_borough(desc):
dzielnice = ['Stare Miasto',
'Wilda',
@ -19,36 +36,71 @@ def find_borough(desc):
'Winogrady',
'Miłostowo',
'Dębiec']
pass
for first_d in dzielnice:
if first_d in desc:
return first_d
return "Inne"
# 5. Dodaj kolumnę Borough, która będzie zawierać informacje o dzielnicach i powstanie z kolumny Localization. Wykorzystaj do tego funkcję find_borough.
def add_borough(dane):
pass
dane['Borough'] = dane['Location'].map(lambda Location: find_borough(Location))
# 6. Uzupełnij funkcje write_plot, która zapisze do pliku filename wykres słupkowy przedstawiający liczbę ogłoszeń mieszkań z podziałem na dzielnice.
def write_plot(dane, filename):
pass
add_borough(dane)
hist_data = dane['Borough'].value_counts()
h = hist_data.plot(kind = 'bar', grid = True, figsize = (10, 8))
plt.savefig(filename)
# 7. Napisz funkcje mean_price, która zwróci średnią cenę mieszkania room_numer-pokojowego.
def mean_price(dane, room_number):
pass
return dane.loc[dane['Rooms'] == room_number]['Expected'].mean()
# 8. Uzupełnij funkcje find_13, która zwróci listę dzielnic, które zawierają ofertę mieszkanie na 13 piętrze.
def find_13(dane):
pass
return dane.loc[dane['Floor'] == 13]['Borough'].to_string(index=False).split('\n')
# 9. Napisz funkcje find_best_flats, która zwróci wszystkie ogłoszenia mieszkań, które znajdują się na Winogradach, mają 3 pokoje i są położone na 1 piętrze.
def find_best_flats(dane):
pass
return dane.loc[(df['Borough'] == 'Winogrady') & (dane['Floor'] == 1) & (dane['Rooms'] == 3)]
# 10. (dodatkowe): Korzystając z pakietu sklearn zbuduj model regresji liniowej, która będzie wyznaczać cenę mieszkania na podstawie wielkości mieszkania i liczby pokoi.
def main():
parser = argparse.ArgumentParser()
parser.add_argument("file_name", help = "File mieszkania.csv will be used by default", type=argparse.FileType('rt'), nargs='?')
args = parser.parse_args()
if args.file_name is None:
file_csv = 'mieszkania.csv'
else:
file_csv = args.file_name.name
###dane = wczytaj_dane_2(file_csv)
dane = wczytaj_dane()
print(dane[:5])
print("Najpopularniejsza liczba pokoi w mieszkaniu to: {}"
.format(most_common_room_number(dane)))
print("{} to najłądniejsza dzielnica w Poznaniu."
.format(find_borough("Grunwald i Jeżyce"))))
.format(find_borough("Grunwald i Jeżyce")))
print("Średnia cena mieszkania 3-pokojowego, to: {}"
.format(mean_price(dane, 3)))
### Dopisałem te wywołania ###
# ['1', ' 4000', '68000', '79000', '85000']
n = 5
print("Najtańsze oferty, to: {}"
.format(cheapest_flats(dane, n)))
write_plot(dane, file_csv+'.hist.png')
print("Dzielnice z mieszkaniami na 13tym piętrze, to: {}"
.format(find_13(dane)))
#############################
if __name__ == "__main__":
main()