Fácil Python

Modificando variável global

Enunciado

Crie uma função adiciona_pontos(pontos) que some pontos a uma variável global total e retorne o novo valor. Use a declaração global.

Requisitos

  • A função deve usar global total.
  • Cada chamada deve acumular o valor em total.
  • A função deve retornar o valor atualizado de total.

Código inicial

total = 0

def adiciona_pontos(pontos):
    # complete aqui
    pass

print(adiciona_pontos(10))
print(adiciona_pontos(5))

Saída esperada

10
15
Ver dica

Sem global, a atribuição total += pontos criaria uma variável local e daria erro de UnboundLocalError.

Mostrar solução
total = 0

def adiciona_pontos(pontos):
    global total          # permite modificar a variável do módulo
    total += pontos
    return total

print(adiciona_pontos(10))  # 10
print(adiciona_pontos(5))   # 15

Passo a passo

  1. total = 0 cria uma variável no escopo global (do módulo).
  2. Dentro da função, global total informa ao Python que total se refere à variável global, não a uma nova local.
  3. total += pontos soma o argumento ao valor global e atualiza a variável.
  4. return total devolve o valor atualizado para quem chamou.
  5. As chamadas adiciona_pontos(10) e adiciona_pontos(5) acumulam os valores, resultando em 10 e 15.

Por que funciona

Sem global, uma atribuição a total dentro da função criaria uma variável local, e o += tentaria ler essa local antes de atribuí-la, gerando UnboundLocalError. A declaração global liga o nome total ao escopo do módulo, seguindo a regra LEGB: ao encontrar global, o interpretador pula direto para o escopo global.

Erros comuns

  • Esquecer global total:

def adiciona_pontos(pontos): total += pontos # UnboundLocalError

O erro ocorre porque `total` é tratado como local e ainda não foi atribuído.
- Declarar `global` e ainda assim criar variável local com outro nome:
```python
def adiciona_pontos(pontos):
  global total
  total_local = total + pontos  # não altera total
  return total_local

A variável global não é modificada.

  • Usar global desnecessariamente para apenas ler o valor: ler não exige global.

Outra forma de resolver

Evitar estado global usando uma lista mutável ou uma classe:

class Placar:
    def __init__(self):
        self.total = 0
    def adiciona(self, pontos):
        self.total += pontos
        return self.total

Essa abordagem é preferível em programas maiores por evitar efeitos colaterais globais.

Saída esperada

10
15