Hedwika / python-012021

Homework - Python 2021 Czechitas course
0 stars 0 forks source link

Kontrola #2

Closed Hedwika closed 3 years ago

Hedwika commented 3 years ago

Ahoj Jirko ,

prosím o kontrolu domácích úkolů. Vše je otestované a neměla jsem problém. U příkladu 8 jsem hodně Googlila, aby neprošla písmena a při počtu 13 znaků musela být předvolba "+420". :) Tady bych ráda nejdříve ověřila písmena s "try... except" a až potom počet znaků, ale když jsem to přehodila takto, i při správném telefonním čísle je výsledek "False". Poradíš mi prosím, jak na to?

try:
    number = int(number)
    if len(str(number)) == 13:
        if number.startswith("+420"):
            return True
        else:
            return False
    elif len(str(number)) == 9:
        return True
    else:
        return False
except ValueError:
    return False

Děkuji a přeji krásný víkend Hedvika

pesikj commented 3 years ago

6. úkol :heavy_check_mark:

Super :-) ​

7. úkol :heavy_check_mark:

​ Taky super :-) ​

8. úkol :heavy_check_mark:

Chválím použití funkce startwith("+420"). :-) Alternativně je možné použít indexy u řetězců, ale tohle řešení je určitě lepší.

Samotnou kontrolu, zda je o číslo, jsem původně nechtěl, ale vidím, že jsi to vyřešila skvěle. Zápis s výjimkou je správně. Alternativně je možné použít funkci isnumeric(), která se používá pomocí tečkové notace. Jen je potřeba se zbavit případného předčíslí a mezer. Nemusíš ale provádět samotný převod na číslo, takže nehrozí, že by program spadl na převodu hodnot.

Funkce by pak mohla vypadat např. takto:​

def verif(number):
    number = number.replace(" ", "")
    if len(number) == 13:
        if number.startswith("+420"):
            number = number.replace("+420", "")
            return number.isnumeric()
        else:
            return False
    if len(number) == 9:
        return number.isnumeric()

Při určení počtu zpráv můžeš použít celočíselné dělení namísto zaokrouhlování.

number_of_messages = message_length // 180

Ale jinak klobouk dolů, že sis poradila s výjimkami :-) ​

9. úkol :heavy_check_mark:

Taky správně, pouze bych možná přidal kontrolu na pětku už do cyklu, protože tím můžeš program zrychlit (když narazí na pětku, tak již není potřeba počítat průměr). Ale to je spíše detail. ​

def ohodnotStudenta(znamkyStudenta):
    soucet = 0
    for key, value in znamkyStudenta.items():
        if value == 5:
            return "Neprospěl"
        soucet += value
    prumernaZnamka = soucet / len(student)
    if prumernaZnamka <= 1.5:
        if 3 not in student.values():
            return "Prospěl s vyznamenáním."
        else:
            return "Prospěl."
    else:
        return "Prospěl."

10. úkol :heavy_check_mark:

​ Správně, šance sice měla být vrácena jako řetězec (např. malá), ale to už je jen jednoduchá podmínka na závěr, takže mně to takto stačí. ​

Závěr

Je vidět, že sis s tím dala hodně práce, za mě je to takhle skvělé, jen tak dál :-)

Hedwika commented 3 years ago

Ahoj Jirko,

děkuji moc za kontrolu!

8 - vidím, že jsem se do toho trochu zamotala a napsala to zbytečně složitě - hlavně kontrolu znaků. Ještě projdu a zkusím upravit s celočíselným dělením.

9 - tohle je super point a jsem ráda, žes mi to napsal - je to jasné, ale zkusím se napříště vždycky zamyslet nejen nad tím, aby byly programy funkční, ale aby byly také co nejrychlější.

10 - tak to jsem úplně přehlédla, doplněno :)

Díky a ahoj večer Hedvika

pesikj commented 3 years ago

Jinak to, co používáš u 8. příkladu, vychází z přístupu Easier to ask for forgiveness than permission (EAFP), který je popsaný v oficiální dokumentaci Pythonu. Logika je taková, že akci zkusíš provést a až v případě, že nevyjde, tak provedeš opravu chyby (to je část except). Alternativní způsob je nejdříve zkontrolovat, zda je akce bezpečná, a poté ji provést (Look before you leap. - LBYL). Oba se aktivně používají.

Asi je to založené na výroku americké admirálky Grace Hopper. To je jen taková historická zajímavost :-D

Hedwika commented 3 years ago

Ahoj Jirko,

díky za vysvětlení EAFP versus LBYL, teď už chápu, co jsem to vlastně vygooglila a použila :) Dostudovala jsem si to na tomto odkazu a musím říct, že mi přijde super, že existují a dají se používat obě varianty. Díky moc, žes mi to napsal, jinak bych se k této teoretické části nedostala. 👍

Hezký den Hedvika