[Pronto para Copiar e Colar] Vamos Criar um App de Cronômetro com Python! (Usando o módulo time)
"Por onde eu começo a programar?" "Tento ler livros, mas fico desanimado com tantos erros..."
Há apenas alguns meses, eu me sentia exatamente da mesma forma. Comecei do zero, e através de tentativa e erro com a ajuda da IA, agora consegui lançar dois websites por conta própria.
Neste artigo, meu principal objetivo é fazer com que você, como um colega iniciante, experimente a alegria de fazer algo que "funciona" da mesma perspectiva. Desta vez, usaremos o "mago do tempo" embutido no Python, o módulo `time`, para criar um aplicativo de cronômetro e alarme surpreendentemente simples.
Vamos deixar a teoria complicada para depois! Primeiro, apenas copie, cole e aproveite o momento em que seu computador se transforma em um cronômetro!
Passo 1: Experimente Primeiro! Um Programa Super Simples que Apenas Espera 3 Segundos
Ver para crer. Primeiro, vamos executar o cronômetro mais simples do mundo, que apenas pede ao computador para "esperar 3 segundos". Copie o código abaixo e execute-o em seu ambiente Python.
# O feitiço para usar a "magia do tempo"
import time
print("Iniciando o cronômetro.")
# Pausa a execução do programa por 3 segundos
time.sleep(3)
print("Passaram 3 segundos! Bom trabalho.")
Ao executá-lo, "Iniciando o cronômetro." deve aparecer e, após uma pequena pausa, "Passaram 3 segundos!" será exibido. É isso! Esta é a base fundamental de um cronômetro.
- `import time`: Esta é uma encantação para dizer ao Python: "Vou usar funções de tempo agora!" Ele carrega uma caixa de ferramentas chamada `time` que está cheia de várias magias (funções) relacionadas ao tempo.
- `time.sleep(3)`: Este é o coração do cronômetro. É um feitiço mágico chamado `sleep` da caixa de ferramentas `time`, que para temporariamente a execução do programa pelo número de segundos especificado nos parênteses.
O que você acha? Não é muito mais fácil do que você esperava? Esta é a experiência de fazer algo "funcionar". Este pequeno sucesso é o melhor combustível para mantê-lo em sua jornada de programação.
Passo 2: Personalize! Vamos Definir os Segundos Livremente
Um cronômetro fixo de 3 segundos é legal, mas seria ótimo poder definir qualquer tempo que você queira para coisas como cozinhar ou estudar. Em seguida, vamos modificar o programa para perguntar "Quantos segundos devo esperar?" toda vez que ele for executado.
É aqui que entra o feitiço mágico `input()`, que aceita entrada de texto do usuário.
import time
# Recebe a entrada do usuário com input()
input_seconds_str = input("Em quantos segundos devo notificar? Digite um número: ")
# [PONTO IMPORTANTE!] Converta a "string" de entrada em um "inteiro"
seconds = int(input_seconds_str)
print(f"Cronômetro definido para {seconds} segundos.")
time.sleep(seconds)
print(f"Passaram {seconds} segundos! O tempo acabou!")
Quando você executa isso, o programa fará uma pausa e um cursor começará a piscar. Tente digitar o número de segundos desejado (por exemplo, `10`) e pressione Enter. A mensagem aparecerá após esperar o número de segundos que você inseriu.
⚠️ A Armadilha em que Todo Iniciante Cai: `input()` é Sempre uma "String"
Deixe-me compartilhar um ponto crucial onde eu tropecei no início. A regra é que qualquer coisa recebida por `input()`, mesmo que você digite um número, é tratada como uma "string".
`time.sleep()` só aceita um número de segundos. Se você tentar passar a "string" `"10"`, ele vai ficar com raiva e lançar um erro, dizendo: "Isso não é um número!".
É por isso que a linha `seconds = int(input_seconds_str)` é necessária. Este é o processo de transformar a string em um "inteiro" com o qual o computador pode trabalhar, envolvendo-a no feitiço `int()`. Essa "conversão de tipo" é um conceito fundamental e vital que aparece em todos os aspectos da programação, então, por favor, lembre-se disso!
Passo 3: Deixe Mais Bonito! Implementando uma Contagem Regressiva
Você não fica ansioso se perguntando se o cronômetro está realmente funcionando enquanto está ativo? Vamos adicionar um recurso de contagem regressiva que mostra o tempo restante para que você saiba "quantos segundos faltam".
Aqui vamos usar a magia da "repetição", o laço `for`. Também usaremos um pequeno truque para manter a exibição em uma única linha, para que apenas os números pareçam ser atualizados.
import time
seconds = 10 # Fixo em 10 segundos para clareza
# Loop de 10 até 1, decrementando de 1 em 1
for i in range(seconds, 0, -1):
# Exibe de forma limpa com uma f-string. end="\r" é o feitiço mágico!
print(f"Tempo restante: {i} seg", end="\r")
# Espera 1 segundo
time.sleep(1)
# Mensagem após o término da contagem regressiva
# A chave é adicionar espaços no final para limpar a linha anterior
print("O tempo acabou! ")
Vá em frente e execute. Como foi? Você deve ter visto os números diminuírem `10, 9, 8...` no mesmo lugar no seu terminal. Parece um aplicativo de cronômetro de verdade, não é?
- `for i in range(seconds, 0, -1):`: Usando `range(início, parada, passo)`, criamos um laço que "começa em `seconds` (10), até chegar a 1 (0 não está incluído), enquanto decrementa em -1". A contagem para cada iteração (10, 9, 8...) é armazenada automaticamente na variável `i`.
- `print(..., end="\r")`: Esta é a nossa técnica chave desta vez. Normalmente, `print` adiciona uma nova linha após exibir o texto, mas adicionar `end="\r"` muda seu comportamento para "retornar o cursor para o início da linha sem uma nova linha". Isso faz com que o próximo `print` sobrescreva a exibição anterior, fazendo parecer que apenas os números estão mudando.
Passo 4: Finalmente Completo! Um Cronômetro Real que Toca um Alarme
Estamos no passo final. Vamos adicionar um recurso de alarme que não apenas exibe uma mensagem quando o tempo acaba, mas também o notifica com um "som" real.
Nenhuma biblioteca especial é necessária. A maioria dos computadores (e seus terminais) tem uma espécie de recurso oculto que toca um som de "bipe" quando um "caractere especial" específico é impresso. Esse caractere é `\a`.
Aqui está a versão final do código, incorporando todos os recursos até agora, além de tratamento de erros para quando o usuário insere algo diferente de um número!
# Importa o módulo time
import time
# Usa um bloco try...except para envolver o código que pode causar um erro
try:
# Pega o tempo de espera em segundos do usuário
input_seconds_str = input("Em quantos segundos o alarme deve tocar? Digite um número: ")
# Converte a string de entrada para um inteiro (tipo int)
seconds = int(input_seconds_str)
print(f"Iniciando contagem regressiva de {seconds} segundos.")
# Loop do número de segundos especificado até 1
for i in range(seconds, 0, -1):
# Usa uma f-string para uma exibição limpa do tempo restante
# end="\r" faz com que a próxima impressão sobrescreva a linha atual
print(f"Tempo restante: {i} seg ", end="\r")
# Espera 1 segundo
time.sleep(1)
# Quando o loop terminar (o tempo acabar), exibe uma mensagem
# \a é o caractere de alerta do terminal que toca um som de sino
print("O tempo acabou! O alarme está tocando! \a")
except ValueError:
# Trata o caso em que uma entrada não numérica é fornecida (int() falha)
print("Erro: Por favor, digite um número válido.")
except KeyboardInterrupt:
# Trata o caso em que o usuário interrompe o programa com Ctrl+C
print("\nCronômetro interrompido.")
Com isso, seu computador agora funciona como um aplicativo completo de cronômetro e alarme. Ele também é um pouco mais inteligente, pois exibirá corretamente uma mensagem de erro и sairá se você inserir caracteres não numéricos (como `abc`).
Nota: O som de bipe de `\a` pode não tocar dependendo do seu sistema operacional ou das configurações do terminal. Mesmo que você não ouça um som, tenha certeza de que o programa está funcionando corretamente.
Conclusão: Um Pequeno "Funcionou!" é uma Grande Força para o Futuro
Ótimo trabalho! Neste artigo, você experimentou como pode criar um aplicativo prático de cronômetro apenas combinando os recursos básicos do módulo `time` do Python.
- Fazer o programa esperar com `time.sleep()`
- Receber instruções do usuário com `input()`
- Converter strings em números com `int()` (Super importante!)
- Repetir processos com um laço `for`
- Deixar a exibição bonita com `print(end="\r")`
- Tocar um som de alarme com `\a`
- Preparar-se para erros com `try...except`
Cada recurso é simples por si só, mas a diversão da programação é que, ao combiná-los, você pode criar uma ferramenta que seja genuinamente útil para alguém. O pequeno sucesso que você experimentou hoje — "Funcionou com um copiar e colar!" ou "Eu consegui modificar sozinho!" — será sua maior motivação para continuar a criar coisas mais complexas e interessantes.
Sinta-se à vontade para usar este código como base para brincar com ele, como modificá-lo para aceitar entrada em minutos ou tentar construir um cronômetro Pomodoro (25 minutos de trabalho + 5 minutos de descanso)!
[Bônus] HTML para Experimentar Todo o Código Deste Artigo
Você pode copiar o código Python final apresentado neste artigo do bloco de código abaixo, salvá-lo em seu PC com um nome como `timer.py` e executá-lo a qualquer momento para experimentá-lo. Vá em frente e execute-o em seu computador!
<!-- Salve como timer.py e execute -->
# Importa o módulo time
import time
# Usa um bloco try...except para envolver o código que pode causar um erro
try:
# Pega o tempo de espera em segundos do usuário
input_seconds_str = input("Em quantos segundos o alarme deve tocar? Digite um número: ")
# Converte a string de entrada para um inteiro (tipo int)
seconds = int(input_seconds_str)
print(f"Iniciando contagem regressiva de {seconds} segundos.")
# Loop do número de segundos especificado até 1
for i in range(seconds, 0, -1):
# Usa uma f-string para uma exibição limpa do tempo restante
# end="\r" faz com que a próxima impressão sobrescreva la linha atual
print(f"Tempo restante: {i} seg ", end="\r")
# Espera 1 segundo
time.sleep(1)
# Quando o loop terminar (o tempo acabar), exibe uma mensagem
# \a é o caractere de alerta do terminal que toca um som de sino
print("O tempo acabou! O alarme está tocando! \a")
except ValueError:
# Trata o caso em que uma entrada não numérica é fornecida (int() falha)
print("Erro: Por favor, digite um número válido.")
except KeyboardInterrupt:
# Trata o caso em que o usuário interrompe o programa com Ctrl+C
print("\nCronômetro interrompido.")
Próximos Passos
Agora que você pode fazer um cronômetro, por que não tentar fazer um jogo para jogar contra o computador a seguir? Usar o módulo `random` para lidar com números aleatórios abrirá o próximo nível de diversão na programação.
➡️ Crie um Jogo Simples de Adivinhar o Número em Python (Usando random)