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)
💡 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:
- calcule o que está à direita — pegue o valor atual de
clientes(31) e some 1, dando 32; - 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:
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.
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 |
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:
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)
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))
| 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 nunca12,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")
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:
"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 = valorguarda o valor no nome.=é uma seta para a esquerda, não uma igualdade.- O lado direito é calculado primeiro; por isso
x = x + 1faz 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) ebool. +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.