Diskuze: Kódování v Pythonu, podmínky
Člen
Zobrazeno 16 zpráv z 16.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
s.split(",")# hledáme morseův znak z řetězce z pole znaky v poli morseovyZnaky,
# pokud najdeme, získáme jeho index a pomocí něj najdeme odpovídající písmeno, pokud ne získáme -1,
# následující podmínka není splněna a do dekodované zprávy přidáváme ?
index = morseovyZnaky.index(morseuvZnak)
Pozn. podle stylových pravidel Python, tzv. PEP8, se názvy funkcí a
proměnných píší malými písmeny se slovy oddělenými podtržítkem, např
morseovy_znaky , odkaz zde https://peps.python.org/pep-0008/
for morseuvZnak in znaky:
abecedniZnak = "?"
index = morseovyZnaky.index(morseuvZnak)
if (index >= 0): # znak nalezen
abecedniZnak = abecedniZnaky[index]
zprava += abecedniZnak
1. v kódu znaky = s.split(" ") pro co tady je (" ")? Proč není ()?
- split("separator") => "AAAseparatorBBBseparatorCCC" => [AAA, BBB, CCC]
2. v kódu abecedniZnak = "?" proč a pro co je "?" ?
- "?" je textovy retezec obsahujici pouze znak "?"
- autor chtel, aby, kdyz se prevod na morse kod nepodari (index je -1, selze podminka s IF),
aby se zobrazil misto toho otaznik
3. pro co tady je if (index >= 0): ? Kód funguje i bez teto podmínky.
- ano, kod funguje i bez, protoze se podarilo nahradit "kazdy znak" ze zpravy s.
Ale, zkus si tam pridat nejaky nesmysl. Pak ti to zacne vypisovat nejake chyby,
protoze retezce "a" "toto" "jsou" "dalsi" nejsou v seznamu morseovyZnaky = [".-", "-...", ...
s = ".-.. . --- -. .- .-. -.. ---"
s = ".-.. . -------- --- -. .- .-. -.. .-.-.-. --- a toto jsou dalsi nesmysly, ktere budou nahrazeny otazniky"
Ohledně otázky č. 2: to je tam zřejmě proto, aby se zobrazil otazník v
případě, že bys dekodóval něco, co není správná morseovka a tedy
morseův znak nebyl nalezen, tj. místo každého nenalezeného znaku bude
otazník.
Zkusil jsem dát do kódu dodatečný znak, poprvé to bylo 5 teček
..... a pak zkusil jsem dodat A.
V obojich případech výsledkem bylo:
`Původní zpráva: .-.. . --- -. .- .-. -.. --- A
Traceback (most recent call last):
File
"C:\Users\czsam\Documents\Работа\Программирование\Python\ITNeetwork
practice\testy lekce 6\lahve\Běžná praxe 3.py", line 19, in
<module>
index = morseovyZnaky.index(morseuvZnak)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: 'A' is not in list
Process finished with exit code 1`
A mělo by být něco takové:
`Původní zpráva: .-.. . --- -. .- .-. -.. ---
Dekódovaná zpráva je: leonardo?`
Ne?
Je tam chyba, já jsem si toho nevšiml, omlouvám se. Je to takto. Pro hledání prvků v poli jsou python dvě metody, index a find
morseovyZnaky.index(morseuvZnak) # když nenajde vrátí ValueError
morseovyZnaky.find(morseuvZnak) # když nenajde vrátí -1
Nejjednodušší je vyměnit index za find.
Druhá možnost je použít try except block:
for morseuvZnak in znaky:
try:
index = morseovyZnaky.index(morseuvZnak)
zprava += abecedniZnaky[index]
except ValueError:
zprava += "?"
print(f"Dekódovaná zpráva je: {zprava}")
Nyní je vše logické, jasné a funguje!
A protoze pouzivas split bez reg. vyrazu, tak by bohate stacilo nacvakat ta pro chyby jen par mezer, prazdny string neni v seznamu znaku a hnedka naskoci chyby.
s = ".-.. . --- -. .- .-. -.. ---"
s = ".-.. . --- -. .- .-. -.. --- "
s = ".-.. . --- -. .- .-. -.. ---" # nebo mezery mezi kod
Evidentne je ten kod nedomysleny, velmi zjednoduseny a bezneho uzivatele by
prave zmatl. Bezne se tam dava treba lomitko a ne mezera do morse kodu a opet to
prestane fungovat
Coz te jako
programatora, ktery to musi spravit, jiste nepotesi
Kdyby sis to aspoň zkusil, než začneš radit:
s1 = ".-.. . --- -. .- .-. -.. ---"
s2 = ".-.. . --- -. .- .-. -.. --- "
s3 = ".-.. . --- -. .- .-. -.. ---"
assert(s1.split() == s2.split() == s3.split())
https://www.programiz.com/…ne-compiler/
s1 = ".-.. . --- -. .- .-. -.. ---"
s2 = ".-.. . --- -. .- .-. -.. --- "
s3 = ".-.. . --- -. .- .-. -.. ---"
print (len(s1.split()), len(s2.split()), len(s3.split()))
# 8 8 8
Wow, to je hrozne zajimave a nezvykle. Snad jde donutit python, aby to tak
nedelal, pac znam spoustu aplikaci, kde by se mi prave hodilo mit tam prazdne
radky 
Pak musíš explicitně uvést dělicí znak.
s1 = ".-.. . --- -. .- .-. -.. ---"
s2 = ".-.. . --- -. .- .-. -.. --- "
s3 = ".-.. . --- -. .- .-. -.. ---"
print (s1.split(" "), s2.split(" "), s3.split(" "), sep="\n")
print (len(s1.split(" ")), len(s2.split(" ")), len(s3.split(" ")))
# 8 15 15
Zkus následující:
print("Pro ukázku vyměníme mezeru za 'm' a za kazde 'm' vlozime 'nic' jako vizualizaci prazdneho retezce")
s4 = s1.replace(" ", "mnic")
s5 = s2.replace(" ", "mnic")
s6 = s3.replace(" ", "mnic")
print (s4, s5, s6, sep="\n")
print("Rozdělíme přes 'm'")
print (s4.split("m"), s5.split("m"), s6.split("m"), sep="\n")
# Počet samostatných "nic", je přesně počet prázdných položek navíc, v našem případě 7
Je mi líto, nic nerozumím.
Ale OK, to je témata pro další studium.
Jde o to, že i mezi dělicí znakemi, je prázdný znak a když dělím více dělicích znaků za sebou, tak mi zbydou jenom prázdné znaky, to jsou ty položky "navíc". To je vlastnost splitu v pythonu, když nespecifikuji dělicí znak, tak se dělí podle mezery a více mezer za sebou ignoruje, ale když specifikuji dělicí znak, tak dělí podle každého výskytu dělicího znaku.
Zobrazeno 16 zpráv z 16.
