Mundo em Python

Cifra de Transposição

from tkinter import *

def cifra_transposicao(texto, chave):
texto = texto.replace(" ", "")
colunas = [''] * chave
for i, letra in enumerate(texto):
colunas[i % chave] += letra
return ''.join(colunas) def decifra_transposicao(texto, chave):
n = len(texto)
col_len = n // chave
extra = n % chave
colunas = []
inicio = 0
for i in range(chave):
tamanho = col_len + (1 if i < extra else 0)
colunas.append(texto[inicio:inicio+tamanho])
inicio += tamanho
resultado = ''
for i in range(col_len + 1):
for col in colunas:
if i < len(col):
resultado += col[i]
return resultado def app():
try:
v = var.get()
texto = Mensagem.get()
chave = int(Chave.get()) if not texto:
resultado_texto.config(text="Por favor, insira uma mensagem")
return
if chave <= 0:
resultado_texto.config(text="Chave deve ser maior que 0")
return

if v == "Cifrado":
a = cifra_transposicao(texto, chave)
else:
a = decifra_transposicao(texto, chave) resultado_texto.config(text=a) except ValueError:
resultado_texto.config(text="Por favor, insira valores numéricos válidos") def limpar():
Mensagem_entrada.delete(0, END)
Chave_entrada.delete(0, END)
resultado_texto.config(text="") def copiar():
resultado = resultado_texto.cget("text")
if resultado:
root.clipboard_clear()
root.clipboard_append(resultado) root = Tk()
root.geometry("700x500")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Cifra de Transposição") titulo = Label(
text="Cifra de Transposição",
font=("Arial", 28, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.2, rely=0.05) texto_sub1 = Label(
text="Mensagem:",
font=("Arial", 18, "bold"),
bg="#103030",
fg="#49e3e3"
)
texto_sub1.place(relx=0.2, rely=0.2) texto_sub2 = Label(
text="Chave:",
font=("Arial", 18, "bold"),
bg="#103030",
fg="#49e3e3"
)
texto_sub2.place(relx=0.27, rely=0.35) Chave = StringVar()
Chave_entrada = Entry(
textvariable=Chave,
font=("Arial", 12, "bold"),
bg="white",
fg="blue",
justify='center'
)
Chave_entrada.place(relx=0.46, rely=0.36, relwidth=0.45) Mensagem = StringVar()
Mensagem_entrada = Entry(
textvariable=Mensagem,
font=("Arial", 12, "bold"),
bg="white",
fg="blue",
justify='center'
)
Mensagem_entrada.place(relx=0.46, rely=0.21, relwidth=0.45)
Mensagem_entrada.focus() var = StringVar()
dropDownList = ["Cifrado", "Decifrado"]
dropdown = OptionMenu(root, var, *dropDownList)
var.set(dropDownList[0])
dropdown.place(relx=0.46, rely=0.45, relwidth=0.45)
dropdown.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 15, "bold"))
dropdown["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 15, "bold")) but1 = Button(
text="Converter",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=app
)
but1.place(relx=0.05, rely=0.65, relwidth=0.2, relheight=0.1) but_limpar = Button(
text="Limpar",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=limpar
)
but_limpar.place(relx=0.3, rely=0.65, relwidth=0.2, relheight=0.1) but_copiar = Button(
text="Copiar",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=copiar
)
but_copiar.place(relx=0.55, rely=0.65, relwidth=0.2, relheight=0.1) but_sair = Button(
text="Sair",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=root.destroy
)
but_sair.place(relx=0.8, rely=0.65, relwidth=0.15, relheight=0.1) resultado_texto = Label(
text="",
font=("Arial", 12, "bold"),
bg="#cfe2f3"
)
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15) root.mainloop()
0