Příkaz nonlocal v Pythonu

Nastávají případy, kdy ve vnější funkci je proměnná, ke které je potřeba získat přístup ve vnitřní funkci. Deklarujme ve funkci outer proměnnou i. Ve vztahu k vnitřní funkci bude tato proměnná vnější (globálními jsou proměnné deklarované POUZE ve vnějším kódu). A funkci inner nastavme přičtení k i jedničku:

pythondef outer():
  i = 0

  def inner():
    i += 1  # vypíše [4, 9, 25]

  inner()

  return i

Avšak pro inner je proměnná i lokální, Python ji považuje za nedeklarovanou a vypisuje odpovídající chybu. Dříve se podobná chyba opravovala pomocí příkazu global. Avšak zde je i vnější proměnná, proto je třeba použít příkaz nonlocal. Ten bere uvedené názvy proměnných z nejbližšího rozsahu viditelnosti, kromě globálního, tj. i uvnitř inner bude brána z proměnné, deklarované výše než tato funkce:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # vypíše 1
Задание 1

V následujícím kódu nějaký programátor udělal chybu:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Co je špatně s tímto kódem? Najděte a opravte chybu autora kódu.

Задание 2

V následujícím kódu nějaký programátor udělal chybu:

pythonnum = 3
def outer():
  num += 1
  tst = num

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Co je špatně s tímto kódem? Najděte a opravte chybu autora kódu.