NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
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í
+2,50 Kč
Ř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.