Инструкцијата nonlocal во Python

Има случаи кога во надворешната функција постои променлива на која треба да се добие пристап во внатрешната функција. Да декларираме во функцијата outer променлива i. Во однос на внатрешната функција оваа променлива ќе биде надворешна (глобални се променливите декларирани САМО во надворешниот код). А на функцијата inner ќе и доделиме додавање на i еден:

pythondef outer():
  i = 0

  def inner():
    i += 1  # ќе испише [4, 9, 25]

  inner()

  return i

Сепак, за inner променливата i е локална, Python ја смета за недекларирана и ја прикажува соодветната грешка. Порано ваквата грешка се поправаше со инструкцијата global. Сепак, овде i е надворешна променлива, затоа треба да се користи инструкцијата nonlocal. Таа ги зема наведените имиња на променливи во најблискиот опсег на видливост, исклучувајќи ја глобалната, т.е. i внатре во inner ќе се земе од променливата, декларирана погоре од оваа функција:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # ќе испише 1
Задание 1

Во следниот код некој програмер направи грешка:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

Што не е во ред со овој код? Најдете и поправете ја грешката на авторот на кодот.

Задание 2

Во следниот код некој програмер направи грешка:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

Што не е во ред со овој код? Најдете и поправете ја грешката на авторот на кодот.