Python Variáveis
Todo programa precisa guardar coisas enquanto trabalha: o preço do pão, quantos bolos sobraram na vitrine, o nome de quem fez o pedido. Na aula input() você já guardou uma resposta com nome = input(...). Aquilo era uma variável: um nome que o programa usa para lembrar de um valor. Nesta aula você vai entender direito o que ela é, como criar, usar e trocar o valor, e o que o Python responde quando você usa um nome que ele não conhece.
- O que é uma variável: uma etiqueta com um nome, presa a um valor.
- A criar uma variável com o sinal
=e a mostrar o valor dela. - A usar variáveis em contas e guardar o resultado em outra variável.
- A trocar o valor (reatribuição), inclusive a partir do valor antigo:
estoque = estoque - 3. - A diferença entre
"nome"com aspas enomesem aspas. - Os erros reais:
NameError(com a dica "Did you mean") e o=escrito ao contrário.
Os programas desta aula foram rodados com o Python 3.14 na máquina fictícia da Ana (usuária ana, computador notebook), com python3 arquivo.py. Cada caixa "Experimente" roda o mesmo Python de verdade, no seu navegador.
A ideia: uma etiqueta com nome
Na vitrine da padaria, cada bandeja tem uma plaquinha: "Pão de queijo", "Sonho", "Bolo de fubá". A atendente não precisa decorar onde está cada coisa: ela procura pela plaquinha. E a plaquinha "Bolo do dia" pode ir para outra bandeja amanhã, quando o bolo do dia for outro: o nome é o mesmo, o que ele indica muda.
Muita gente explica variável como uma caixa com etiqueta: a etiqueta é o nome, e o que está dentro é o valor. É uma boa primeira imagem. No Python, a imagem mais fiel é a da etiqueta presa ao valor: o valor (o número 7.5, o texto "Ana") existe na memória do computador, e a variável é um nome amarrado a ele. Quando você troca o valor de uma variável, o Python muda a etiqueta de lugar, amarrando-a ao valor novo.
| Parte | Nome técnico | Exemplo |
|---|---|---|
| A plaquinha, a etiqueta | o nome da variável | preco, estoque, nome |
| O que está preso à etiqueta agora | o valor | 7.5, 10, "Ana" |
| Prender a etiqueta a um valor | atribuição | preco = 7.5 |
O nome "variável" vem daí: o valor preso à etiqueta pode variar enquanto o programa roda.
1. Criando uma variável
Para criar uma variável, escreva o nome, o sinal = e o valor:
preco = 7.5
print(preco)
print("O pão de forma custa", preco)
$ python3 preco.py 7.5 O pão de forma custa 7.5
- preco
- O nome da variável, escolhido por você. Sem acento e em minúsculas, que é o costume (as regras estão na próxima aula, Nomes de Variáveis).
- =
- Leia como "recebe": preco recebe 7.5. Não é o "igual" da matemática, que afirma que dois lados são iguais; aqui é uma ordem: "prenda o nome da esquerda ao valor da direita". (Quem compara se dois valores são iguais é o
==, na aula Comparações.) - 7.5
- O valor. Pode ser um número, um texto entre aspas, o resultado de uma conta, o que o
input()devolveu… - print(preco)
- Usa a variável. Onde o Python encontra o nome
preco, ele coloca o valor preso a ele,7.5.
A linha preco = 7.5 não mostra nada na tela: ela só guarda. Quem mostra é o print.
Em algumas linguagens, como C e Java, você precisa avisar antes que tipo de valor a variável vai guardar (int idade = 29;). No Python, não: a variável nasce na primeira vez que recebe um valor, e o próprio valor sabe o seu tipo. Os tipos são o assunto da aula Tipos de Dados.
No modo interativo
No >>> (aula O Modo Interativo), digitar o nome de uma variável mostra o valor dela, sem precisar de print:
$ python3 Python 3.14.4 (main, Aug 20 2026, 10:41:58) [GCC 15.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> preco = 7.5 « a atribuição não mostra nada >>> preco 7.5 >>> preco * 2 15.0 >>> exit()
2. Variáveis em contas
Uma variável pode entrar em qualquer lugar onde entraria o valor dela. E o resultado de uma conta pode ser guardado em outra variável:
preco = 7.5
quantidade = 3
total = preco * quantidade
print("Total:", total)
$ python3 compras.py Total: 22.5
precorecebe7.5.quantidaderecebe3.- Na linha 3, o Python primeiro resolve o lado direito do
=: troca os nomes pelos valores,7.5 * 3, e calcula22.5. Só depois prende o nometotala esse resultado. - O
printmostra o texto e o valor detotal.
A vantagem aparece quando o preço muda: você troca uma linha (preco = 8.0) e todas as contas que usam preco acompanham. Sem variável, você teria de caçar cada 7.5 espalhado pelo programa.
Missão: a Ana vai levar 4 pães de forma. Crie uma variável quantidade com o valor 4, numa linha só para ela, e use-a na conta no lugar do 3. O total deve dar 30.0.
preco = 7.5
total = preco * 3
print("Total:", total)
preco = 7.5
quantidade = 4
total = preco * quantidade
print("Total:", total)
3. Trocando o valor (reatribuição)
Uma variável que já existe pode receber outro valor a qualquer momento. É a mesma escrita, nome = valor; o valor antigo é esquecido:
estoque = 10
print("Estoque:", estoque)
estoque = 7
print("Estoque:", estoque)
$ python3 estoque.py Estoque: 10 Estoque: 7
O mesmo print mostrou valores diferentes, porque, entre um e outro, a etiqueta estoque foi tirada do 10 e presa ao 7. Isso se chama reatribuição ("atribuir de novo"). O programa roda de cima para baixo, e cada linha vê o valor que a variável tem naquele momento.
Usando o valor antigo para calcular o novo
Na padaria, a Ana não sabe de cabeça quantos bolos vão sobrar: ela sabe quantos tinha e quantos vendeu. Dá para escrever exatamente isso:
estoque = 10
print("Abrimos com", estoque, "bolos")
estoque = estoque - 3
print("Depois da manhã:", estoque, "bolos")
estoque = estoque + 5
print("Depois da fornada:", estoque, "bolos")
$ python3 vendas.py Abrimos com 10 bolos Depois da manhã: 7 bolos Depois da fornada: 12 bolos
- estoque = estoque - 3
- Na matemática, isso seria um absurdo (nenhum número é igual a ele mesmo menos 3). No Python faz todo sentido, porque o
=é "recebe" e o lado direito é calculado primeiro. - estoque - 3
- Primeiro passo: o Python pega o valor atual,
10, e calcula10 - 3, que dá7. - estoque = …
- Segundo passo: a etiqueta
estoquepassa a ficar presa ao7.
Esse jeito de atualizar uma variável é tão comum que tem uma forma curta, estoque -= 3, que você vai ver em Operadores de Atribuição.
Missão: a padaria abriu com 10 bolos e vendeu 4. Antes do último print, acrescente uma linha que tire 4 do estoque a partir do valor atual (estoque = estoque - …). Deve aparecer Sobraram 6 bolos.
estoque = 10
print("Abrimos com", estoque, "bolos")
print("Sobraram", estoque, "bolos")
estoque = 10
print("Abrimos com", estoque, "bolos")
estoque = estoque - 4
print("Sobraram", estoque, "bolos")
Copiar o valor de uma variável para outra
Uma variável também pode receber o valor de outra:
manha = 12
tarde = manha
manha = 20
print("manhã:", manha)
print("tarde:", tarde)
$ python3 copia.py manhã: 20 tarde: 12
A linha tarde = manha prende a etiqueta tarde ao mesmo valor que manha tinha naquele momento, o 12. Depois, manha = 20 muda só a etiqueta manha de lugar; a tarde continua presa ao 12. As duas variáveis não ficam "ligadas" para sempre. (Com listas, que você vai ver mais adiante, essa história tem um detalhe a mais, explicado em Mutável × Imutável.)
A variável pode trocar até de tipo
recado = 10 print(recado) recado = "dez pães" print(recado)
$ python3 muda-tipo.py 10 dez pães
A etiqueta recado estava presa a um número e passou a estar presa a um texto. O Python deixa. Mas, num programa de verdade, uma variável que muda de tipo no meio do caminho costuma confundir quem lê. Dê a cada variável um papel só.
4. Com aspas é texto, sem aspas é variável
Na aula print(), a regra era: com aspas é texto, sem aspas é valor. Agora que existem variáveis, ela fica assim:
nome = "Ana"
print("nome")
print(nome)
$ python3 aspas-var.py nome Ana
print("nome")mostra o textonome, as quatro letras.print(nome)mostra o valor da variávelnome, que éAna.
Na primeira linha, "Ana" tem aspas porque é o texto guardado. Já o nome da variável nunca leva aspas.
Formas diferentes de chegar ao mesmo resultado
print("Total:", 7.5 * 3)
total = 7.5 * 3
print("Total:", total)
preco = 7.5
quantidade = 3
total = preco * quantidade
print("Total:", total)
As três partes mostram Total: 22.5.
| Forma | Quando usar |
|---|---|
A conta direto no print | Uma conta rápida, que você não vai usar de novo |
| Uma variável para o resultado | Quando o resultado vai ser usado mais de uma vez, ou a linha do print ficaria comprida |
| Uma variável para cada valor | O mais legível: cada número ganha um nome que diz o que ele é. preco * quantidade se explica sozinho; 7.5 * 3, não. Prefira este em programas de verdade |
Quando dá errado
NameError com dica
quantidade = 3 print(quantidad)
$ python3 digitou-errado.py
Traceback (most recent call last):
File "/home/ana/digitou-errado.py", line 2, in <module>
print(quantidad)
^^^^^^^^^
NameError: name 'quantidad' is not defined. Did you mean: 'quantidade'?
- File "/home/ana/digitou-errado.py", line 2
- O erro está na linha 2. A linha 1 rodou sem problema.
- ^^^^^^^^^
- Aponta o nome que o Python não reconheceu.
- NameError: name 'quantidad' is not defined.
- "Erro de nome: o nome
quantidadnão está definido." Ninguém criou uma variável com esse nome, e o Python não adivinha. - Did you mean: 'quantidade'?
- "Você quis dizer
quantidade?" O Python procurou, entre os nomes que existem, um bem parecido, e achou. Essa dica é uma das ajudas das versões novas do Python.
Como consertar: escreva o nome exatamente como foi criado.
Preco = 7.5 print(preco)
$ python3 maiusc.py
Traceback (most recent call last):
File "/home/ana/maiusc.py", line 2, in <module>
print(preco)
^^^^^
NameError: name 'preco' is not defined. Did you mean: 'Preco'?
Para o Python, Preco e preco são duas variáveis diferentes. Foi criada a Preco, com P maiúsculo, e usada a preco, que não existe. Como consertar: use sempre minúsculas nos nomes de variáveis, e o problema nem aparece.
print(total) total = 25
$ python3 antes.py
Traceback (most recent call last):
File "/home/ana/antes.py", line 1, in <module>
print(total)
^^^^^
NameError: name 'total' is not defined
A variável total existe no arquivo, mas só na linha 2. O Python roda de cima para baixo: quando chegou à linha 1, total ainda não tinha sido criada. Desta vez, sem "Did you mean": não existe nenhum nome parecido. Como consertar: crie a variável antes de usá-la.
= ao contrário
10 = estoque
$ python3 invertido.py
File "/home/ana/invertido.py", line 1
10 = estoque
^^
SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?
"Não dá para atribuir a um literal aqui. Talvez você quisesse == em vez de =?" Um literal é um valor escrito direto no código, como 10 ou "Ana". O = sempre prende o nome da esquerda ao valor da direita, e 10 não é um nome. O Python sugere o == porque acha que talvez você quisesse comparar. Como consertar: o nome sempre do lado esquerdo, estoque = 10.
== no lugar de =
preco == 7.5 print(preco)
$ python3 igual-igual.py
Traceback (most recent call last):
File "/home/ana/igual-igual.py", line 1, in <module>
preco == 7.5
^^^^^
NameError: name 'preco' is not defined
O == não cria nada: ele pergunta "preco é igual a 7.5?". Para perguntar, o Python precisa do valor de preco, que não existe. Como consertar: para guardar, um = só.
preco = "7.5" print(preco * 2)
$ python3 texto-num.py 7.57.5
Sem erro, e um resultado estranho: 7.57.5. Com aspas, "7.5" é um texto, e texto vezes 2 é o texto repetido duas vezes (aula Juntar e Repetir Textos). Como consertar: números sem aspas, preco = 7.5. (Se o valor veio do input(), converta com float(), como na aula input().)
Missão: o programa para com NameError. Rode, leia a dica do Python e conserte.
preco = 7.5
quantidade = 3
total = preco * qantidade
print("Total:", total)
preco = 7.5
quantidade = 3
total = preco * quantidade
print("Total:", total)
Referência rápida
| Escrita | O que faz |
|---|---|
preco = 7.5 | Cria a variável preco (ou troca o valor, se já existir). Não mostra nada |
print(preco) | Mostra o valor da variável |
total = preco * quantidade | Calcula o lado direito e guarda o resultado em total |
estoque = estoque - 3 | Calcula com o valor atual e guarda o resultado na mesma variável |
tarde = manha | tarde recebe o valor que manha tem agora |
"nome" × nome | Com aspas: o texto. Sem aspas: o valor da variável |
| Mensagem | Causa provável |
|---|---|
NameError: name 'quantidad' is not defined. Did you mean: 'quantidade'? | Nome digitado errado (ou com maiúscula diferente) |
NameError: name 'total' is not defined | Variável usada antes de ser criada, ou nunca criada |
SyntaxError: cannot assign to literal here | O valor do lado esquerdo do =: o nome vai à esquerda |
NameError numa linha com == | == (comparar) no lugar de = (guardar) |
7.57.5 em vez de 15.0 | Número guardado entre aspas (é texto) |
Exercícios
1. Crie a variável
Complete para que a variável bolos receba o valor 8:
2. Qual é a saída?
pacotes = 5 pacotes = pacotes + 2 print(pacotes)
3. E esta?
a = 3 b = a a = 10 print(b)
4. Como se lê preco = 7.5?
5. nome = "Ana". O que mostra print("nome")?
6. Qual destas linhas dá SyntaxError?
Missão final: o troco
Missão: a cliente pagou 50 por uma compra de 22.5. Crie uma variável troco com a conta pago - compra e mostre Troco: 27.5 usando essa variável.
pago = 50 compra = 22.5
pago = 50
compra = 22.5
troco = pago - compra
print("Troco:", troco)
Resumo
- Uma variável é um nome (uma etiqueta) preso a um valor. Ela nasce na primeira vez que recebe um valor; não é preciso dizer o tipo.
nome = valorse lê "nome recebe valor". O lado direito é calculado primeiro; o nome fica sempre à esquerda.- Uma variável pode receber outro valor a qualquer momento (reatribuição); cada linha vê o valor daquele momento.
estoque = estoque - 3calcula com o valor atual e guarda o resultado na mesma variável.tarde = manhacopia o valor de agora; mudarmanhadepois não mudatarde.- Com aspas é texto; sem aspas é o nome de uma variável.
- Nome que não existe (digitado errado, com maiúscula diferente ou usado antes de criar) dá
NameError, muitas vezes com a dica "Did you mean".