Compare commits

...

8 Commits

Author SHA1 Message Date
s45166
a9c3dfe5bd Zadanie domowe labs03 2018-01-19 23:14:23 +01:00
s45166
dc99f2323d Zadanie domowe labs04 2018-01-19 22:11:27 +01:00
s45166
57a0325708 Zadanie domowe labs06 2018-01-19 22:06:33 +01:00
s45166
6cf371942e Zadanie domowe labs06 2018-01-19 21:55:49 +01:00
s45166
457d5f2146 Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-16 09:04:25 +01:00
s45166
8ee919ddd0 Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-03 15:04:33 +01:00
s45166
b4ddfb1971 Merge branch 'master' of https://git.wmi.amu.edu.pl/tdwojak/Python2017 2017-12-03 15:04:25 +01:00
s45166
a07b7a1613 Zadanie domowe 1 2017-12-01 22:48:15 +01:00
25 changed files with 418 additions and 24 deletions

View File

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

View File

@ -6,7 +6,13 @@
""" """
def days_in_year(days): def days_in_year(days):
pass if days % 4 == 0 and days % 100 != 0:
return 366
elif 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 finalList = []
wordList = text.split(" ")
for word in wordList:
if word not in vocab:
finalList.append(word)
return finalList

View File

@ -7,7 +7,10 @@ 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 if n < 1:
return 0
else:
return sum(range(1,n+1))
def tests(f): def tests(f):

View File

@ -9,8 +9,14 @@ trzyelementowe listy liczb zmiennoprzecinkowych.
np. odległość pomiędzy punktami (0, 0, 0) i (3, 4, 0) jest równa 5. np. odległość pomiędzy punktami (0, 0, 0) i (3, 4, 0) jest równa 5.
""" """
import math
def euclidean_distance(x, y): def euclidean_distance(x, y):
pass x1 = x[0]
x2 = y[0]
y1 = x[1]
y2 = y[1]
z = math.sqrt((x1-x2)**2+(y1-y2)**2)
return z
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,12 @@ 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:
bigO = "O"*n
return "N"+bigO+"!"
def tests(f): def tests(f):
inputs = [[5], [6], [2]] inputs = [[5], [6], [2]]

View File

@ -6,7 +6,11 @@ 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 letterSum = 0
for letter in text:
letterSum += ord(letter)
return letterSum
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,11 @@ przez 3 lub 5 mniejszych niż n.
""" """
def sum_div35(n): def sum_div35(n):
pass finalSum = 0
for i in range(1,n):
if i % 3 == 0 or i % 5 == 0:
finalSum += i
return finalSum
def tests(f): def tests(f):
inputs = [[10], [100], [3845]] inputs = [[10], [100], [3845]]

View File

@ -9,7 +9,20 @@ Np. leet('leet') powinno zwrócić '1337'.
def leet_speak(text): def leet_speak(text):
pass letterList = list(text)
x = 0
for i in letterList:
if i == 'e':
letterList[x] = '3'
elif i == 'l':
letterList[x] = '1'
elif i == 'o':
letterList[x] = '0'
elif i == 't':
letterList[x] = '7'
x += 1
finalOutput = ''.join(letterList)
return finalOutput
def tests(f): def tests(f):

View File

@ -9,7 +9,17 @@ na wielką. Np. pokemon_speak('pokemon') powinno zwrócić 'PoKeMoN'.
def pokemon_speak(text): def pokemon_speak(text):
pass letterList = list(text)
x = 0
for i in letterList:
if i.isalpha() and (x == 0 or x % 2 == 0):
letterList[x] = i.upper()
x += 1
finalOutput = ''.join(letterList)
return finalOutput
def tests(f): def tests(f):

View File

@ -9,7 +9,14 @@ Oba napisy będą składać się wyłacznie z małych liter.
""" """
def common_chars(string1, string2): def common_chars(string1, string2):
pass finalList = []
for i in string1:
if i.isalpha() and i in string2 and i not in finalList:
finalList.append(i)
for j in string2:
if j.isalpha() and j in string1 and j not in finalList:
finalList.append(j)
return sorted(finalList)
def tests(f): def tests(f):

47
labs03/task01.py Normal file
View File

@ -0,0 +1,47 @@
# coding=utf-8
'''
**ć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.
'''
def mutCheck(item):
itemType = type(item)
if itemType is list:
id1 = id(item)
item[0] = "X"
id2 = id(item)
if id1 == id2:
return "List is mutable"
else:
return "List is inmutable"
elif itemType is str:
id1 = id(item)
item += "Pam"
id2 = id(item)
if id1 == id2:
return "String is mutable"
else:
return "String is inmutable"
elif itemType is float:
id1 = id(item)
item += 1
id2 = id(item)
if id1 == id2:
return "Float is mutable"
else:
return "Float is inmutable"
else:
return "Given item is not a list, string or a float type"
toCheck = 2.1
x = mutCheck(toCheck)
print x

18
labs03/task02.py Normal file
View File

@ -0,0 +1,18 @@
# coding=utf-8
'''
**ć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 fibbonacci():
x = 0
y = 1
while True:
yield x
x, y = y, x+y
fibGen = fibbonacci()
n = 5
for i in range(n):
print fibGen.next()

17
labs03/task03.py Normal file
View File

@ -0,0 +1,17 @@
# coding=utf-8
"""
**ć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
import json
rawData = requests.get('https://api.fixer.io/latest')
# Program dlugo sie uruchamia
pln = json.loads(rawData.text).get("rates").get("PLN")
print pln

37
labs03/task04.py Normal file
View File

@ -0,0 +1,37 @@
# coding=utf-8
"""
**ć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.
"""
from weather import Weather
from operator import itemgetter
from datetime import datetime
def FhCs(x):
x = float(x)
cs = (x - 32)/1.8
return round(cs, 1)
userInput = raw_input('Please type a city name: ')
weather = Weather()
city = weather.lookup_by_location(userInput)
cityNow = city.condition()
cityNowText = cityNow.text()
cityNowTemp = cityNow.temp()
cityCelsius = FhCs(cityNowTemp)
print 'Current weather: ', cityNowText, ', ', cityCelsius, '°C'
cityForecasts = city.forecast()
x = {forecast.date() : forecast.low() for forecast in cityForecasts}
y = min(x.iteritems(), key=itemgetter(1))
date = datetime.strptime(y[0], "%d %b %Y")
minCels = FhCs(y[1])
print date.strftime("%A"), minCels

31
labs03/task05.py Normal file
View File

@ -0,0 +1,31 @@
# coding=utf-8
"""
**ć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 os
x = 0
#print os.listdir('.\scores')
cwd = os.getcwd()
os.chdir(cwd+'/scores')
maxBleu = {}
for f in os.listdir('.'):
with open(f, 'r') as plik:
for line in plik:
lineSplit = line.split()
maxValue = float(lineSplit[2].replace(',',''))
if not maxBleu:
maxBleu[f] = maxValue
else:
if maxValue > maxBleu.values()[0]:
maxBleu.clear()
maxBleu[f] = maxValue
print maxBleu

View File

@ -1,3 +1,11 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
def is_numeric(x):
if all(isinstance(i, (int, float)) for i in x):
print 'All elements in the list are integers or floats'
return True
else:
print 'NOT all elements in the list are integers or floats'
return False

View File

@ -1,3 +1,33 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import time
class Employee:
id = int(time.time())
def __init__(self, name, surname):
self.name = name
self.surname = surname
def get_id(self):
return self.id
# Check the first class
x = Employee('Mateusz', 'Kowalski')
print x.get_id()
# Second class
class Recruiter(Employee):
recruited = []
def recruit(self):
self.recruited.append(self.get_id())
# Check the second class
y = Recruiter('Mateusz', 'Kowalski')
y.recruit()
print y.recruited
# Third class
class Programmer(Recruiter):
def recruiter(self):
self.recruiter = self.get_id()

View File

@ -1,3 +1,46 @@
#!/usr/bin/env python2 #!/usr/bin/env python2
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import task01
class DimensionError(Exception):
pass
class Point:
pointList = []
def __init__(self, coord):
if isinstance(coord, list):
if task01.is_numeric(coord):
self.coord = coord
self.x = coord[0]
self.y = coord[1]
if len(coord) == 3:
self.z = coord[2]
self.pointList.append(self.coord)
else:
print 'NOT all elements in the list are integers or floats'
else:
raise DimensionError('The argument must be a list')
def add(self, point1, point2):
point3 = []
if isinstance(point1, Point) and isinstance(point2, Point):
point3.append(point1.x + point2.x)
point3.append(point1.y + point2.y)
point3.append(point1.z + point2.z)
return Point(point3)
else:
print 'Arguments must be Points'
def __len__(self):
return len(self.coord)
def to_string(self):
return 'Point coordinates: x: {0} y: {1} z: {2}'.format(self.x, self.y, self.z)
def __str__(self):
print self.to_string()

View File

@ -2,10 +2,11 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
def suma(liczby): def suma(liczby):
pass liczby = [float(i) for i in liczby]
return sum(liczby)
def main(): def main():
print(summa([1, 2, 3, 4])) print(suma([1, 2, 3, 4]))
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -0,0 +1,10 @@
from task00 import suma
import sys
def main():
x = sys.argv[1:]
print(suma(x))
if __name__ == "__main__":
main()

View File

@ -0,0 +1,17 @@
from task00 import suma
import sys
def main():
listToSum = sys.argv[1:]
for i in listToSum:
x = listToSum.index(i)
try:
float(i)
except:
listToSum[x] = 0
print(suma(listToSum))
if __name__ == "__main__":
main()

View File

@ -0,0 +1,12 @@
from task00 import suma
import argparse
def main():
parse = argparse.ArgumentParser()
parse.add_argument("float", help="floating numbers", nargs = '+')
arguments = parse.parse_args()
result = arguments.float
print(suma(result))
if __name__ == "__main__":
main()

View File

@ -7,6 +7,7 @@ Zwraca liczbę słów, znaków i linii.
""" """
import sys import sys
import argparse
def count_lines(text): def count_lines(text):
@ -34,6 +35,28 @@ def main():
""" main """ """ main """
print(wc(sys.stdin.read())) print(wc(sys.stdin.read()))
parse = argparse.ArgumentParser()
parse.add_argument('--l', help = 'number of lines', action = 'store_true')
parse.add_argument('--w', help = 'number of words', action = 'store_true')
parse.add_argument('--c', help = 'number of characters', action = 'store_true')
parse.add_argument('file', help = 'filepath', type = argparse.FileType('f'), nargs = '?')
args = parse.parse_args()
if args.file is None:
opt = sys.stdin.read()
else:
opt = args.file.read()
if args.l:
output = count_lines(opt)
elif args.w:
output = count_words(opt)
elif args.c:
output = count_chars(opt)
else:
output = wc(opt)
print(output)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@ -1,14 +1,25 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import pandas as pd
def wczytaj_dane(): def wczytaj_dane():
pass
mieszkania = pd.read_csv('C:\Users\mlyska\Documents\python2017\labs06\mieszkania.csv', sep = ',')
mieszkania.fillna('', inplace=True)
mieszkania['Description'] = mieszkania['Description'] + mieszkania['Unnamed: 7'] + mieszkania['Unnamed: 8'] + \
mieszkania['Unnamed: 9'] + mieszkania['Unnamed: 10'] + mieszkania['Unnamed: 11']
mieszkania.drop(['Unnamed: 7','Unnamed: 8','Unnamed: 9','Unnamed: 10','Unnamed: 11'], 1, inplace=True)
return mieszkania
def most_common_room_number(dane): def most_common_room_number(dane):
pass counter = dane['Rooms'].value_counts()
maxCount = counter.to_frame()
return maxCount.index.values[0]
def cheapest_flats(dane, n): def cheapest_flats(dane, n):
pass dane.sort_values('Expected')
return dane.head(n)
def find_borough(desc): def find_borough(desc):
dzielnice = ['Stare Miasto', dzielnice = ['Stare Miasto',
@ -19,23 +30,46 @@ def find_borough(desc):
'Winogrady', 'Winogrady',
'Miłostowo', 'Miłostowo',
'Dębiec'] 'Dębiec']
pass
for i in dzielnice:
if i in desc:
return i
break
if desc not in dzielnice:
return 'Inne'
def add_borough(dane): def add_borough(dane):
pass values = []
for i in dane['Location']:
values.append(find_borough(i))
tempSeries = pd.Series(values)
dane['Borough'] = tempSeries.values
def write_plot(dane, filename): def write_plot(dane, filename):
pass add_borough(dane)
dataPlot = dane['Borough'].value_counts()
imgPlot = dataPlot.plot(kind='bar', alpha=0.5, title='Liczba ogloszen mieszkan z podzialem na dzielnice', fontsize=6, figsize=(8,7))
imgPlot.set_ylabel('Liczba ogloszen')
imgPlot.set_xlabel('Dzielnice')
filePlot = imgPlot.get_figure()
filePlot.savefig(filename)
def mean_price(dane, room_number): def mean_price(dane, room_number):
pass x = dane.loc[dane['Rooms'] == room_number]
return x['Expected'].mean()
def find_13(dane): def find_13(dane):
pass x = dane.loc[dane['Floor'] == 13]
return list(set(x['Borough'].tolist()))
def find_best_flats(dane): def find_best_flats(dane):
pass best = dane.loc[dane['Borough'] == 'Winogrady' & dane['Rooms'] == 3 & dane['Floor'] == 1]
return best
def main(): def main():
dane = wczytaj_dane() dane = wczytaj_dane()
@ -45,10 +79,12 @@ def main():
.format(most_common_room_number(dane))) .format(most_common_room_number(dane)))
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")))
print("Średnia cena mieszkania 3-pokojowego, to: {}" print("Średnia cena mieszkania 3-pokojowego, to: {}"
.format(mean_price(dane, 3))) .format(mean_price(dane, 3)))
write_plot(dane, 'ogloszenia.png')
if __name__ == "__main__": if __name__ == "__main__":
main() main()