NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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: Řešené úlohy k 14.-15. lekci Pythonu. Chybné řešení prvního příkladu

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
Aktivity
Avatar
Alexandr Saveljev:15.8.2023 13:00

Dobrý den!
Mám v programu tmavý text na světlém pozadí.
Zkontroluj, prosím kód, nabidnutý jako řešení:

for i in range(8):
    for j in range(8):
        if (i+j)%2:
            print("█", end="")
        else:
            print(" ", end="")
    print("") # nová řádka
input()

Výsledkem tohoto kódu bude, že levé horní pole šachovnici bude světlé, není tnavé jako v příkladu. Ne?

Zkusil jsem: Zkusil jsem napsat trochu jiný kód:

for i in range(8):
    for j in range(8):
        if ((i + j) % 2) == 0:
            print("█", end=" ")
        else:
            print(" ", end=" ")
    print()

A tady jo, levé horní pole je tmavé (█), jako i je ukázáno v příkladu.

Chci docílit: Chtěl bych pochopit jak spravně číst if (i+j)%2:
Znamená to: jestli (i+j) se dělí na 2 beze zbytku ?

 
Odpovědět
15.8.2023 13:00
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:15.8.2023 13:48

Operátor % (modulo) slouží pro získání zbytku po celočíselném dělení.

Pokud je použito v podmínce, je třeba si uvědomit, že příkaz if se provede tehdy je-li podmínka True.

Výraz:

((i + j) % 2)

bude True pokud i bude sudé a je liché nebo i liché a j sudé. Zkrátka výsledek výrazu i + j lichý.

Máme-li úryvek kódu:

if ((i + j) % 2) putchar('x');
else putchar('o');

a např. i=0, j=0, pak výraz v podmínce bude 0 (False), if se přeskočí a vypíše se znak 'o' v podmínce else.

Pokud ale budeme mít úryvek kódu:

if ((i + j) % 2 == 0) putchar('x');
else putchar('o');

a i=0, j=0, pak výraz v podmínce bude 1 (True), protože 0 == 0 a tak se provede příkaz if a vypíše se znak 'x'.

if ((i + j) % 2)

Výraz můžeš číst jako: Je-li i+j liché, pak ... nebo není-li i+j sudé, pak ...

if ((i + j) % 2 == 0)

výraz můžeš číst jako: je-li i+j sudé, pak ... nebo není-li i+j liché, pak ...

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
15.8.2023 13:48
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Pavel
Člen
Avatar
Pavel:15.8.2023 14:15

Nevím v čem to spouštíš, ale mě tohle funguje korektně (IDLE, powershell, cmd):

for i in range(8):
    for j in range(8):
        if (i+j)%2:
            print("█", end="")
        else:
            print(" ", end="")
    print() # nová řádka



#  █ █ █ █
# █ █ █ █
#  █ █ █ █
# █ █ █ █
#  █ █ █ █
# █ █ █ █
#  █ █ █ █
# █ █ █ █

Tvoje verze produkuje opak (pokud změním end= " " na end=""):

# █ █ █ █
#  █ █ █ █
# █ █ █ █
#  █ █ █ █
# █ █ █ █
#  █ █ █ █
# █ █ █ █
#  █ █ █ █

Pro vysvětlení, proč je první kód správně.

(i + j) % 2
# nultý řádek i = 0
#       nultý sloupec j = 0, (0 + 0) % 2 = 0 -> tiskneme " "
#       první sloupec j = 1, (0 + 1) % 2 = 1 -> tiskneme "█"
#       druhý sloupec j = 2, (0 + 2) % 2 = 0 -> tiskneme " "
#       třetí sloupec j = 3, (0 + 3) % 2 = 1 -> tiskneme "█"
#       atd.
 
Nahoru Odpovědět
+1
15.8.2023 14:15
Avatar
Alexandr Saveljev:16.8.2023 9:13

Píšeš, že # nultý sloupec j = 0, (0 + 0) % 2 = 0 -> tiskneme " "
Ano, to i byla moje otázka.
Protože v Řešené úlohy k 14.-15. lekci Pythonu uveden příklad, kde nultý sloupec je "█".
Tj. má tmavé pole.
Ve Tvém kódu nultý sloupec má světlé pole, tj, " ".

 
Nahoru Odpovědět
16.8.2023 9:13
Avatar
Pavel
Člen
Avatar
Odpovídá na Alexandr Saveljev
Pavel:16.8.2023 20:41

To je otázka zobrazení ` █` v terminálu vypadá např. takhle:

Co je světlé/tmavé?
Neznám zadání, nevím v čem se úlohy v rámci kurzu spouští.

 
Nahoru Odpovědět
16.8.2023 20:41
Avatar
Alexandr Saveljev:17.8.2023 9:26

otázka zobrazení - to je tak, ale pokud v svém kódu máš , to printpvat musí tmavé pole, není světlé.
Ne?
OK, děkuji!

 
Nahoru Odpovědět
17.8.2023 9:26
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 6 zpráv z 6.