A instrução nonlocal em Python

Há casos em que uma função externa tem uma variável à qual precisamos acessar na função interna. Vamos declarar na função outer a variável i. Em relação à função interna, esta variável será uma variável externa (variáveis globais são apenas aquelas declaradas NO código externo). E para a função inner vamos definir a adição de um a i:

pythondef outer():
  i = 0

  def inner():
    i += 1  # resultará em erro

  inner()

  return i

No entanto, para inner a variável i é uma variável local, Python a considera não declarada e exibe o erro correspondente. Antes, esse tipo de erro era corrigido usando a instrução global. No entanto, aqui i é uma variável externa, portanto, deve-se usar a instrução nonlocal. Ela busca os nomes de variáveis listados no escopo mais próximo, excluindo o global, ou seja, i dentro de inner será obtida da variável declarada acima desta função:

pythondef outer():
  i = 0

  def inner():
    nonlocal i
    i += 1

  inner()

  return i

print(outer()) # exibirá 1
Задание 1

No código a seguir, algum programador cometeu um erro:

pythonnum = 10
def outer():
  num = 5

  def inner():
    num -= 2

  inner()

  return num
  
print(outer())

O que há de errado com este código? Encontre e corrija o erro do autor do código.

Задание 2

No código a seguir, algum programador cometeu um erro:

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

  def inner():
    tst = tst ** 3

  inner()

  return tst
  
print(outer())

O que há de errado com este código? Encontre e corrija o erro do autor do código.