Pular para conteúdo

2. Variáveis e tipos

Nesta aula

Ideia central: = não quer dizer "é igual". Quer dizer "guarde" — e entender essa diferença resolve metade dos erros do primeiro mês.

Ao fim você vai conseguir: criar variáveis e trocar o valor delas; rastrear no papel o valor de cada variável linha a linha; reconhecer os quatro tipos básicos; e explicar por que "3" + "4" dá "34".

Por que guardar valores

No capítulo anterior, os números apareciam soltos no meio do programa. Isso funciona enquanto o programa tem três linhas. Depois, não: quando o preço por minuto muda, você tem de achar todos os lugares onde o 0.25 aparece — e vai esquecer um.

Uma variável é um nome que guarda um valor para você usar depois.

clientes = 30
print("Clientes atendidos:", clientes)

# Guardar outro valor no mesmo nome troca o conteudo.
clientes = 31
print("Depois da nova instalacao:", clientes)

# A direita do = e calculada primeiro, depois guardada.
clientes = clientes + 1
print("Depois de mais uma:", clientes)
Clientes atendidos: 30
Depois da nova instalacao: 31
Depois de mais uma: 32

💡 Pense assim: uma etiqueta numa caixa

clientes = 30 cola a etiqueta clientes numa caixa e põe o 30 dentro. Toda vez que o programa escreve clientes, ele abre a caixa e usa o que está lá.

Guardar outro valor com o mesmo nome troca o conteúdo da caixa: o 30 é jogado fora e o 31 entra no lugar. A caixa é uma só.

= não é "é igual"

Esta é a ideia mais importante do capítulo.

Na matemática, x = x + 1 é uma equação sem solução: nenhum número é igual a ele mesmo mais um. Em Python, clientes = clientes + 1 é uma instrução perfeitamente normal, e se lê da direita para a esquerda:

  1. calcule o que está à direita — pegue o valor atual de clientes (31) e some 1, dando 32;
  2. guarde o resultado no nome que está à esquerda.

O = é uma seta apontando para a esquerda. É por isso que estas duas linhas fazem coisas completamente diferentes:

total = preco        # guarda em total o valor de preco
preco = total        # guarda em preco o valor de total

Rastrear no papel

Esta é a habilidade que a Lista 02 treina, e vale mais do que parece: seguir o programa linha a linha, anotando o valor de cada variável.

A = 10
B = 20
print(B)

B = 5
print(A, B)

Antes de rodar, monte a tabela. Uma coluna por variável, uma linha por instrução:

Linha A B Imprime
A = 10 10 —
B = 20 10 20
print(B) 10 20 20
B = 5 10 5
print(A, B) 10 5 10 5
20
10 5

O print(B) mostrou 20 porque naquele momento B valia 20. A linha seguinte mudou B, mas não mudou o que já foi impresso. O programa não volta atrás.

Uma armadilha clássica: trocar dois valores

Como fazer A e B trocarem de valor? A tentativa óbvia não funciona:

A = 10
B = 20

# Tentativa ingenua de trocar os valores de lugar.
A = B
B = A

print(A, B)
20 20

Saiu 20 20, e o 10 sumiu do programa. Rastreie e você vê por quê: na linha A = B, o valor 10 que estava em A é jogado fora para o 20 entrar. Quando a linha seguinte pede "guarde em B o valor de A", o valor de A já é 20.

💡 Pense assim: as duas canecas

Uma caneca com café e outra com leite. Para trocar o conteúdo, você não despeja uma na outra — perderia tudo. Você pega uma terceira caneca vazia.

A = 10
B = 20

# Com uma variavel auxiliar, o valor de A nao se perde.
guardado = A
A = B
B = guardado

print(A, B)
20 10

Nomes de variáveis

O nome pode ter letras, números e o sublinhado _. Não pode começar com número, nem ter espaço, nem acento.

E, principalmente: escolha nomes que digam o que está guardado. preco_por_minuto diz muito mais do que p, e o programa não fica mais lento por isso. Você vai reler o seu próprio código em três semanas, na véspera da prova, e vai agradecer.

Maiúsculas contam: Total e total são dois nomes diferentes. É uma fonte comum de NameError.

Tipos: que espécie de dado é este

Todo valor tem um tipo, que decide o que as operações fazem com ele. Quatro resolvem quase tudo neste semestre:

equipamento = "ROTEADOR-LAB-01"
portas = 24
consumo_watts = 12.5
esta_ligado = True

print(equipamento, type(equipamento))
print(portas, type(portas))
print(consumo_watts, type(consumo_watts))
print(esta_ligado, type(esta_ligado))
ROTEADOR-LAB-01 <class 'str'>
24 <class 'int'>
12.5 <class 'float'>
True <class 'bool'>
Tipo O que guarda Exemplos
int número inteiro 24, 0, -3
float número com casas decimais 12.5, -0.75
str texto (string), sempre entre aspas "ROTEADOR-LAB-01", "24"
bool verdadeiro ou falso True, False

Duas coisas pegam todo mundo no começo:

  • a casa decimal é marcada com ponto, não com vírgula: 12.5, e nunca 12,5;
  • "24" entre aspas é texto, não número. Parece um detalhe e não é.

Por que "3" + "4" dá "34"

# Com numeros, + soma.
print(3 + 4)

# Com textos, + emenda um no outro, sem espaco entre eles.
print("3" + "4")

# Emendar dois textos e util quando e mesmo isso que se quer:
print("ROTEADOR-" + "LAB-01")
7
34
ROTEADOR-LAB-01

O + faz coisas diferentes conforme o tipo: com números, soma; com textos, emenda um no outro. As duas são úteis — e é por isso que o Python não adivinha qual você quis.

Quando os tipos não combinam, ele desiste e avisa:

portas = "24"
print(portas + 1)
TypeError: can only concatenate str (not "int") to str

"can only concatenate str to str" — "só dá para emendar texto com texto". TypeError é sempre isso: a operação não existe para esses tipos.

💡 Pense assim: a unidade de medida

"3 pães + 4 pães" dá 7 pães. "3 pães + 4 reais" não dá nada. O tipo é a unidade do valor: é ele que decide quais operações fazem sentido.

Guarde este erro — ele volta no capítulo 3

Tudo o que vem do teclado chega como texto, mesmo quando a pessoa digita um número. É a causa nº 1 de erro da semana que vem.

Erros comuns deste capítulo

Mensagem ou sintoma Causa provável
NameError: name '...' is not defined nome digitado diferente, ou maiúscula trocada
TypeError: can only concatenate str... tentou somar texto com número
SyntaxError numa linha com 12,5 casa decimal com vírgula; use ponto
a variável não mudou a linha que muda vem depois do print
os dois valores ficaram iguais na troca faltou a variável auxiliar

Resumo

  • nome = valor guarda o valor no nome. = é uma seta para a esquerda, não uma igualdade.
  • O lado direito é calculado primeiro; por isso x = x + 1 faz sentido.
  • Rastrear no papel — uma coluna por variável — é a ferramenta para entender qualquer programa que não faz o que você esperava.
  • Trocar dois valores exige uma terceira variável.
  • Tipos básicos: int, float (com ponto), str (entre aspas) e bool.
  • + soma números e emenda textos. "24" não é 24.

Para praticar

Lista 02 · Variáveis e rastreio — a Parte A é quase toda de tabelas de rastreio. Faça-as no papel; é exatamente o que a Avaliação 1 cobra.