NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 18 - Funkce a výjimky v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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.

 
Odpovědět
3.1.2024 23:49
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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.

Odpovědět
4.1.2024 9:42
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá 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...

 
Odpovědět
4.1.2024 10:08
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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.

Odpovědět
4.1.2024 11:52
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá 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í.

 
Odpovědět
4.1.2024 12:58
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.

 
Odpovědět
4.1.2024 13:01
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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.

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

Jak jsem říkal...

 
Odpovědět
4.1.2024 13:17
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

 
Odpovědět
6.1.2024 14:00
Avatar
Karel Zaoral
Člen
Avatar
Odpovídá 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!

 
Odpovědět
6.1.2024 19:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 118.