Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 18. diel - Funkcie a výnimky v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Dušan Kovářík:3.1.2024 23:49

Článek je dobrý, jen to používání while True: nemůžu tak docela strávit :) Udělal jsem si to jinak.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Dušan Kovářík
DarkCoder:4.1.2024 9:42

Nedivím se, neboť články o cyklech postrádají důležité detaily. Dále si pak doposud viděl pouze klasickou variantu s relačními operátory. Jde o to, že cyklus while očekává výraz. Výrazem může být například literál, logická hodnota, návratová hodnota funkce, apod. Tento výraz se následně konvertuje na logickou hodnotu True nebo False a dle tohoto buď dochází k provádění příkazů uvnitř cyklu (v případě True) nebo je cyklus přeskočen (v případě False) a řízení programu následuje prvním příkazem za cyklem. Tato konstrukce nekonečného cyklus while se v programování používá velmi často.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Dušan Kovářík:4.1.2024 10:08

Ne, tak jsem to nemyslel. Já vím, jak funguje cyklus while. Jen mi to prostě nepřijde jako úplně nejlepší praktika, ale to může být jen moje osobní preference...

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Dušan Kovářík
DarkCoder:4.1.2024 11:52

Zkus si zpracovat následující úkol:

Zadání:

Napiš program v Pythony, který umožňuje uživateli zadávat čísla, dokud nezadá 0, a na konci vypíše jejich součet.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Dušan Kovářík:4.1.2024 12:58

Jeden z mnoha možných způsobů, který mi zabral 2 minuty práce:

soucet = 0
konec = False
while not konec:
    cislo = int(input("Zadej celé číslo (nulu pro konec): "))
    soucet += cislo
    if cislo == 0:
        konec = True

print("Součet zadaných čísel je", soucet)

Já vím, teď můžeš argumentovat, že je to komplikované kvůli proměnné konec nebo tak něco, ale o to tady nejde. Není to o hledání zrovna těch případů, kde while True: má zrovna smysl, protože já jsem v původním komentáři reagoval na příklady v článku, takže nerozumím, jak s tím tvoje zadání souvisí.

Avatar
Dušan Kovářík:4.1.2024 13:01

Ale i tak mi to přijde přehlednější, protože z podmínky cyklu je hned vidět, co se testuje a v cyklu není žádný break.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na Dušan Kovářík
DarkCoder:4.1.2024 13:09

Komplikované to není, jen použití řídící proměnné je zbytečné. Z cyklu se pak vyskakuje přes break. Smyslem tohoto příkladu bylo vidět tuto efektivní techniku.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovedá na DarkCoder
Dušan Kovářík:4.1.2024 13:17

Jak jsem říkal...

Avatar
Jaromír Volko:6.1.2024 14:00

Ahojky, není mi jasné proč mi tento program nefunguje. Vím, že se to dá udělat jednodušeji, ale když už jsem to udělal, chci vědět kde je chyba:

def soucin_seznamu_cisel(*seznam):
    mezisoucin = seznam[0]
    pocet = len(seznam)
    i = 1
    while(i < pocet):
        mezisoucin *= seznam[i]
        i += 1
    return mezisoucin

print("Napiš seznam čísel oddělených čárkami:")
cisla = input("Čísla:")
seznam_cisel = cisla.split(',')
print(seznam_cisel)
print("Výsledek:", soucin_seznamu_cisel(seznam_cisel))

Je asi jasné, že jsem chtěl jako výsledek součin všech zadaných čísel.
Míra

Avatar
Karel Zaoral
Člen
Avatar
Odpovedá na Jaromír Volko
Karel Zaoral:6.1.2024 19:11

Ahoj Míro, palec nahoru, že zkoušíš!
Moje připomínky. Super, že ses naučil využívat *! Jen pro jistotu: Hvězdička se používá k rozbalení seznamu nebo n-tice do argumentů funkce, když funkce očekává proměnný počet argumentů. Tady tedy není potřeba.
dále, mezisoucin = seznam[0] je také zbytečné, stačí přece int nastavený na výchozí hodnotu jedna (násobení jedničkou nic nezmění).

Takže funkce pro násobení se dá zjednodušit třeba takto:

def soucin_seznamu_cisel(seznam):
    soucin = 1
    for cislo in seznam:
        soucin *= cislo
    return soucin

Dál, načtená čísla v seznamu seznam_cisel jsou ve formátu str, musíš je přetypovat na int:

for i in range(0, len(seznam_cisel)):
    seznam_cisel[i] = int(seznam_cisel[i])

# nebo zkráceně takto:
seznam_cisel = [int(i) for i in seznam_cisel]
#  tomuto způsobu zápisu se říká seznamová komprehence

Teď už bys to měl složit dohromady. Kdybys ještě potřeboval poradit, napiš. Hodně štěstí do Nového roku!

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 124.