Berikut ini adalah pertanyaan dari qed pada mata pelajaran TI untuk jenjang Sekolah Dasar
Batasan:
Hanya boleh terdapat 1 function saja. Tidam perlu function utk dekripsi.
Tetapi, program utama harus mencakup enkripsi dan dekripsi.
Jawaban dan Penjelasan
Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.
Kode Program (Python)
# caesar.py
# oleh: hy
from rich.console import Console
console = Console()
error_console = Console(stderr=True, style="bold bright_red")
def enkripsi_caesar(teks: str, geser = 0):
hasil = ''
for c in teks:
# Validasi teks dulu
if not(c.isalpha() or c == ' '):
raise TypeError(f'ERROR: Input mengandung karakter yang tidak diperbolehkan.\n' +\
' Caesar Cipher pada program ini hanya menerima karakter alfabet dan spasi.')
# Enkripsi
if c != ' ':
c = ( \
ord('A') + \
( (ord(c) - ord('A') + geser) % 26) \
)
hasil += c
return hasil
### Program Utama ###
if __name__ == '__main__':
console.print('\n[bold cyan]ENKRIPSI/DEKRIPSI CAESAR CIPHER[/]')
try:
mode = console.input('> [E/e]nkripsi atau [D/d]ekripsi ? ')\
.strip().lower()
if mode not in 'ed' or len(mode) > 1:
raise ValueError('ERROR: Hanya karakter E, e, D, atau d yang diperbolehkan.')
teks = input(f'> Input {"teks asli" if mode == "e" else "kode Caesar Cipher"}: ')\
.strip().upper()
geser = int(input('> Pergeseran enkripsi (shift): ').strip())
# Baik enkripsi maupun dekripsi,
# hasilnya disimpan pada variabel code
code = enkripsi_caesar(teks, geser if mode == 'e' else -geser)
except ValueError as err:
error_console.print(err)
except TypeError as err:
error_console.print(err)
else:
console.print(f'[bold cyan]HASIL {"EN" if mode == "e" else "DE"}KRIPSI[/]')
console.print(f'=> {"Teks asli" if mode == "e" else "Kode Caesar Cipher"} = [bold underline bright_white]{teks}[/]')
console.print(f'=> {"Kode Caesar Cipher" if mode == "e" else "Teks asli"} = [bold underline gold1]{code}[/]')
_____________
Pembahasan
By default, Caesar Cipher klasik hanya menerima input berupa karakter alfabet. Jadi, kita perlu menetapkan batasan (constraint) terlebih dahulu.
Batasannya adalah fungsi enkripsi Caesar Cipher yang diimplementasikan hanya menerima input berupa karakter alfabet dan spasi.
(Batasannya tidak harus seperti itu. Saya rumuskan batasannya seperti itu karena pada soal tidak ada batasan tentang input.)
Proses enkripsipada Caesar Cipher denganshift (pergeseran) sebanyak dilakukan denganmelakukan substitusi setiap karakter pada teks asli (teks yang akan dikodekan/disandikan) dengan karakter yang terletak pada posisi dari karakter asli.
Sebaliknya, pada prinsipnya proses dekripsi sama saja dengan proses enkripsi, tinggal mengganti shift (pergeseran) dengan bilangan yang berlawanan, yaitu .
Pada program di atas, saya menggunakan kode ASCII sebagai basis perhitungan. Kita mungkin tahu bahwa kode ASCII dari karakter "A" adalah 65. Namun, saya serahkan tugas itu pada fungsi ord("A") di Python, yang menghasilkan kode ASCII dari karakter "A".
Inti dari fungsi enkripsi_caesar(teks, geser) pada program di atas adalah:
def enkripsi_caesar(teks: str, geser = 0):
hasil = ''
for c in teks:
if c != ' ':
c = ( ord('A') + ( (ord(c) - ord('A') + geser) % 26) )
hasil += c
return hasil
Baris kode lain ditambahkan untuk melakukan validasi terhadap teks input. Jika menemukan karakter di luar batasan yang ditetapkan, program akan menampilkan pesan kesalahan.
Contoh hasil eksekusi program dapat dilihat pada gambar yang saya sertakan.
Keterangan:
Program menerima input berupa:
- mode operasi: enkripsi atau dekripsi
- teks asli atau kode caesar cipher (tergantung mode yang dipilih), dan
- shift (banyaknya pergeseran karakter).
Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.
Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact
Last Update: Thu, 17 Nov 22