IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Špatné testovací řešení

V předchozím kvízu, Online test znalostí Python 2.7, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Alexandr Saveljev:12.7.2023 11:01

Dobrý den!
V tutoriálu: Řešené úlohy k 9. a 10. lekci Pythonu
máte řešení testu jako|:

print("ASCII tabulka")
print("=============")
for i in range(256):
    print(str(i) + ' : ' + str(chr(i)) + '\t', end='')
input()

Ale pánové, toto řešení neodpovídá následujícímu úkolu:
na foto uvedena tabulka, mající v řadku 10 prvků.
Tj. tabulka měla by být 10 x prvků a 26 řadků. Ne?

Zkusil jsem: Zkusil jsem napsat kód, ale neuspěl:

print("ASCII tabulka")
print("=============")

seznam = list(range(0, 256)) # seznam kódů a názvů
kod = 0 #první č. kodu v tabulce
tabulka = ""

for kod, nazev in enumerate(seznam):
    nazev = chr(kod)
    kod = kod + 1
    prvek = ("kod: nazev")
    if prvek != "":
        tabulka.append(prvek)

for kod_qty in tabulka:
    kod_qty = tabulka.count(kod)
    while kod_qty %10 == 0:
        print("prvek" + "\t", end="\n")

Chci docílit: Pochopit, jak bych mohl popsát kéod pro tabulku, která má 10 x prvků a 26 řadků.

 
Odpovědět
12.7.2023 11:01
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:12.7.2023 12:44

Vypisuj postupně všechny znaky v rozsahu ASCII a po každém desátém znaku odřádkuj.

def vypis_ascii_tabulku():
    for i in range(256):
        print(chr(i), end=" ")
        if (i % 10) == 9:
            print()

vypis_ascii_tabulku()
Nahoru Odpovědět
12.7.2023 12:44
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Alexandr Saveljev:12.7.2023 13:09

Takže, je to tak jednoduché?
Moc krát Vám děkuji!

 
Nahoru Odpovědět
12.7.2023 13:09
Avatar
Odpovídá na Alexandr Saveljev
Alexandr Saveljev:12.7.2023 13:15

Zkusil jsem napsat to trochu jinak:

print("ASCII tabulka")
print("=============")

seznam = list(range(0, 256)) # seznam kódů a názvů
kod = 0 #první č. kodu v tabulce

for kod, nazev in enumerate(seznam):
    nazev = chr(kod)
    kod = kod + 1
    print(f"{kod}: {nazev}" + "\t", end=" ")
    if kod % 10 == 0:
        print()

Všechno funguje. ale mám druhou otázku ohledně funkce end=" ".
Poraďe prosím, proč v tomto případě:

print(f"{kod}: {nazev}" + "\t", end=" ")

nefunguje zpusob:

print(f"{kod}: {nazev}", end="\t")

?
Proč nemohu použit end="\t" pro zadání koncovky tabulatorem?

 
Nahoru Odpovědět
12.7.2023 13:15
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:12.7.2023 14:26
print("ASCII tabulka")
print("=============")

seznam = list(range(256))  # seznam kódů a názvů

for kod, nazev in enumerate(seznam):
    nazev = chr(kod)
    print(f"{kod}: {nazev}", end="\t")
    if kod % 10 == 9:
        print()

Tento kód je funkční, ověřováno v online překladači.

Dvě věci:

Není třeba vytvářet seznam. Kód i znakovou reprezentaci kódu lze vyjádřit přes iterator.

Je dobré vypisovat pouze tisknutelne znaky (od kódu 32), jinak výstup nemusí být korektní. Viz znaky LF a CR a možné další.

Nahoru Odpovědět
12.7.2023 14:26
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Alexandr Saveljev:12.7.2023 15:04

Děkuji!!!
Jen: znaky LF a CR a kód 32 - co to znamená?

 
Nahoru Odpovědět
12.7.2023 15:04
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:12.7.2023 15:10

LF - Line Feed - přesun na nový řádek
CR - Carriage Return - návrat na začátek řádku

Kód 32 dle ASCII představuje mezeru. Znaky 0 až 31 jsou řídící netisknutelné znaky.

Nahoru Odpovědět
12.7.2023 15:10
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Alexandr Saveljev:12.7.2023 16:41

Teď je všechno jasné!
Moc krát Vám děkuji!
Pokračuji studování.

 
Nahoru Odpovědět
12.7.2023 16:41
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 8 zpráv z 8.