5.- Функции/Funktsioonid


Mis on funktsioon?

Funktsioon on nagu väike abimees sinu programmis — sa annad talle midagi (näiteks nime või palga), ta teeb mingi töö ära ja võib sulle midagi tagasi anda. Näiteks sinu koodis on palju selliseid abimehi, kes aitavad lisada töötajaid, neid kustutada või palgaga seotud arvutusi teha.


Konspteeritud ülevaade — Töötajate palkade haldamine sinu GitHubi koodi põhjal

https://github.com/AnastasiiaRadasheva/palgat0/pulse

kood:


def valik1(p: list, i: list):
    """Uute töötajate lisamine
    Funktsioon lisab uued nimed ja nende vastavad palgad.
    :param p: palgade nimekiri
    :param i: inimeste nimekiri
    :rtype: None
    """
    while True:
        try:
            kogus = int(input("Mitu inimest soovite lisada? "))
            break
        except ValueError:
            print("Palun sisesta arvuline väärtus!")
    for _ in range(kogus):
        while True:
            nimi = input("Sisesta töötaja nimi: ")
            if nimi.isalpha():
                break
            print("Nimi tohib sisaldada ainult tähti!")
        while True:
            try:
                palk = float(input("Sisesta palk: "))
                break
            except ValueError:
                print("Palk peab olema arvuline!")
        p.append(palk)
        i.append(nimi)
        print(f"{nimi} on edukalt lisatud!")

def valik2(p: list, i: list):
    """Isiku eemaldamine
    Eemaldab nimekirjast valitud inimese ja tema palga.
    :param p: palgade nimekiri
    :param i: inimeste nimekiri
    :rtype: None
    """
    while True:
        nimi = input("Sisesta eemaldatava isiku nimi: ")
        if nimi.isalpha():
            if nimi in i:
                break
            else:
                print("Sellist nime ei leitud nimekirjast.")
        else:
            print("Nimi peab koosnema ainult tähtedest.")
    while nimi in i:
        indeks = i.index(nimi)
        i.pop(indeks)
        p.pop(indeks)
        print(f"{nimi} on eemaldatud nimekirjast.")

def valik3(p: list, i: list):
    """Kõrgeim palk
    Kuvab suurima palga ja selle saajad.
    :param p: palgade nimekiri
    :param i: inimeste nimekiri
    :rtype: None
    """
    maksimum = max(p)
    print(f"Kõrgeim palk on {maksimum} €")
    for j in range(len(p)):
        if p[j] == maksimum:
            print(f"{i[j]} saab selle palga.")

def valik4(p: list, i: list):
    """Madalaim palk
    Kuvab madalaima palga ja selle saajad.
    :param p: palgade nimekiri
    :param i: inimeste nimekiri
    :rtype: None
    """
    minimaalne = min(p)
    print(f"Madalaim palk on {minimaalne} €")
    for j in range(len(p)):
        if p[j] == minimaalne:
            print(f"{i[j]} saab selle palga.")

def valik5(p: list, i: list):
    """Palkade sorteerimine
    Sorteerib palgad ja nimed kasvavalt või kahanevalt.
    :param p: palgade nimekiri
    :param i: inimeste nimekiri
    :rtype: None
    """
    while True:
        valik = input("Sorteeri palgad: '>' kasvavalt või '<' kahanevalt: ")
        if valik in (">", "<"):
            for n in range(len(p)):
                for m in range(n + 1, len(p)):
                    if eval(f"{p[m]} {valik} {p[n]}"):
                        p[n], p[m] = p[m], p[n]
                        i[n], i[m] = i[m], i[n]
            print("Sorteeritud nimekiri:")
            for nimi, palk in zip(i, p):
                print(f"{nimi}: {palk} €")
            break
        else:
            print("Lubatud ainult märgid '>' või '<'.")

def valik6(p: list, i: list):
    """Sama palgaga töötajad
    Kuvab kõik inimesed, kes saavad sama palka rohkem kui üks inimene.
    :param p: palgade nimekiri
    :param i: inimeste nimekiri
    :rtype: None
    """
    unikaalsed_palgad = set(p)
    for palk in unikaalsed_palgad:
        if p.count(palk) > 1:
            print(f"\nPalk {palk} € saavad:")
            for j in range(len(p)):
                if p[j] == palk:
                    print(f"- {i[j]}")




# 11 Вычислить зарплату, которую человек получит на руки после вычисления подоходного налога.
def netopalk(palk:int, p: list)->int:
    """Funktsioon tagastab neto palga
    param int palk: Palk
    rtype: int
    """
    palk = int(input('bebe'))
    if palk>1200:
        return palk*0.8
    elif palk>600:
        return palk*0.9
    else:
        return palk
    print(palk)
    


#17 - Написать функцию для редактирования данных. Пользователь выбирает, что редактировать: имя или зарплату. Измененние данные сохраняются  в список.
def change(i:list, p:list)->any:
    """
    """
    print("""
    muuda nime(1)
    muuda palk(2)
    """)
    valik=int(input())
    try:
        if valik == 1:
            
            print(f'sisesta nimi keda te tahate muuta {inimesed}')
            nimivalik = input().capitalize()
            if nimivalik in i:
                index = i.index(nimivalik)
                uusnimi = input("uus nimi: ").capitalize()
                i[index] = uusnimi
                print(f'nimed: {inimesed}')
            else:
                print('Sellist nimi ei ole! proovi uuesti')
        elif valik == 2:
            
            print(f'sisesta palk keda te tahate muuta {palgad}')
            palkvalik = int(input())
            if palkvalik in p:
                index = p.index(palkvalik)
                uuspalk = input("uus palk: ")
                p[index] = uuspalk.capitalize()
                print(f' palgad: {palgad}')
            else:
                print('Sellist palk ei ole! proovi uuesti')
        else:
            print('Vale valik! proovi uuesti')
    except: 
        print('Vale valik!')
#15 15 - Каждый год работникам фирмы поднимают зарплату на 5%, узнай какой будут зарплаты/зарплата у опрделенного работника через Т лет.
def aasta_palgad(i:list,p:list):
    """Funktsioon tagastab palga aasta järgi"""
    aasta=int(input("Sisesta mitu aastat: "))
    palk=int(input("Sisesta palk: "))
    for j in range(aasta):
        palk=palk*1.05
    print(f'{palk} on {aasta} aasta pärast')
    return i,p


def keskmine_palk(i:list,p:list): 
    """
    param list i: Inimeste järjend
    param list p: Palgate järjend
    """
    keskmine=sum(p)/len(p) 
    print("Keskmine palk on: " +str(keskmine)) 
    for j in range(len(p)):
        if p[j]>=keskmine:
            print(f"{i[j]} saab üle keskmise palka, ta saab {p[j]}") 
    return i,p 

def palk_nime_jargi(i:list,p:list)->:
    """Funktsioon leiab palk nime järgi
    param list i: Inimeste järjend
    param list p: Palgate järjend
    rtype: list, list
    """
    nimi=input("Nimi: ").capitalize()
    palgad = []
    for j in range(len(i)):
        if i[j] == nimi:
            palgad.append(p[j])   
    print (nimi,"palgad on",palgad)
    return i,p

1. Töötajate lisamine (valik1)

Funktsioon valik1 lubab kasutajal lisada mitu uut töötajat koos nende palkadega. Näiteks:

def valik1(p: list, i: list):
    # Küsimus: mitu inimest lisada
    kogus = int(input("Mitu inimest soovite lisada? "))
    # Iga töötaja nimi ja palk küsitakse eraldi
    for _ in range(kogus):
        nimi = input("Sisesta töötaja nimi: ")
        palk = float(input("Sisesta palk: "))
        p.append(palk)
        i.append(nimi)
        print(f"{nimi} on edukalt lisatud!")

Selles näites on oluline, et nimi koosneb ainult tähtedest (seda sinu koodis kontrollid nimi.isalpha() abil) ja palk on arvuline. Kui midagi valesti sisestada, palub programm uuesti proovida.


2. Töötaja eemaldamine (valik2)

Kui soovid kedagi nimekirjast kustutada, küsib funktsioon:

nimi = input("Sisesta eemaldatava isiku nimi: ")

Kui nimi on olemas, eemaldab ta nime ja vastava palga mõlemast listist. See on oluline, sest nimi ja palk peavad olema omavahel samas kohas.


3. Kõrgeima ja madalaima palga leidmine (valik3 ja valik4)

Kui tahad teada, kes teenivad kõige rohkem või kõige vähem, kasutad funktsioone valik3 ja valik4.

maksimum = max(p)
print(f"Kõrgeim palk on {maksimum} €")
for j in range(len(p)):
    if p[j] == maksimum:
        print(f"{i[j]} saab selle palga.")

See tähendab, et leitakse suurim palk ja seejärel väljastatakse kõik, kelle palk on sama suur.


4. Palkade sorteerimine (valik5)

Programm võimaldab palgad kas kasvavalt või kahanevalt sorteerida. Seda tehakse nii, et palkade listi vahetatakse vastavalt valikule ja ka nimed liiguvad kaasa, et jääks sidusus alles.

Näiteks:

valik = input("Sorteeri palgad: '&gt;' kasvavalt või '&lt;' kahanevalt: ")
if valik in ("&gt;", "&lt;"):
    # Sortimine toimub siin
    for n in range(len(p)):
        for m in range(n + 1, len(p)):
            if eval(f"{p[m]} {valik} {p[n]}"):
                p[n], p[m] = p[m], p[n]
                i[n], i[m] = i[m], i[n]


5. Töötajad sama palgaga (valik6)

Kui mitu töötajat teenivad sama summat, siis see funktsioon leiab ja kuvab kõik sellised nimed. Näiteks, kui kaks inimest saavad 1000 €, kuvatakse mõlema nimi.


6. Neto palga arvutamine (netopalk)

See funktsioon arvutab, palju töötaja kätte saab pärast tulumaksu mahaarvamist.

Sinu koodis:

def netopalk(palk:int, p: list)-&gt;int:
    if palk &gt; 1200:
        return palk * 0.8
    elif palk &gt; 600:
        return palk * 0.9
    else:
        return palk

See tähendab, et kui palk on üle 1200 euro, võetakse maha 20%, kui 600 ja 1200 vahel, siis 10%, muidu maksab kogu summa välja

Kokkuvõte

  • Lisamine, eemaldamine
  • Kõrgeima ja madalaima palga leidmine
  • Palkade sorteerimine
  • Sama palgaga inimeste leidmine
  • Neto palga arvutamine
  • Andmete muutmine
  • Palgatõusu arvutamine