Commit fac9af93 by Patryk Czarnik

emp3 jako kopia emps2

parent 50c4774b
# W tym pliku mamy definicję klasy Employee - obiekt tej klasy reprezentuje jednego pracownika i zawiera jego dane.
# Mamy też funkcje odpowiedzialne za odczyt i zapis danych z/do pliku csv.
class Employee:
def __init__(self, employee_id, first_name, last_name, job_title, salary, hire_date, department_name, address, postal_code, city, country):
self.employee_id = employee_id
self.first_name = first_name
self.last_name = last_name
self.job_title = job_title
self.salary = salary
self.hire_date = hire_date
self.department_name = department_name
self.address = address
self.postal_code = postal_code
self.city = city
self.country = country
def __str__(self):
return f'Pracownik nr {self.employee_id}: {self.first_name} {self.last_name} ({self.job_title}), pensja {self.salary}'
def read_csv(file_path='emps.csv'):
emps = []
with open(file_path, mode='r', encoding='utf-8') as file:
file.readline()
for line in file:
t = line.strip().split(';')
emp = Employee(int(t[0]), t[1], t[2], t[3], int(t[4]),
t[5], t[6], t[7], t[8], t[9], t[10])
emps.append(emp)
return emps
from employees import read_csv
emps = read_csv('emps.csv')
print('Liczba odczytanych rekordów:', len(emps))
for emp in emps:
print(emp)
from employees import read_csv
# Wszystkie szczegóły związane z dostępem do pliku, są ukryte w tej funkcji
emps = read_csv('emps.csv')
# Aby wykonać operacje "dla każdego pracownika", wykonujemy pętlę po elementach listy `emps`.
# Pojedynczy element `emp` to obiekt klasy `Employee`, a dane pracownika są dostępne3 w postaci atrybutów tego obiektu,
# np. `.first_name`, `.salary`
for emp in emps:
print(f'Pracownik {emp.first_name} {emp.last_name} ({emp.job_title}) zarabia ${emp.salary}')
from employees import read_csv
emps = read_csv('emps.csv')
ile = 0
for emp in emps:
if emp.salary >= 10_000:
print(f'Pracownik {emp.first_name} {emp.last_name} ({emp.job_title}) zarabia ${emp.salary}')
ile += 1
print('Liczba bogatych:', ile)
from employees import read_csv
emps = read_csv('emps.csv')
suma = 0
for emp in emps:
suma += emp.salary
srednia = suma / len(emps)
print('Średnia wszystkich:', srednia)
from employees import read_csv
jaki_job = input('Podaj nazwę stanowiska, np. Programmer: ')
emps = read_csv('emps.csv')
ile = 0
suma = 0
for emp in emps:
if emp.job_title == jaki_job:
suma += emp.salary
ile += 1
if ile > 0:
srednia = suma / ile
print(f'Średnia pensja {ile} pracowników na stanowisku {jaki_job} wynosi: {srednia:.2f}')
else:
print(f'Nikt nie pracuje na stanowisku {jaki_job}')
from employees import read_csv
import statistics
emps = read_csv('emps.csv')
jobs = {emp.job_title for emp in emps}
print('Dostępne stanowiska:', jobs)
jaki_job = input('Podaj nazwę stanowiska, np. Programmer: ')
try:
srednia = statistics.mean(emp.salary for emp in emps if emp.job_title == jaki_job)
print(f'Średnia na stanowisku {jaki_job} jest równa {srednia}')
except statistics.StatisticsError:
print(f'Nikt nie pracuje na stanowisku {jaki_job}')
''' Dla każdej wartości job_title, która występuje w danych,
oblicz liczbę pracowników i średnią pensję.
Spodziewane wyniki (może w innej kolejności):
* President - 1 - 24000
* Administation Vice President - 2 - 17000
* Programmer - 5 - 5760
* ... ????
'''
# W tej wersji wielokrotnie przeglądamy cała listę:
# najpierw, aby ustalić, jakie są joby, a następnie dla każdego joba licząc średnią tak, jak w zadaniu 4.
# Ta wersja nie jest optymalna pod względem wydajności.
from employees import read_csv
emps = read_csv('emps.csv')
# etap 1: zbieranie informacji o jobach
jobs = set()
for emp in emps:
jobs.add(emp.job_title)
# print(jobs)
# etap 2: dla każdego joba liczymy liczbę oraz sumę pracowników i wypisujemy średnią
for job in jobs:
ile = 0
suma = 0
for emp in emps:
if emp.job_title == job:
suma += emp.salary
ile += 1
srednia = suma / ile
print(f'| {job:32} | {ile:2} | {srednia:8.2f} |')
from employees import read_csv
# W tej wersji dane (sumę pensji i liczbę osoób) zbieramy do słowników, gdzie kluczami są nazwy jobów.
emps = read_csv('emps.csv')
ilosci = {}
sumy = {}
for emp in emps:
if emp.job_title in sumy:
sumy[emp.job_title] += emp.salary
ilosci[emp.job_title] += 1
else:
sumy[emp.job_title] = emp.salary
ilosci[emp.job_title] = 1
# print(sumy)
# print(ilosci)
for job in sumy.keys():
suma = sumy[job]
ilosc = ilosci[job]
srednia = suma / ilosc
print(f'| {job:32} | {ilosc:2} | {srednia:8.2f} |')
from employees import read_csv
emps = read_csv('emps.csv')
slownik = {}
# W słowniku kluczem jest job, a wartością jest dwuelementowa lista: [count, sum]
for emp in emps:
if emp.job_title in slownik:
slownik[emp.job_title][0] += 1
slownik[emp.job_title][1] += emp.salary
else:
slownik[emp.job_title] = [1, emp.salary]
print(slownik)
print()
# dwupoziomowe rozpakowanie - dane lądują od razu w zmiennych
for job, (ilosc, suma) in slownik.items():
srednia = suma / ilosc
print(f'| {job:32} | {ilosc:2} | {srednia:8.2f} |')
from collections import defaultdict
from employees import read_csv
emps = read_csv('emps.csv')
ilosci = defaultdict(int)
sumy = defaultdict(float)
for emp in emps:
sumy[emp.job_title] += emp.salary
ilosci[emp.job_title] += 1
for job in sumy.keys():
suma = sumy[job]
ilosc = ilosci[job]
srednia = suma / ilosc
print(f'| {job:32} | {ilosc:2} | {srednia:8.2f} |')
from collections import defaultdict
from employees import read_csv
emps = read_csv('emps.csv')
# Jako parametr defaultdict wpisuje się "przepis na nowy element".
# Gdy podajemy przykłądowo int, to używane jest to w taki sposób, że jest wywoływane int() , a to daje wynik 0.
# Tutaj podamy funkcję, która nie pobiera argumentów, a wyniku zwraca nową listę zaweirającą dwa zera.
slownik = defaultdict(lambda: [0, 0])
for emp in emps:
slownik[emp.job_title][0] += 1
slownik[emp.job_title][1] += emp.salary
print(slownik)
print()
for job, (ilosc, suma) in slownik.items():
srednia = suma / ilosc
print(f'| {job:32} | {ilosc:2} | {srednia:8.2f} |')
# Wypisz dane pracownika, który zarabia najwięcej, i pracownika, który zarabia najmniej.
from employees import read_csv
emps = read_csv('emps.csv')
max_salary = 0
max_ktotojest = ''
min_salary = 1_000_000_000
# min_salary = float('+inf')
min_ktotojest = ''
for emp in emps:
if emp.salary > max_salary:
max_salary = emp.salary
max_ktotojest = emp.first_name + ' ' + emp.last_name
for emp in emps:
if emp.salary < min_salary:
min_salary = emp.salary
min_ktotojest = emp.first_name + ' ' + emp.last_name
print('Najwyższa pensja:', max_salary, 'Pracownik:', max_ktotojest)
print('Najniższa pensja:', min_salary, 'Pracownik:', min_ktotojest)
from employees import read_csv
emps = read_csv('emps.csv')
# Uwaga! Pod nazwami min i max znajdują się wbudowane funkcje Pythona.
# Można pod te nazwy wpisać własne wartości, ale wtedy w obrębie tego programu nie będą dostępne funkcje min i max
max = None
min = None
for emp in emps:
if max is None or emp.salary > max.salary:
max = emp
if min is None or emp.salary < min.salary:
min = emp
print('Najbogatszy:', max)
print('Najbiedniejszy:', min)
from employees import read_csv
emps = read_csv('emps.csv')
# Na początku do min i max wpisujemy pierwszego pracownika, a później w pętli sprawdzamy, czy kotś ma większą / mniejszą pensję
max = emps[0]
min = emps[0]
for emp in emps:
if emp.salary > max.salary:
max = emp
if emp.salary < min.salary:
min = emp
print('Najbogatszy:', max)
print('Najbiedniejszy:', min)
from employees import read_csv
emps = read_csv('emps.csv')
# etap 1: ustalamy wartości minimalnej i maksymalnej pensji
max_salary = max(emp.salary for emp in emps)
min_salary = min(emp.salary for emp in emps)
# etap 2: wypisujemy te osoby, które mają właśnie taką pensję
print('Najwyższa pensja:', max_salary)
print('Zarabia tyle:')
for emp in emps:
if emp.salary == max_salary:
print(emp)
print()
print('Najniższa pensja:', min_salary)
print('Zarabia tyle:')
for emp in emps:
if emp.salary == min_salary:
print(emp)
from employees import Employee
steven = Employee(100, 'Steven', 'King', 'President', 24000, '2001-01-01', 'Executive', 'Jasna 14/16a', '01-321', 'Warszawa', 'Polska')
print(steven)
print(f'{steven.first_name} pracuje w mieście {steven.city}')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment