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
total = 0cria uma variável no escopo global (do módulo).- Dentro da função,
global totalinforma ao Python quetotalse refere à variável global, não a uma nova local. total += pontossoma o argumento ao valor global e atualiza a variável.return totaldevolve o valor atualizado para quem chamou.- As chamadas
adiciona_pontos(10)eadiciona_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
globaldesnecessariamente para apenas ler o valor: ler não exigeglobal.
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