"""Kalkulator Terminal - operasi aritmatika.

Bagian 2: empat operasi aritmatika, dispatch berbasis dictionary,
dan pertanyaan hitung lagi.
"""


def tampilkan_menu():
    """Cetak daftar operasi yang tersedia."""
    print("=== Kalkulator Terminal ===")
    print("1. Tambah")
    print("2. Kurang")
    print("3. Kali")
    print("4. Bagi")
    print("5. Keluar")


def baca_pilihan():
    """Baca nomor operasi yang dipilih pengguna."""
    return input("Pilih operasi (1-5): ")


def baca_angka(label):
    """Baca satu angka dari pengguna berdasarkan label."""
    teks = input(f"{label}: ")
    return float(teks)


def tambah(a, b):
    """Kembalikan hasil a + b."""
    return a + b


def kurang(a, b):
    """Kembalikan hasil a - b."""
    return a - b


def kali(a, b):
    """Kembalikan hasil a * b."""
    return a * b


def bagi(a, b):
    """Kembalikan hasil a / b, atau None bila pembagi bernilai nol."""
    if b == 0:
        print("Error: pembagian dengan nol tidak diperbolehkan.")
        return None
    return a / b


OPERASI = {
    "1": ("+", tambah),
    "2": ("-", kurang),
    "3": ("*", kali),
    "4": ("/", bagi),
}


def tanya_lagi():
    """Tanyakan apakah pengguna ingin menghitung lagi."""
    jawaban = input("Hitung lagi? (y/t): ")
    return jawaban.strip().lower() == "y"


def jalankan():
    """Jalankan loop utama kalkulator."""
    while True:
        tampilkan_menu()
        pilihan = baca_pilihan()

        if pilihan == "5":
            break

        if pilihan not in OPERASI:
            print(f"Pilihan '{pilihan}' tidak dikenal.")
            continue

        simbol, fungsi = OPERASI[pilihan]
        a = baca_angka("Angka pertama")
        b = baca_angka("Angka kedua")

        hasil = fungsi(a, b)

        if hasil is not None:
            print(f"Hasil: {a:g} {simbol} {b:g} = {hasil:g}")

        if not tanya_lagi():
            break

    print("Terima kasih telah menggunakan Kalkulator Terminal.")


if __name__ == "__main__":
    jalankan()
