Pengertian Tahun Kabisat
Tahun kabisat (leap year –dalam bahasa Inggris) adalah tahun yang mengalami penambahan satu hari dengan tujuan untuk menyesuaikan dengan penanggalan tahun astronomi [1].
Kenapa penambahan 1 hari perlu dilakukan?
Karena jumlah hari dalam satu tahun itu sebenarnya tidak pas sebanyak 365 hari, akan tetapi berjumlah 365 hari 5 jam 48 menit 45,1814 detik.
Jika hal ini diabaikan, maka setiap 4 tahun akan kekurangan hampir sebanyak 1 hari atau lebih tepatnya adalah 23 jam 15 menit 0,7256 detik.
Maka untuk mengkompensasi hal ini, setiap 4 tahun sekali (tahun yang bisa dibagi 4), diberi 1 hari ekstra: 29 Februari. Tetapi karena 5 jam 48 menit 45,1814 detik kurang dari 6 jam, maka tahun-tahun yang bisa dibagi 100 (seperti tahun 1900), bukan tahun kabisat, kecuali bisa dibagi dengan 400 (seperti tahun 2000).
Kondisi Kapan Suatu Tahun Dikatakan Kabisat
Ada beberapa kondisi di mana suatu tahun bisa kita nyatakan sebagai tahun kabisat. Berikut ini kondisinya:
- Jika sebuah tahun bisa dibagi 400, maka ia sudah pasti tahun kabisat.
- Jika suatu tahun bisa dibagi 100 dan tidak bisa dibagi 400, maka tahun tersebut sudah pasti bukan tahun kabisat.
- Jika suatu tahun tidak bisa dibagi 400, juga tidak bisa dibagi 100, akan tetapi bisa dibagi dengan 4, maka tahun itu adalah tahun kabisat.
- Dan yang selain itu (yang tidak bisa dibagi 400, dan 100, dan 4) maka dinyatatakan bukan sebagai tahun kabisat.
Mencari Tahu Apakah Suatu Angka Bisa Dibagi n
Kita bisa mengetahui apakah suatu angka (x
) bisa dibagi dengan n
atau tidak: adalah dengan menggunakan operasi modulus.
Operasi modulus adalah operasi yang menghitung sisa hasil bagi dari suatu bilangan.
Jika suatu bilangan (x
) habis dibagi n
, atau dalam bahasa lainnya ia tidak menyisakan sisa hasil bagi sedikitpun, maka kita katakan bahwa bilangan tersebut (x
) bisa dibagi dengan n
.
Contoh:
- Angka
10
dikatakan bisa dibagi2
karena sisa hasil baginya adalah0
. - Adapun angka
10
dikatakan tidak bisa dibagi3
, karena sisa hasil bagi10
dan3
adalah1
.
Di dalam python, operator modulus direpresentasikan dengan simbol %
.
>>> 10 % 2
0
>>> 10 % 3
1
>>> 10 % 6
4
>>>
Sebelum Mulai Ngoding
Sebelum mulai ngoding, diharapkan teman-teman telah familiar dengan materi dasar python berikut:
Familiar dengan materi-materi di atas akan membuat teman-teman bisa mengikuti tutorial kali ini dengan mudah.
1. Membuat Pernyataan Inti
Mari kita langsung mulai ngoding.
Langkah yang pertama adalah: kita siapkan dulu variabel-variabel utama dan juga nilai-nilainya.
Di sini saya akan membuat 4 buah variabel: 1 variabel untuk menyimpan nilai tahun, dan 3 variabel lainnya merupakan pernyataan inti yang akan kita gunakan pada bagian selanjutnya.
Berikut ini kode programnya:
tahun = 1904
habis_dibagi_400 = tahun % 400 == 0
habis_dibagi_100 = tahun % 100 == 0
habis_dibagi_4 = tahun % 4 == 0
Penjelasan:
- tiga variabel di atas yang diawali oleh
habis_*
merupakan variabel dengan tipe databoolean
. - tiga variabel tersebut akan kita gunakan untuk membangun logika percabangan dalam menentukan apakah variabel
tahun
merupakan tahun kabisat atau bukan.
2. Membuat Percabangan Inti
Langkah berikutnya adalah membuat logika percabangan dengan if-else
memanfaatkan 3 variabel yang sudah kita siapkan sebelumnya:
if habis_dibagi_400:
print(f'{tahun} tahun kabisat')
elif habis_dibagi_4 and not habis_dibagi_100:
print(f'{tahun} tahun kabisat')
else:
print(f'{tahun} bukan tahun kabisat')
Penjelasan
- Pada kondisi pertama, semua tahun yang habis dibagi 400 dia pasti tahun kabisat.
- Jika tidak bisa dibagi 400, namun ia bisa dibagi 4 dan bukan kelipatan 100, maka ia juga tahun kabisat.
- Sedangkan selain dari kondisi itu, maka ia bukan tahun kabisat.
Loh? Kalau suatu tahun bisa dibagi 4 dan merupakan kelipatan 100, bukankah ia harus bisa dibagi dengan 400 untuk dikatakan sebagai tahun kabisat?
Kenapa di percabangannya tidak ada?
Jawabannya adalah: ada.
Kalau suatu tahun bisa dibagi 4 dan merupakan kelipatan 100 dan juga kelipatan 400, dia akan masuk ke kondisi pertama –tidak mungkin masuk ke kondisi kedua.
Kode di atas juga bisa disederhanakan lagi menjadi:
if habis_dibagi_400 or (habis_dibagi_4 and not habis_dibagi_100):
print(f'{tahun} tahun kabisat')
else:
print(f'{tahun} bukan tahun kabisat')
Sampai sini, kode program yang kita buat sudah berfungsi.
Jika kita jalankan, kita akan mendapatkan output sebagai berikut:
1904 tahun kabisat
3. Mengubah Percabangan Inti ke Dalam Fungsi (opsional)
Agar program kita bisa digunakan berkali-kali dalam satu waktu, kita bisa membungkusnya dalam sebuah fungsi atau prosedur.
Berikut ini kode programnya:
def apakah_kabisat (tahun):
habis_dibagi_400 = tahun % 400 == 0
habis_dibagi_100 = tahun % 100 == 0
habis_dibagi_4 = tahun % 4 == 0
if habis_dibagi_400 or (habis_dibagi_4 and not habis_dibagi_100):
print(f'{tahun} tahun kabisat')
else:
print(f'{tahun} bukan tahun kabisat')
Kemudian kita bisa panggil fungsi di atas dengan parameter yang berbeda-beda seperti ini:
apakah_kabisat(1600)
apakah_kabisat(1900)
apakah_kabisat(1904)
apakah_kabisat(2000)
apakah_kabisat(2004)
apakah_kabisat(2005)
apakah_kabisat(2006)
apakah_kabisat(2008)
apakah_kabisat(2013)
Output:
1600 tahun kabisat
1900 bukan tahun kabisat
1904 tahun kabisat
2000 tahun kabisat
2004 tahun kabisat
2005 bukan tahun kabisat
2006 bukan tahun kabisat
2008 tahun kabisat
2013 bukan tahun kabisat
4. Membuat Inputan (opsional)
Sampai sini program kita sudah working sebagaimana mestinya. Akan tetapi, untuk membuatnya lebih intuitif lagi dan lebih dinamis, teman-teman bisa membuat sebuah inputan agar user bisa dengan mudah memeriksa tahun yang diinginkan.
Contoh kode programnya seperti berikut:
tahun = int(input('Masukkan tahun: '))
apakah_kabisat(tahun)
Output;
Masukkan tahun: 2021
2021 bukan tahun kabisat
Masukkan tahun: 2020
2020 tahun kabisat
5. Bonus: Mencari Tahun Kabisat dari Tahun x ke Tahun y
Sebagai bonus, kita juga bisa mengubah base kode program kita untuk mencari tahun kabisat dari tahun x ke tahun y:
def apakah_kabisat (tahun):
habis_dibagi_400 = tahun % 400 == 0
habis_dibagi_100 = tahun % 100 == 0
habis_dibagi_4 = tahun % 4 == 0
return habis_dibagi_400 or (habis_dibagi_4 and not habis_dibagi_100)
tahun_awal = int(input('Masukkan tahun awal: '))
tahun_akhir = int(input('Masukkan tahun akhir: '))
tahun_kabisat = []
for tahun in range(tahun_awal, tahun_akhir + 1):
if apakah_kabisat(tahun):
tahun_kabisat.append(tahun)
print('Tahun kabisat:')
print(tahun_kabisat)
Contoh output:
Masukkan tahun awal: 1900
Masukkan tahun akhir: 2000
Tahun kabisat:
[1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940,
1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980,
1984, 1988, 1992, 1996, 2000]
Kode Program Lengkap
Jika kalian ingin mendapatkan kode program lengkap dari pertemuan kali ini, kalian bisa mendapatkannya pada repositori python-latihan-logika di github.
Jangan lupa kasih star ya!βπ
Pertemuan Selanjutnya
Insyaallah pada pertemuan yang akan datang kita akan membuat sebuah game tebak angka sederhana!
Gimana caranya?
Simak terus tutorial latihan logika python di jagongoding!
Jika ada pertanyaan atau sesuatu yang ingin didiskusikan, error, atau bahkan request tutorial, jangan sungkan-sungkan untuk berkomentar, ya! π
Terima kasih banyak!
Referensi
[1] https://id.wikipedia.org/wiki/Tahun_kabisat – diakses tanggal 27 April 2021