import random
import datetime
from tkinter import *
hoje = datetime.date.today()
random.seed(hoje.toordinal()) # garante mesma senha o dia inteiro
senhas = [
"NUVEM", "RELAMPAGO", "JANELA", "RIO", "ESTRELA", "SAPATO", "MONTANHA",
"CADERNO", "PONTE", "CAMINHO", "ILHA", "FOLHA", "AREIA", "CHUVA",
"VIDRO", "CAFE", "TELHADO", "LIVRO", "CADEIRA", "FOGUEIRA",
"FLORESTA", "DESERTO", "OCEANO", "PLANETA", "COMETA", "TORRE",
"PORTA", "TRILHO", "BICICLETA", "AVIAO", "NAVIO", "JARDIM",
"ESTRADA", "CIDADE", "VILA", "FAROL", "PRAIA", "CAMPO",
"NEBLINA", "VENTO", "PEDRA", "SOL", "LUA", "PONTEIRO",
"ROCHA", "VALE", "COLINA", "PICO", "LAGO", "RAVINA"
]
contra_senhas = [
"MARTELO", "TESOURA", "CADEADO", "BUSSOLA", "ANCORA", "ESCUDO",
"FLECHA", "RADAR", "MAPA", "BINOCULO", "CAPACETE", "SIRENE",
"CHAVE", "APITO", "TRINCO", "CORDA", "MACHADO", "LANTERNA",
"COMPASSO", "CRONOMETRO", "ALICATE", "ENGRENAGEM", "PARAFUSO",
"ALAVANCA", "BATERIA", "FUSIVEL", "TERMOMETRO", "EXTINTOR",
"MICROFONE", "AMPLIFICADOR", "CAMERA", "SENSOR", "ANTENA",
"PROJETOR", "GERADOR", "VALVULA", "PISTAO", "ROLDANA",
"ESTETOSCOPIO", "FILTRO", "TRANSISTOR", "RELE", "OSCILADOR",
"CONDENSADOR", "INVERSOR", "REGULADOR", "TRANSFORMADOR",
"INDUTOR", "RETIFICADOR"
]
quantidade = 50
random.shuffle(senhas)
random.shuffle(contra_senhas)
codigos = dict(zip(senhas[:quantidade], contra_senhas[:quantidade]))
indice = hoje.timetuple().tm_yday % len(codigos)
senha_atual = list(codigos.keys())[indice]
contra_senha_atual = codigos[senha_atual]
tentativas = 0
max_tentativas = 3
def limpar():
Contra_Senha_entrada.delete(0, END)
resultado_texto.config(text="")
def app():
global tentativas
v = Contra_Senha.get().strip().upper()
if v == contra_senha_atual:
mensagem = "Pode passar"
but_validar.config(state=DISABLED) # bloqueia botão após sucesso
else:
tentativas += 1
restantes = max_tentativas - tentativas
if restantes > 0:
mensagem = f"Contra-senha incorreta! Tentativas restantes: {restantes}"
else:
mensagem = "Mãos ao alto! Está preso"
but_validar.config(state=DISABLED) # bloqueia botão após 3 erros
resultado_texto.config(text=mensagem)
root = Tk()
root.geometry("700x400")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Senha e Contra-Senha")
titulo = Label(
root,
text="Senha e Contra-Senha",
font=("Arial", 28, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.2, rely=0.05)
label_senha = Label(
root,
text="Senha:",
font=("Arial", 20, "bold"),
bg="#103030",
fg="#49e3e3"
)
label_senha.place(relx=0.3, rely=0.25)
label_senha_valor = Label(
root,
text=senha_atual,
font=("Arial", 20, "bold"),
bg="#103030",
fg="#49e3e3"
)
label_senha_valor.place(relx=0.55, rely=0.25)
label_contra_senha = Label(
root,
text="Contra-Senha:",
font=("Arial", 20, "bold"),
bg="#103030",
fg="#49e3e3"
)
label_contra_senha.place(relx=0.2, rely=0.45)
Contra_Senha = StringVar()
Contra_Senha_entrada = Entry(
root,
textvariable=Contra_Senha,
font=("Arial", 12, "bold"),
bg="white",
fg="blue",
justify='center',
show="*" # oculta a contra-senha
)
Contra_Senha_entrada.place(relx=0.52, rely=0.46, relwidth=0.3)
Contra_Senha_entrada.focus()
but_validar = Button(
root,
text="Validar",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=app
)
but_validar.place(relx=0.1, rely=0.65, relwidth=0.25, relheight=0.1)
but_limpar = Button(
root,
text="Limpar",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=limpar
)
but_limpar.place(relx=0.4, rely=0.65, relwidth=0.25, relheight=0.1)
but_sair = Button(
root,
text="Sair",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=root.destroy
)
but_sair.place(relx=0.7, rely=0.65, relwidth=0.25, relheight=0.1)
resultado_texto = Label(
root,
text="",
font=("Arial", 12, "bold"),
bg="#cfe2f3"
)
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15)
root.mainloop()