Zamilovat si programování Zamilovat si programování
Pouze tento týden až 80% sleva na SQL jazyky
Zamiluj si programování! Až 80 % bodů na prémiový obsah zdarma. Více informací

Diskuze: Pomoc -- Vysvětlení kódu

Python Python Pomoc -- Vysvětlení kódu American English version English version

Aktivity (1)
Avatar
Oliver Solenský:19.11.2017 16:45

Ahoj, čtu knihu Python 3 Výukový kurz (Mark Summerfield) a na konci kapitoly je tento kód. Je pod ním napsáno i vysvětlení, ale sedím nad tím už dva dny a pořád tomu nerozumím. Proto bych chtěl požádat jestli by mi ho někdo nevysvětlil. V programování jsem začátečník.

Zero = [" *** ",
" * * ",
"* ",
"
",
"
",
" * * ",
" *** "]
One = [" * ", "** ", " * ", " * ", " * ", " * ", "***"]
Two = [" *** ", "
", " * ", " * ", " * ", "* ", "*****"]
Three = [" *** ", "* ", " ", " ** ", " ", " ", " *** "]
Four = [" * ", " ** ", " * * ", "
* ", "******", " * ",
" * "]
Five = ["*****", "
", "
", " *** ", " ", " ", " *** "]
Six = [" *** ", "
", "* ", "**** ", "* ", " ", " *** "]
Seven = ["*****", " ", " * ", " * ", " * ", " ", "
"]
Eight = [" *** ", "* ", " ", " *** ", " ", " ", " *** "]
Nine = [" ****", "
", " *", " ****", " *", " *", " *"]

Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]

try:
digits = sys.argv[1]
row = 0
while row < 7:
line = ""
column = 0
while column < len(digits):
number = int(digits[column])
digit = Digits[number]
line += digit[row] + " "
column += 1
print(line)
row += 1
except IndexError:
print("použití: bigdigits.py <číslo>")
except ValueError as err:
print(err, "v", digits)

 
Odpovědět 19.11.2017 16:45
Avatar
Oliver Solenský:19.11.2017 16:46
Zero = ["  ***  ",
        " *   * ",
        "*     *",
        "*     *",
        "*     *",
        " *   * ",
        "  ***  "]
One = [" * ", "** ", " * ", " * ", " * ", " * ", "***"]
Two = [" *** ", "*   *", "*  * ", "  *  ", " *   ", "*    ", "*****"]
Three = [" *** ", "*   *", "    *", "  ** ", "    *", "*   *", " *** "]
Four = ["   *  ", "  **  ", " * *  ", "*  *  ", "******", "   *  ",
        "   *  "]
Five = ["*****", "*    ", "*    ", " *** ", "    *", "*   *", " *** "]
Six = [" *** ", "*    ", "*    ", "**** ", "*   *", "*   *", " *** "]
Seven = ["*****", "    *", "   * ", "  *  ", " *   ", "*    ", "*    "]
Eight = [" *** ", "*   *", "*   *", " *** ", "*   *", "*   *", " *** "]
Nine = [" ****", "*   *", "*   *", " ****", "    *", "    *", "    *"]

Digits = [Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine]

try:
    digits = sys.argv[1]
    row = 0
    while row < 7:
        line = ""
        column = 0
        while column < len(digits):
            number = int(digits[column])
            digit = Digits[number]
            line += digit[row] + " "
            column += 1
        print(line)
        row += 1
except IndexError:
    print("použití: bigdigits.py <číslo>")
except ValueError as err:
    print(err, "v", digits)
 
Nahoru Odpovědět 19.11.2017 16:46
Avatar
Odpovídá na Oliver Solenský
Martin Turner:29.11.2017 7:37

Ahoj,

knihu nemám, ale z kódu je partné, že jde o převod Tebou zadaných čísel na jejich grafické zobrazení pomocí hvězdiček a mezer.
Každé číslo má definovanou grafiku, uloženou v seznamech Zero, One,....., které jsou uloženy do seznamu Digits.
Tebou zapsané číslo (argument při spouštění skriptu) se uloží do proměnné digits.
Cyklus

while column < len(digits):

je určen délkou argumentu, tj. počtu číslic tebou zadaného čísla. V něm se zadaný argument (proměnná digits, která je pythonem uložena jako String) převeden na int => proměnná number. Ta pak slouží pro výběr ekvivalentní položky ze seznamu Digits (číslo 0 = Zero, 1 = One,...) => proměnná digit.
Grafika každého čísla je daná sedmi položkami (řádky), které je potřeba projít a vykreslit (

while row < 7:

), v něm se vždy vypíše grafika řádku daného čísla print(line).

Když zadáš do argumentu jednu číslici (např. 0), projdou cykly pouze seznam Zero a do každého řádku se vypíše jedna položka tohoto seznamu.
Když zadáš dvě číslice (např. číslo 12), začnou se do prvního řádku vypisovat první položky položky ze seznamů One a Two, do druhého řádku druhé položky z těchto seznamů,.... až do konce (tj. sedmých položek).
Doufám, že je Ti to jasnější a že jsem Ti nezamotal hlavu ještě více.
Možná napiš, co konkrétně Ti na kódu není jasné.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 29.11.2017 7:37
Avatar
Odpovídá na Martin Turner
Oliver Solenský:29.11.2017 17:46

Děkuji Ti moc, už jsem to pochopil.

 
Nahoru Odpovědět 29.11.2017 17:46
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 4 zpráv z 4.