Vnorené cykly

Skúsme vytvoriť program, ktorý načíta číslo n a čísla od 0 po n - 1 vypíše na 3 riadkoch za sebou. To nemôže byť ťažké, nie?

# Program vypise cisla od 0 po n - 1 ("n" je na vstupe) na 3 riadkoch za sebou.
n = int(input())
for i in range(n):
  print(f' {i}', end='')
print() # novy riadok

for i in range(n):
  print(f' {i}', end='')
print() # novy riadok

for i in range(n):
  print(f' {i}', end='')
print() # novy riadok

# Vstup:
# 3
# Vystup:
# 0 1 2
# 0 1 2
# 0 1 2

Príklad sme ale uvádzali aj z iného dôvodu. Asi už tušíte, že trikrát skopírovaný for-cyklus nevyzerá najlepšie. Ako by sme teda mohli zopakovať riadky viackrát? No predsa cyklom! V cykle, ktorý sa zopakuje 3-krát napíšeme cyklus, ktorý vypíše prvky od 0 po n - 1.

# Program vypise cisla od 0 po n - 1 ("n" je na vstupe) na 3 riadkoch za sebou. Pouziva vnoreny cyklus.
n = int(input())
for i in range(3):
  for j in range(n):
    print(f' {j}', end='')
  print() # novy riadok
# Vstup:
# 3
# Vystup:
# 0 1 2
# 0 1 2
# 0 1 2

Dva cykly od seba v označení oddelíme tak, že cyklus opakujúci sa 3-krát nazveme vonkajší a cyklus v ňom nazveme vnútorný. Všimnite si, že vnútorný cyklus musí použiť inú premennú ako i, pretože inak by došlo ku kolízii mien a vonkajší cyklus by mohol byť ovplyvnený vnútorným. Vo vnútornom cykle sme preto použili názov j. Vždy, keď sa začne vykonávať telo vonkajšieho cyklu, spustí sa znovu vnútorný cyklus vypisujúci čísla od 0 po n - 1.

Tabuľka násobilky

Predstavte si teraz, že chceme vytvoriť malú tabuľku násobilky do 4. Tabuľka násobilky je jednoduchá tabuľka, ktorá v ľubovoľnej bunke obsahuje vynásobené číslo riadku a stĺpca.

* 1 2 3 4
1 1 2 3 4
2 2 4 6 8
3 3 6 9 12
4 4 8 12 16

Teraz napíšeme program, ktorý vypíše telo takejto tabuľky. Ako by sme postupovali, keby sme chceli takúto tabuľku vypísať po riadkoch zľava doprava? V riadku s číslom 1 sa vystriedajú všetky hodnoty stĺpcov (14). Potom sa presunieme na ďalší riadok s číslom 2 a opäť sa vystriedame všetky hodnoty stĺpcov (14). Takto by sme pokračovali až do posledného riadku.

Všimnite si, že pre každý riadok prejdeme vždy všetky stĺpce. Môžeme si to predstaviť ako cyklus cez riadky od 1 do 4, v ktorom je navyše vnorený cyklus cez stĺpce od 1 do 4.

# Vypis tabulky nasobilky velkosti 5x5.
for i in range(1, 5):
  for j in range(1, 5):
    # Medzeru medzi cislami nevypisujeme pred prvym cislom v riadku
    if j > 1:
       print(' ', end='')
    print(i * j, end='')
  print() # novy riadok