def teka_teki_teko(batas):
"""
Fungsi untuk mencetak angka 1 sampai batas dengan aturan penggantian:
- Habis dibagi 2 -> "Teka"
- Habis dibagi 3 -> "Teki"
- Habis dibagi 5 -> "Teko"
- Kombinasi sesuai dengan pembagi yang terpenuhi
Args:
batas (int): Batas atas pencetakan, harus >= 20
Raises:
ValueError: Jika batas bukan integer atau < 20
"""
# Validasi input: harus integer dan minimal 20
if not isinstance(batas, int) or batas < 20:
raise ValueError("Parameter batas harus berupa integer dan minimal 20")
# Loop dari 1 sampai batas
for i in range(1, batas + 1):
output = ""
if i % 2 == 0:
output += "Teka"
if i % 3 == 0:
output += "Teki"
if i % 5 == 0:
output += "Teko"
if output == "":
output = str(i)
print(output)
# Test
print("=== Testing teka_teki_teko(30) ===")
try:
teka_teki_teko(30)
except Exception as e:
print(f"Error: {e}")
print("\n=== Testing dengan parameter invalid ===")
try:
teka_teki_teko(15) # error karena < 20
except Exception as e:
print(f"Error: {e}")
try:
teka_teki_teko("abc") # error karena bukan integer
except Exception as e:
print(f"Error: {e}")
try:
teka_teki_teko(19.5) # error karena bukan integer
except Exception as e:
print(f"Error: {e}")
print("\n=== Testing dengan batas minimum (20) ===")
try:
teka_teki_teko(20)
except Exception as e:
print(f"Error: {e}")
print("\n=== Testing dengan batas lebih besar ===")
try:
teka_teki_teko(25)
except Exception as e:
print(f"Error: {e}")