Capítulo 13, Básico
Entrada, saída e operadores
Com `print`, `input` e os operadores você já escreve programas que conversam com a pessoa e fazem contas.
Código deste capítulo: basico/cap13_entrada_operadores.py
O print aceita vários valores e dois parâmetros que eu uso muito: sep (separador) e end (o que vem no fim, a quebra de linha por padrão):
print("a", "b", "c", sep="-")
print("sem quebra", end=" ")
print("de linha")
a-b-c
sem quebra de linha
input
O input mostra uma pergunta, espera a pessoa digitar e devolve sempre uma string. Se você precisa de número, converta:
nome = input("Qual é o seu nome? ")
idade = int(input("Quantos anos você tem? "))
print(f"Olá, {nome}. Em 5 anos você terá {idade + 5} anos.")
Qual é o seu nome? Ana
Quantos anos você tem? 30
Olá, Ana. Em 5 anos você terá 35 anos.
Nunca confie no que a pessoa digita
Se alguém digitar
trinta, oint()levantaValueErrore o programa cai. No capítulo de exceções eu mostro como validar a entrada sem derrubar o programa.
Operadores aritméticos
| Operador | Operação | Exemplo | Resultado |
|---|---|---|---|
+ - * | Soma, subtração, multiplicação | 10 - 3 | 7 |
/ | Divisão (sempre float) | 10 / 4 | 2.5 |
// | Divisão inteira (arredonda para baixo) | 10 // 4 | 2 |
% | Resto | 10 % 4 | 2 |
** | Potência | 2 ** 8 | 256 |
print(10 / 3)
print(10 // 3)
print(-7 // 2)
print(10 % 3)
print(2 ** 8)
print(divmod(17, 5))
3.3333333333333335
3
-4
1
256
(3, 2)
Cuidado com -7 // 2: a divisão inteira arredonda para baixo, então o resultado é -4, e não -3. O divmod devolve quociente e resto de uma vez só.
Comparação e operadores lógicos
As comparações podem ser encadeadas, como na matemática:
x = 7
print(1 < x < 10)
print(x == 7.0)
print("a" < "b")
True
True
True
Os operadores and, or e not têm duas características que a maioria dos cursos não conta. Primeiro, and e or devolvem um dos operandos, não necessariamente True ou False. Segundo, eles fazem curto-circuito: param assim que o resultado está decidido.
nome = "" or "anônimo"
print(nome)
print(0 and 5)
print(3 and 5)
print(not [])
anônimo
0
5
True
O idioma valor or padrao é comum para definir um valor padrão. Use com cuidado: ele também troca 0 e "", que podem ser valores válidos.
Pertencimento e identidade
Os operadores in e not in perguntam se um item está em uma coleção. Os operadores is e is not perguntam se dois nomes apontam para o mesmo objeto. Use is apenas com None, True e False:
print("py" in "python", 3 not in [1, 2])
valor = None
print(valor is None, valor is not None)
True True
True False
Atribuição composta e o operador morsa
Os operadores +=, -=, *=, //= e companhia modificam e atribuem de uma vez. O operador := (chamado de morsa, disponível desde o Python 3.8) atribui dentro de uma expressão:
total = 10
total += 5
total *= 2
total //= 4
print(total)
if (n := len("python")) > 5:
print(f"{n} caracteres")
7
6 caracteres
Quando uma expressão mistura operadores, a precedência decide a ordem: primeiro **, depois * / // %, depois + -, depois comparações, depois not, and e or. Eu nunca decoro a tabela inteira: uso parênteses sempre que a ordem não é óbvia à primeira leitura.
Exercício 1
Converter segundos em horas, minutos e segundos
Escreva decompor(segundos) que devolva uma tupla (horas, minutos, segundos). Por exemplo, 3725 segundos são (1, 2, 5).