Variáveis, operadores e entrada
Tipos, atribuição, precedência, conversões, input e formatação de resultados.
Uma variável associa um nome a um valor. Em quantidade = 3, o nome é quantidade e o valor é o inteiro 3. A instrução calcula primeiro o lado direito e só depois faz a associação.
Atribuição não é uma equação
quantidade = 3
quantidade = quantidade + 2
A segunda instrução lê o valor anterior, calcula 5 e associa esse valor ao nome. Não afirma que 3 é igual a 5. quantidade += 2 exprime a mesma atualização neste caso.
= atribui; == compara. 3 == 3 produz True. 3 == "3" produz False, porque o segundo valor é texto.
Tipos e conversões
| Tipo | Exemplo | Uso |
|---|---|---|
int | 3 | Contagens inteiras |
float | 2.5 | Medidas e valores aproximados |
str | "Porto" | Texto |
bool | True | Resultado de uma condição |
NoneType | None | Ausência de um valor definido |
type(valor) identifica o tipo. int("12") converte texto num inteiro. float("2.5") converte texto num real aproximado. str(12) produz texto. int(2.9) produz 2, por truncatura em direção a zero; não arredonda.
Os tipos pertencem aos valores. Um nome pode receber valores de tipos diferentes, mas mudar o significado do mesmo nome dificulta seguir o programa.
Nomes e linhas do programa
Um nome pode conter letras, algarismos e _, mas não pode começar por um algarismo. total e Total são nomes diferentes. Palavras reservadas, como if e for, não podem ser nomes de variáveis.
# começa um comentário até ao fim da linha, exceto dentro de uma string. Uma instrução longa pode ocupar várias linhas físicas dentro de parênteses. A instrução continua a ser uma única linha lógica:
total = (
quantidade * preco
+ portes
)
A indentação no início da linha define os blocos. Dentro de uma expressão entre parênteses, podes distribuir os operandos por linhas para facilitar a leitura.
Mais representações numéricas
1.2e3 significa 1,2 vezes 10 ao cubo e vale 1200.0. 1e-3 vale 0.001. A letra e indica uma potência de dez, não o número de Euler. Um complexo como 2 + 3j tem parte real 2 e parte imaginária 3; .real e .imag permitem lê-las. A unidade imaginária em Python escreve-se j, não i.
min e max escolhem extremos, abs calcula o valor absoluto ou módulo e round arredonda. O arredondamento de empates usa normalmente o valor par mais próximo, mas números decimais representados como float podem não ser empates exatos.
Operadores e precedência
| Operação | Expressão | Resultado |
|---|---|---|
| Potência | 2 ** 3 | 8 |
| Divisão | 7 / 2 | 3.5 |
| Divisão pelo chão | 7 // 2 | 3 |
| Resto | 7 % 2 | 1 |
| Multiplicação | 3 * 2 | 6 |
| Texto repetido | "ab" * 2 | "abab" |
| Texto concatenado | "a" + "b" | "ab" |
Com divisor positivo, // arredonda em direção a menos infinito: -7 // 2 vale -4 e -7 % 2 vale 1. Confere a identidade a == (a // b) * b + a % b, para b diferente de zero.
As potências precedem multiplicações e divisões, que precedem somas e subtrações. Parênteses tornam a intenção explícita. -2 ** 2 vale -4; (-2) ** 2 vale 4. 2 ** 3 ** 2 significa 2 ** (3 ** 2) e vale 512.
Ler valores e mostrar resultados
input devolve sempre uma string. Ler "3" não cria o inteiro 3. Converte antes de calcular. Nos dados de entrada do bloco, a quantidade ocupa a primeira linha e o preço a segunda.
quantidade = int(input("Quantidade: "))
preco = float(input("Preço por unidade: "))
total = quantidade * preco
print(f"Total: {total:.2f} euros")Dados de entrada
O cálculo é 3 × 2,5 = 7,5. A expressão :.2f escreve duas casas decimais, por isso o total aparece como 7.50 euros. Formatar não altera o valor guardado em total.
print(a, b) separa os valores por um espaço. print(a, b, sep=";") usa um ponto e vírgula. end="" evita a mudança de linha. Numa f-string, cada expressão entre chavetas é calculada e inserida no texto.
Valores aproximados
Os float usam uma representação binária finita. Algumas frações decimais não têm representação exata, por isso 0.1 + 0.2 == 0.3 é falso. Para conferir um resultado aproximado, escolhe uma tolerância adequada às unidades.
from math import isclose
print(0.1 + 0.2)
print(isclose(0.1 + 0.2, 0.3, abs_tol=1e-12))Dados de entrada
A primeira linha pode expor os dígitos da aproximação; a segunda escreve True. Para cálculos de cêntimos que exigem exatidão, uma alternativa é guardar quantias como inteiros de cêntimos. Não arredondes cada passo sem que o enunciado o peça, porque os erros de arredondamento podem acumular-se.
Exercícios
Prever uma expressão
Quanto vale 2 + 3 * 4 ** 2?
Primeira pista
Mais uma pista
Calcula primeiro 4 ao quadrado, depois multiplica por 3.
Ver solução
Erros frequentes
Calcular tudo da esquerda para a direita ou usar 5 vezes 4 ao quadrado.
Distinguir chão de truncatura
Quanto vale -7 // 2?
Primeira pista
A divisão pelo chão arredonda em direção a menos infinito.
Mais uma pista
O quociente real é -3,5. Qual é o inteiro imediatamente abaixo?
Ver solução
O resultado é -4. Com resto 1, a identidade é -7 = (-4) × 2 + 1.
Erros frequentes
Converter antes de somar
Uma entrada é o texto 12. Queres acrescentar duas unidades e obter o número 14. Qual é a expressão adequada?
Primeira pista
Mais uma pista
Ver solução
Converte com int e soma 2. A conversão exige que o texto represente um inteiro válido.
- int(entrada) + 2. Converte o texto para inteiro antes da soma.
- entrada + "2". Concatena texto e produz 122.
- entrada + 2. Tenta somar string e inteiro e dá TypeError.
Erros frequentes
Confundir concatenar algarismos com somar quantidades.