Skip to content

Commit

Permalink
chore: update library openseries
Browse files Browse the repository at this point in the history
- memperbaiki unitesting
- menambahkan unitesting untuk beberapa fungsi
- menambahkan dokumentasi
- menambahkan kostum error

Signed-off-by: slowy07 <[email protected]>
  • Loading branch information
slowy07 committed Jan 15, 2024
1 parent eaad392 commit 113b405
Show file tree
Hide file tree
Showing 7 changed files with 272 additions and 47 deletions.
Binary file added .github/openSeries.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion .github/workflows/pythontesting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ jobs:
- name: testing kodenya
run: |
pytest . --verbose
pytest testing/main_test.py --verbose
94 changes: 57 additions & 37 deletions OpenSeries/matematika.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def radian_ke_derajat(radian: float | int) -> float | str:
radian (float atau integer): nilai radian
"""
if not isinstance(radian, (float, int)):
return pesan_error.error_tipe_data()
return pesan_error.error_tipe_data(["float", "int"])
else:
return radian * (180 / constant.pi)

Expand All @@ -31,7 +31,7 @@ def luas_lingkaran(jari: float | int) -> float:
return pesan_error.error_tipe_data(["float", "int"])


def keliling_lingkaran(jari: float | int) -> float:
def keliling_lingkaran(jari: float | int) -> float | str:
"""
menghitung keliling lingkaran
Expand All @@ -43,7 +43,7 @@ def keliling_lingkaran(jari: float | int) -> float:
if isinstance(jari, (float, int)):
return 2 * constant.pi * jari
else:
return pesan_error.error_tipe_data(["float"])
return pesan_error.error_tipe_data(["float", "int"])


def diameter_lingkaran(jari: float | int) -> float | str:
Expand Down Expand Up @@ -77,13 +77,22 @@ def persamaan_linear(
"""
# mengecek apakah variable tersebut bertipe data int atau float
# jika tidak maka error
if isinstance((a, b, c), (int, float)):
return (-b + math.sqrt(b**2 - 4 * a * c)) / 2 * a
if (
isinstance(a, (int, float))
and isinstance(b, (int, float))
and isinstance(c, (int, float))
):
diskriminan = b**2 - 4 * a * c
if diskriminan >= 0:
akar1 = (-b + math.sqrt(diskriminan)) / (2 * a)
return akar1
else:
return pesan_error.error_format("Persamaan memiliki solusi complex")
else:
return pesan_error.error_tipe_data(["float", "int"])


def rata_rata(nilai: list[int | float]) -> list[int | float] | str:
def rata_rata(nilai: list[int | float]) -> int | float | str:
"""
menghitung nilai rata-rata
Expand All @@ -92,15 +101,18 @@ def rata_rata(nilai: list[int | float]) -> list[int | float] | str:
"""
# mengecek apakah variable tersebut bertipe data int atau float
# jika tidak maka error
if isinstance(nilai, (list)):
if isinstance(nilai, list):
# mengecek apakah nilai dalam list kodong
if not nilai:
return pesan_error.error_format("List tidak boleh kosong")
# membuat looping untuk memecah nilai yang terdapat pada list
for cek_nilai in nilai:
# mengecek nilai di dalam list apakah semua tipe data berbentuk int atau float
# jika tidak maka error
if isinstance(cek_nilai, (int, float)):
return sum(nilai) / len(nilai)
else:
# mengecek nilai dalam list apakah semua tipe data berbentuk int
# atau float, jika tidak error
if not isinstance(cek_nilai, (int, float)):
return pesan_error.error_tipe_data(["float", "int"])
# menghitung nilai rata-rata
return sum(nilai) / len(nilai)
else:
return pesan_error.error_tipe_data(["float", "int"])

Expand All @@ -118,6 +130,8 @@ def faktorial(nilai: int) -> int | str:
if isinstance(nilai, int):
if nilai == 0 or nilai == 1:
return 1
elif nilai < 0:
return pesan_error.error_format("Tidak bisa menggunakan angka negatif")
else:
return nilai * faktorial(nilai - 1)
else:
Expand All @@ -134,10 +148,10 @@ def permutasi(nilai: int, r: int) -> int | float | str:
"""
# mengecek apakah variable tersebut bertipe data int atau float
# jika tidak maka error
if isinstance(nilai, (int, float)):
return faktorial(nilai) / faktorial(nilai - r)
if not isinstance(nilai, int) or not isinstance(r, int):
return pesan_error.error_tipe_data(["int"])
else:
return pesan_error.error_tipe_data(["float", "int"])
return faktorial(nilai) / faktorial(nilai - r)


def kombinasi(nilai: int, r: int) -> int | float | str:
Expand All @@ -150,10 +164,10 @@ def kombinasi(nilai: int, r: int) -> int | float | str:
"""
# mengecek apakah variable tersebut bertipe data int atau float
# jika tidak maka error
if isinstance(nilai, (int, float)):
if isinstance(nilai, (int)):
return faktorial(nilai) / (faktorial(r) * faktorial(nilai - r))
else:
return pesan_error.error_tipe_data(["float", "int"])
return pesan_error.error_tipe_data(["int"])


def fpb(
Expand All @@ -171,12 +185,15 @@ def fpb(
if isinstance(bilangan_pertama, (int, float)) and isinstance(
bilangan_kedua, (int, float)
):
while bilangan_kedua:
bilangan_pertama, bilangan_kedua = (
bilangan_kedua,
bilangan_pertama % bilangan_kedua,
)
return abs(bilangan_pertama)
if bilangan_pertama < 0 and bilangan_kedua < 0:
return pesan_error.error_format("Angka tidak boleh negatif")
else:
while bilangan_kedua:
bilangan_pertama, bilangan_kedua = (
bilangan_kedua,
bilangan_pertama % bilangan_kedua,
)
return abs(bilangan_pertama)
else:
return pesan_error.error_tipe_data(["float", "int"])

Expand All @@ -193,20 +210,23 @@ def faktor_prima(n: int) -> list[int] | str:
# menampilkan pesan error jika tipe data salah
return pesan_error.error_tipe_data(["float", "int"])
else:
# jika desimal mengubah bilangan ke integer
n = int(n)
i = 2
faktor = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
# memasukkan hasil faktor prima ke dalam list
faktor.append(i)
if n > 1:
faktor.append(i)
return faktor
if n < 0:
return pesan_error.error_format("Angka tidak boleh negatif")
else:
# jika desimal mengubah bilangan ke integer
n = int(n)
i = 2
faktor = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
# memasukkan hasil faktor prima ke dalam list
faktor.append(i)
if n > 1:
faktor.append(n)
return faktor


def peluang_kejadian(
Expand Down
11 changes: 11 additions & 0 deletions OpenSeries/util/error.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ def error_tipe_data(error_data: list[str]) -> str:
return f"Kamu memasukkan tipe data yang salah, harus {','.join(error_data)}"


def error_format(format_string: str) -> str:
"""
fungsi untuk menampilkan format error
sesuai keinginan dari pesan error
parameter:
format_string (str): pesan yang akan diisi
"""
return "Error: " + format_string


def error_dibagi_nol():
"""
fungsi panggilan untuk menampilkan pesan error
Expand Down
23 changes: 23 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,31 @@
# OpenSeries

![banner](.github/openSeries.png)

Project Untuk Menghitung Segala Jenis Persamaan atau Rumus-Rumus yang terdapat pada bangku sekolah (SMA/SMK/Sederajat).
Project ini bertujuan untuk memudahkan siswa dalam menghitung persamaan atau problem-problem yang terdapat pada pelajaran sekolah (cheat egine untuk Sekolah).

**menghitung nilai probabilitas dari suatu kejadian**

```python
nilai_A = 4
nilai_S = 20

print("menghitung probabilitas suatu kejadian")
print(f"dengan jumlah hasil yang menguntungkan :{nilai_A}")
print(f"dan dengan ukuran ruang sampel {nilai_S}")
print(
f"probabilitas dari kejadiannya adalah: {matematika.peluang_kejadian(nilai_A, nilai_S)}\n"
)
```

## Requirements

Untuk Menjalankan Library ini, kamu harus Memiliki Python dengan versi: 3.11.6 hingga 3.12.

## Installasi
kamu bisa menginstall package ``OpenSeries`` via pip dengan cara

```bash
pip install git+https://github.com/bellshade/OpenSeries
```
28 changes: 24 additions & 4 deletions testing/main_test.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,30 @@
import unittest
from testing.matematika_test import TestKelilingLingkaran
from testing.matematika_test import (
TestKelilingLingkaran,
TestRadianKeDerajat,
TestDiameterLingkaran,
TestPersamaanLinear,
TestRataRata,
TestFaktorial,
TestPermutasi,
TestKombinasi,
TestFPB,
TestFaktorPrima,
)

if __name__ == "__main__":
testing_keliling_lingkaran = unittest.TestLoader().loadTestsFromTestCase(
TestKelilingLingkaran
testing_matematika = unittest.TestLoader().loadTestsFromTestCase(
TestKelilingLingkaran,
TestRadianKeDerajat,
TestDiameterLingkaran,
TestPersamaanLinear,
TestRataRata,
TestFaktorial,
TestPermutasi,
TestKombinasi,
TestFPB,
TestFaktorPrima,
)
all_tests = unittest.TestSuite([testing_keliling_lingkaran])
all_tests = unittest.TestSuite([testing_matematika])

unittest.TextTestRunner(verbosity=2).run(all_tests)
Loading

0 comments on commit 113b405

Please sign in to comment.