Soal dan Solusi: Menentukan Tahun Kabisat Menggunakan Python

Posted on

Tahun kabisat (atau Leap Year) adalah tahun di mana dalam 1 tahun mendapatkan penambahan 1 hari atau total  ada 366 hari. Tujuan dari penambahan 1 hari ini adalah untuk untuk menyesuaikan penanggalan dengan tahun astronomi.

Satu tahun sebenarnya tidak persis 365 hari, tetapi 365 hari 5 jam 48 menit 45,1814 detik. Jika hal ini diabaikan, maka setiap 4 tahun akan kekurangan hampir 1 hari (tepatnya 23 jam 15 menit 0,7256 detik). Untuk mengkompensasi hal ini, setiap 4 tahun sekali (tahun yang bisa dibagi 4), diberi 1 hari ekstra yaitu adanya tanggal 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).

Bagaimana untuk menguji apakah suatu tahun merupakan tahun kabisat atau bukan? Pengujian bisa dilakukan melalui pembagian dengan 400. Jika tahun habis dibagi 400, maka tahun tersebut adalah kabisat. Kondisi berikutnya jika tahun habis dibagi 100, maka tahun tersebut bukan tahun kabisat. Kondisi terakhir adalah jika tahun habis dibagi 4, maka tahun tersebut adalah tahun kabisat, selain itu bukan tahun kabisat.

Kode dalam Python adalah sebagai berikut:

def kabisat(n):
    if n % 400 == 0:
        return True
    if n % 100 == 0:
        return False
    if n % 4 == 0:
        return True
    else:
        return False

tahun = 1900

if kabisat(tahun):
	print tahun, "adalah tahun kabisat"
else:
	print tahun, "bukan tahun kabisat"

Tampilan dari program di atas adalah:

Selain dengan fungsi di atas, dapat juga memanfaatkan fungsi is_leap dari library calendar yang telah built-in pada Python. Kodenya adalah sebagai berikut:

import calendar
tahun = 1900
if calendar.isleap(tahun):
	print tahun, "adalah tahun kabisat"
else:
	print tahun, "bukan tahun kabisat"

Hasil tampilan adalah sebagai berikut:

 

Gravatar Image
Program Studi Teknik Informatika, Universitas Ma Chung, Malang - www.machung.ac.id

Leave a Reply

Your email address will not be published. Required fields are marked *