Diskuze: Python jak se dá za každými pěti znaky napsat jiný znak?????
Člen
Zobrazeno 10 zpráv z 10.
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 |
Stačí ti změnít tu podmínku, ne? 
Zkus se zamyslet,
ty nechceš udělat svislou čárku pokud se "i = 4", ale chceš ji nejspíš
udělat když "i" je dělitelné počtem hvězdiček, které chceš vedle sebe
beze zbytku, ne? 
Dík za radu už jsem na to s tvojí pomocí přišel
if i%5==4 neboli 5-1 za rovná se musel jsem si to ještě posunout aby to
nevypsalo za první hvězdičkou 
Rychlejsi je pouzit dalsi promenou a pocitat ji do 4 nez pomale deleni.
Nedalo mi to a musel jsem to vyzkoušet.
import time
def stars(n):
for i in range(n):
print("*", end="")
if i % 5 == 4:
print("!", end="")
def stars2(n):
j = 0
for i in range(n):
print("*", end="")
j += 1
if j == 5:
print("!", end="")
j = 0
measurements1 = []
measurements2 = []
repeat = 10000
for i in range(0, repeat):
start = time.perf_counter_ns()
stars(100)
end = time.perf_counter_ns()
measurement = (end - start) / 1000
measurements1.append(measurement)
start = time.perf_counter_ns()
stars2(100)
end = time.perf_counter_ns()
measurement = (end - start) / 1000
measurements2.append(measurement)
print()
print("stars: " + str(sum(measurements1) / repeat))
print("stars2: " + str(sum(measurements2) / repeat))
-
stars: 412.83270000000033
stars2: 415.24850000000055
Vychází mi to +- stejně. Nevím jestli mám vše správně, když tak to
můžeme vyladit 
Někdy je o deset mikrosekund lepší jedna funkce jindy druhá.
3.7 tam nemaji, chtel jsem to testnout s while, ale py neumim, takze mi to
tam nejede ani po snizeni poctu cyklu. A musel jsem zmenit perf, protoze 3.6
neumi nanosekundy _ns. Takze, jestli vis, co s tim, tak pak pripadne zkus zmenit
n na 10000 a pocet opakovani na mene. Treba se ty cisla budou menit.
Ale becne pro spoustu jazyku plati, ze dalsi promenna by mela byt rychlejsi nez
deleni.
A plati, ze procesory se vyvijeji a mozna to maji urychlene tak, ze to bude
stejne.
http://www.pythontutor.com/visualize.html#mode=display
import time
def stars(n):
for i in range(n):
print("*", end="")
if i % 5 == 4:
print("!", end="")
def stars2(n):
j = 0
for i in range(n):
print("*", end="")
j += 1
if j == 5:
print("!", end="")
j = 0
def stars3(n):
i = 0
j = 0
while i<n:
print("*", end="")
++j
if j == 5:
print("!", end="")
j = 0
++i
measurements1 = []
measurements2 = []
measurements3 = []
repeat = 1000
for i in range(0, repeat):
start = time.perf_counter()
stars(100)
end = time.perf_counter()
measurement = (end - start) / 100000
measurements1.append(measurement)
start = time.perf_counter()
stars2(100)
end = time.perf_counter()
measurement = (end - start) / 100000
measurements2.append(measurement)
start = time.perf_counter()
stars3(100)
end = time.perf_counter()
measurement = (end - start) / 100000
measurements3.append(measurement)
print()
print("stars: " + str(sum(measurements1) / repeat))
print("stars2: " + str(sum(measurements2) / repeat))
print("stars3: " + str(sum(measurements3) / repeat))
Python neumí jednoduché ++
Je třeba to psát jako += 1
Výsledky:
stars: 1254.4322000000031
stars2: 1321.747599999994
stars3: 1377.4502999999913
Aha. Ale mi to prave nechtelo chodit ani s tim.
To pak postrada jakykoliv smysl. Inc byva tak o 1/3 rychlejsi nez +1, takze by
se vyplatilo kvuli tomu mit dalsi promenou.
On nejspis je problem dole v tom limitu.
Jeste jsem zkusil tuhle upravu.
from time import perf_counter
def stars(n):
for i in range(n):
print("*", end="")
if i % 5 == 4:
print("!", end="")
def stars2(n):
j = 0
for i in range(n):
print("*", end="")
j += 1
if j == 5:
print("!", end="")
j = 0
def stars3(n):
i = 0
j = 0
while (i < n):
print("*", end="")
j += 1
if j == 5:
print("!", end="")
j = 0
i += 1
measurement1 = 0
measurement2 = 0
measurement3 = 0
repeat = 10
for i in range(0, repeat):
# start = perf_counter()
# stars(100)
# end = perf_counter()
# measurement1 = end - start
# start = perf_counter()
# stars2(100)
# end = perf_counter()
# measurement2 = end - start
start = perf_counter()
stars3(100)
end = perf_counter()
measurement3 = end - start
print()
print("stars: " + str(measurement1) )
print("stars2: " + str(measurement2) )
print("stars3: " + str(measurement3) )
#measurement1 0.093
#measurement2 0.1291
#measurement3 0.1544
Vysvetlí mi niekto, aký má pre autora vlákna zmysel merať rýchlosť zvyšku po delením vs premennej na počítadlo?
IMHO to pre začiatočníka, ktorý ledva začína chápať základy programovania na strednej nie je podstatné vôbec. Ak niekomu reálne záleží na takto malých rozdieloch v rýchlosti, tak 1) buď pravdepodobne vôbec nepoužíva Python, alebo 2) nemá problém pozrieť sa na CPython repo na githube. Resp. dosť pravdepodobne dokonca vie, na aké operácie v ASM sa to in the end preloží aj bez toho, aby sa tam musel pozerať.
Smysl je prostý, naučí se lépe optimalizovat a nahlížet na úlohu více způsoby. Schopnost dokázat zvolit vhodný algoritmus pro vyřešení úlohy je to, co odlišuje běžného programátora od čaroděje. Co se týká rychlosti, naprosto souhlasím.. Jeden z důvodů, proč nepoužívám Python ale C..
Zobrazeno 10 zpráv z 10.
