diff --git a/OpenSeries/bilangan_istimewa.py b/OpenSeries/bilangan_istimewa.py index 913f837..4261202 100644 --- a/OpenSeries/bilangan_istimewa.py +++ b/OpenSeries/bilangan_istimewa.py @@ -94,3 +94,22 @@ def angka_pronic(angka: int) -> Union[str, error.ErrorTipeData]: if angka == angka_pangkat * (angka_pangkat + 1) else bukan.capitalize() ) + + +def angka_segitiga(angka: int) -> Union[int, error.ErrorTipeData, error.Error]: + """ + bilangan segitiga adalah bilangan yang dapat disusun dalam bentuk segitiga sama sisi + + Parameter: + angka (int): angka yang ingin dimasukkan + + Return: + int: angka segitiga di posisi yang ditentukan + error.Error: jika angka negatif + error.ErrorTipeData: jika tipe data salah + """ + if not isinstance(angka, int): + return error.ErrorTipeData(["int"]) + if angka < 0: + return error.Error("angka tidak boleh negatif") + return angka * (angka + 1) // 2 diff --git a/example/bilangan/segitiga.py b/example/bilangan/segitiga.py new file mode 100644 index 0000000..fda11f7 --- /dev/null +++ b/example/bilangan/segitiga.py @@ -0,0 +1,4 @@ +import OpenSeries.bilangan_istimewa as bilangan + +angka = 3 +print(f"angka segitiga dari {angka} adalah {bilangan.angka_segitiga(angka)}") diff --git a/testing/bilangan_istimewa_test.py b/testing/bilangan_istimewa_test.py index db1cb3e..55552b1 100644 --- a/testing/bilangan_istimewa_test.py +++ b/testing/bilangan_istimewa_test.py @@ -49,3 +49,19 @@ def test_angka_pronic_return_tipe_data(self): def test_angka_pronic_negatif(self): hasil = bilangan.angka_pronic(-30) self.assertIsInstance(hasil, str) + + +class TestAngkaSegitiga(unittest.TestCase): + def test_angka_segitiga(self): + self.assertEqual(bilangan.angka_segitiga(0), 0) + self.assertEqual(bilangan.angka_segitiga(3), 6) + + def test_angka_negatif(self): + hasil = bilangan.angka_segitiga(-1) + with self.assertRaises(error.Error): + raise hasil + + def test_beda_tipe_data(self): + hasil = bilangan.angka_segitiga("12") + with self.assertRaises(error.ErrorTipeData): + raise hasil diff --git a/testing/main_test.py b/testing/main_test.py index f2978cb..1139cb8 100644 --- a/testing/main_test.py +++ b/testing/main_test.py @@ -32,6 +32,7 @@ TestAngkaArmstrong, TestAngkaAutomorphic, TestAngkaPronic, + TestAngkaSegitiga, ) from testing.statistika_test import TestFungsiEntropy, TestFungiStandardDeviasi @@ -74,6 +75,7 @@ TestAngkaArmstrong, TestAngkaAutomorphic, TestAngkaPronic, + TestAngkaSegitiga, ] all_tests = unittest.TestSuite()