Entender como o Python avalia expressões aritméticas, relacionais e lógicas.
Revisar variáveis e tipos.
Exercícios no GitHub.
Uma senha de 4 dígitos aguenta quanto tempo?
Um programa que testa 1.000 senhas por segundo leva quanto tempo para tentar todas as senhas numéricas de 4 dígitos? E de 6? E de 8? Hoje a gente faz essa conta em Python e descobre por que senha curta é senha fraca.
1por_segundo = 1000 # tentativas23for digitos in (4, 6, 8):4 combinacoes = 10 ** digitos5 horas = combinacoes / por_segundo / 36006 print(f"{digitos} dígitos: {horas:.1f} horas")78# 4 dígitos: 0.0 horas9# 6 dígitos: 0.3 horas10# 8 dígitos: 27.8 horas
Três famílias de operadores
Aritméticos
+ - * / como na calculadora. // é a divisão inteira, % é o resto e ** é a potência.
Precedência: primeiro **, depois * / // %, por último + e -. Na dúvida, parênteses.
1print(7 / 2) # 3.52print(7 // 2) # 33print(7 % 2) # 14print(2 ** 10) # 10245print(2 + 3 * 4) # 146print((2 + 3) * 4) # 20
Relacionais
Comparam dois valores e devolvem True ou False: == != > < >= <=.
Cuidado: = guarda um valor; == compara. Trocar um pelo outro é o erro mais clássico do semestre.
1tentativas = 32print(tentativas == 3) # True3print(tentativas != 3) # False4print(tentativas >= 5) # False
Lógicos
and só é verdadeiro se as duas partes forem. or é verdadeiro se pelo menos uma for. not inverte.
A tabela-verdade mostra todas as combinações possíveis.
| Expressão | Resultado |
|---|---|
True and False | False |
True or False | True |
not True | False |
False or False | False |
1senha_ok = True2horario_ok = False3print(senha_ok and horario_ok) # False4print(senha_ok or horario_ok) # True5print(not horario_ok) # True
Avaliar se a senha aguenta um ataque
Ator: Equipe de segurança
Objetivo: Saber quanto tempo um atacante levaria para descobrir uma senha numérica.
Fluxo principal
- A equipe informa quantos dígitos a senha tem.
- O sistema calcula quantas combinações existem.
- Calcula o tempo a 1.000 tentativas por segundo.
- Mostra o resultado em horas.
E se...
- A senha tem letras também: o número de possibilidades por posição muda de 10 para 36 ou mais.
Para pensar
- Que operador calcula as combinações?
- O que muda mais o resultado: um dígito a mais ou um computador mais rápido?
Desafio "Qual é a saída?"
Primeiro preveja, depois execute. O que você marcar fica salvo neste navegador.
Contas que protegem
Matemática
Combinações crescem em potência: cada dígito a mais multiplica por 10 o trabalho do atacante. É por isso que tamanho importa mais que complicação.
Eletrônica
and, or e not existem em chip: são as portas lógicas AND, OR e NOT, feitas de transistores.
Terminou antes? Tem mais.
Quantos anos levaria para testar todas as senhas de 12 caracteres com letras maiúsculas, minúsculas e números (62 possibilidades por posição), a um bilhão de tentativas por segundo?
Para estudar e praticar
Tutorial oficial do Python
Em português, direto da fonte.
Python Essentials 1
A trilha oficial que acompanha a disciplina e prepara para a certificação PCEP. Conta para a atividade a distância.
Plataformatrilha Python-Logica/quizPyQuiz
O quiz da disciplina, com o efeito Matrix que vocês já conhecem.
QuizrevisãoCommit no GitHub
Na próxima aula, essas expressões viram decisões: o sistema vai escolher quem entra.