Closed zopletalova closed 3 years ago
stat_nalezen = True
a pak jsem ji pri nalezeni regionu zmenila na False
(ale zas nemam pocet tech regionu)# Tomuto zapisu se rika list comprehension, uzitecne hlavne pokud chces
# vytvorit rychle novy list jen s nekterymi hodnotami (zkraceny zapis for cyklu)
# podobne pak existuji i dict comprehensions pro tvorbu slovniku
# kdyz si pojmy vygooglis urcite najdes spoustu dalsich navodu.
staty = [stat['name'] for stat in staty if stat['region'] == region]
if not staty: # prazdny list je False, not False = True
print('Neznamy region')
else:
# join jen spoji vsechny staty carkou, spojeni pomoci '\n' by pak kazdy
# stat hodilo na zvlast radek
print(f'Pocet statu: {len(staty)}')
print(', '.join(staty))
EDIT: Po oprave super :)
Jsi blizko ke spravnemu reseni, ale jeste ti to nefunguje tak jak ma.
To ze si subregiony davas do slovniku je skvele, ale ❗ vzdy si k danemu subregionu priradis jen prvni nalezeny stat, ktery do daneho subregionu patri. Podminka kterou tam mas, kontroluje jestli v slovniku klic uz je, proto jakmile tam prvni item vlozis, uz nikdy se tam dalsi staty z daneho subregionu neprictou :)
Tvuj pristup je dobry, vpodstate tam chybi jen druhy pripad, co se ma stat pokud uz dany subregion ve slovniku mas.
Pokud uz se pak dostanes k reseni, ktere ma spravne vysledky (ty v zadani), tak jedna z moznosti jak to zjednodusit je misto if else pouzit metodu get
test_dict = {'existujici': 100}
# chci vsechny klice zvetsit o sto a neexistujici do slovniku pridat
for key in ['existujici', 'neexistujici']:
test_dict[key] = test_dict.get(key, 0) + 100
print(test_dict)
Ahoj Andy, @andywaltlova se sedmičkou máš samozřejmě pravdu, já se tam totiž trochu motala s přidáváním klíčů a hodnot do slovníku, musela jsem si znovu vyhledat, jak na to, a z radosti, že se to nakonec povedlo, jsem to už zapomněla dotáhnout a domyslet :-) Snad už je to ok. Kouknu ještě na ta zjednodušení a další vychytávky, co jsi psala. A ještě jeden dotaz - experimentovala jsem s jednoduchými a dvojitými uvozovkami a zdá se, že v některých případech je to jedno - viz - item["population"] - item['population'] - vážně je to jedno, nebo je lepší se držet jednoho nebo druhého, bo by mi to mohlo někde, třeba ve složitějších věcech, způsobit problém? Děkuji :-) Z
Ahoj,
uvozovky je opravdu jedno, ktere pouzivas :) Ale vzdy by si se mela drzet jednoho druhu jako hlavniho. Kdyz pises f stringy a potrebujes napsat dovnitr textu uvozovku, tak tam uz si musis ty vnejsi uvozovky vybrat podle toho, kterou chces uvnitr pouzit :)
Jedine pokrocilejsi, co me pak napada je nacitani json souboru pomoci modulu json. Ale to se týká spíše toho, že json soubor je validní pouze s double quotes, tedy pokud chces napriklad python slovnik ulozit jako json soubor, tak musi mit vsude "
. JSON soubory se casto pouzivaji pokud ziskavas data z nejakeho API (aplikacni rozhrani), takovy zaklad je i v materialech pro datovou akademii.
Ja jsem treba zvykla na anglickou klavesnici, takze pouzivam spis jednoduche uvozovky. Kdyz jsem se na toto ptala v praci, tak me odkazali na coding guideline, ktery muj tym pouziva a je v nem i napsano, jaka je preferovana varianta. Vetsinou to pak zalezi na tom, jake uvozovky uz soubor ktery chci upravit pouziva a musim se prizpusobit :)
Ahoj Andy, posílám zbytek úkolů. ad ještě 07 - metodu get a existujici a neexistujici jsem zatim pro tento případ nebyla schopná aplikovat, navíc mám dojem, že mi to rozhazuje i to počítání států, musím na to ještě kouknout. :-)
Ad další úkoly: Přiznám se, že si nejsem jistá, jestli jsem vždy pochopila zadání:
08 - beru to tak, že jediná přijatelná zadání jsou +420 a devět číslic nebo devět číslic (a mezitím kdekoliv mohou být nuly). Neřeším, pro tenhle případ, jestli náhodou devítimístné telefonní číslo nezačíná nulou apod.
09 - tady jsem měla trochu problém s pochopením zadání - bylo tam něco, že do funkce má vstupovat slovník... nějak mi přišlo jednodušší "poslat", do funkce jen ty známky - rovnou jenom jako list, nikoliv dictionary (proč bych tam "tahala" názvy předmětů?). Ve chvíli, kdy měl cyklus být v těle programu a funkce měla jenom počítat, mi to takhle přišlo snáz řešitelné. Ale nevím.
10 - Tady jsem zas měla zmatek, jak naložit s nepovinnými argumenty, nebo parametry, nebo jak se jim správně říká. Vlastně jsem narazila na to, že sice vím, že existují, ale nevím, k čemu vlastně v praxi jsou. Je to tak, že je do funkce z těla programu můžu a nemusím poslat (a tím přenastavit nebo nepřenastavit defaultní hodnotu), ale spíš se čeká, že s nima budu pracovat, až když se zavolá funkce? Tedy v kódu uvnitř funkce? Tam jsem zjišťování jejich hodnoty taky nakonec dala, bo v případě pokusu nechat zjišťování v těle programu mi pak "nepovinnost" těch argumentů rázem přestala dávat smysl a kód dost nabobptal.
Díky moc a zatím ahoj :-) Z.
Sama jsem byla zvědavá jak si s příkladem poradíte, protože nevím jaké všechny metody už znáte, ale myslím, že jsi si v rámci možností poradila dobře :) Níže ti tedy dám jen pár tipů, které by určitě pomohly k zpřehlednění řešení.
Proměnná platne
je vlatně zbytečná, ty klidně můžeš mít ve funkci víc return
míst, takže kdykoli natrevíš na podmínku která automaticky znamená že číslo není validní můžeš hned udělat return False
tel[0:4]
je stejné jako tel[:4]
(ale to je fakt malickost)
nevím jestli jsi množinu použila záměrně, ničemu to nevadí, stačil by určitě i list :) (ale je pravda že všechny čísla 0-9 jsou unikátní, takže množina to ještě více zdůrazní)
No a ted k otázce zda jde zjistit zda je ve stringu cislo - ano jde to ! existuje několik užitečných metod, které lze na string hodnotách používat, kompletní seznam najdeš v dokumentaci, nám se v tomto případě hodí str.isdigit()
str_number = '123456789'
if not str_number.isdigit():
return False
No jakože uplně paráda, sama jsem ve svém řešení také použila ze slovníku jen hodnoty :)
Mě by možná větší smysl dělalo předat funkci slovnik a logiku toho počítání nechat přímo ve funkci, tedy řádky 23-25 přidat prostě taky do funkce. Ale je to jedno, pokud by si chtěla s tím slovníkem dělat více věcí, mohla by si pak mít ten main kód zbytečně nepřehledný, v takovémto piďi úkolu na tom nezáleží.
Opět by se dalo využít toho, že místo proměnné hodnocení by si mohla dělat rovnou return
Zaujalo mě použití funkce max
, možná je to v tomto případě trošku overkill, max(znamky) == 5
je stejné jako 5 in znamky
u vyznamenání potom dava max asi smysl, pokud implicitne predpokladame ze nesmi mit nic horsiho nez 1 a 2jky :)
False
) Stacilo by tedy na zaklade toho jestli je v danem parametru True
nebo False
pricist bodNad tímto úkolem se ještě zamysli :) Opravit to muzes vpodstate dvěma zpusoby aby to davalo smysl:
True
nebo False
(a zjisteni od uzivatele muzes dat do main kodu, funkci pak uz jen predas bool hodnotu - to co main kod zjisti od uzivatele, napriklad uzivatel rekne ze se zucastnil konference, tak zavolas funkci s nastavnym parametrem konf
)Skvělá práce, jen tak dál 👍
Ahoj Andy, tak jsem tu desítku udělala způsobem 2. Ptala jsem se včera Jirky na konzultacích, a říkal, že mu šlo hlavně o to, abychom si uvědomily, že někdy mají funkce tolik parametrů, že někdy je těch nepovinných dobré využít. Tady mi to ale stejně furt nedává smysl - v případě té dvojky - tebou navrženého řešení - zas nepotřebuju jejich nepovinnost, přednastavení hodnoty v záhlaví funkce... Samozřejmě, mohla bych ještě do hlavního programu dodat podmínky, za kterých volám funkci se třemi, čtyřmi, nebo pěti parametry - podle toho, co uživatel zadal, ale to mi přijde z praktického hlediska pro tento příklad už úplně mimo. A je ještě jedna možnost - nezjišťovat pro tento případ ty hodnoty vůbec, ani v hlavním programu, ani ve funkci, tam s nimi jenom teoreticky počítat, a prostě na tom demonstrovat, že je fakt zadat nepotřebuju. Byly by tedy v tomto případě k ničemu, ale člověk si samozřejmě může představit, že toto dílko může být součástí nějakého většího celku, který by funkci za nějakých okolností tyto hodnoty čas od času poslal... Kdyžtak dej vědět, jestli úprava OK a já se budu těšit dál! :-) Z.
Ahoj, Super, jasně že ti to uznám!
K těm nepovinným parametrům ti můžu dát ještě třeba příklad z praxe. Mám funkci která vypadá nějak takto:
def get_data_from_API(url, query=None):
pass #nejaky kod ktery nemusime zatim resit
Účelem této funkce je dostat nějaká data pomocí zaslání požadavku na server, pokud query nezadáš, dostaneš všechny záznamy, které na serveru (dané url) jsou, pokud zadáš konkrétní query dostaneš vyfiltrované výsledky tak aby splňovali požadavky v query (query je v tomto připade slovník, kde můžeš například specifikovat id, title, nebo nějakou vlastnost daného záznamu).
Issue tedy uzavírám, ukolu považuji za splněné :) Komentovat jde samozřejmě stále.
Ahoj Andy,
@andywaltlova
posílám první dva programy - tedy 06 a 07.
Funguje to :-) nicméně možná to ještě půjde zjednodušit...
ad program 06 Nepřišla jsem na způsob, jak se jednoduše zeptat: Existuje zadaný region ve sloupci region? (jde to, aniž by člověk procházel pomocí for ten slovník?) Nezbylo tudíž, než procházet ten slovník a porovnávat hodnoty ve sloupci "region" se zadanou hodnotou. Abych mohla následně i vyhodit hlášku, pokud ve slovníku "region" nenajdu, vytvořila jsem si pomocnou proměnnou "i", do které jsem načítala počet států v regionu. Když už jsem ji měla, tak mi přišlo užitečné přidat na konec navíc shrnutí, kolik těch států v regionu celkem je...
ad program 07 pokud tam bude něco ke zjednodušení, tak viz výše, jinak mě už další zjednodušení nenapadá :-)
Díky moc Zuzka