fork download
  1. def teka_teki_teko(batas):
  2. """
  3. Fungsi yang mencetak angka dari 1 sampai batas dengan aturan khusus
  4.  
  5. :param batas: bilangan batas (unsigned integer, minimal 20)
  6. :raises ValueError: jika batas tidak memenuhi kriteria
  7. :raises TypeError: jika batas bukan integer
  8. """
  9. # Validasi tipe data
  10. if not isinstance(batas, int):
  11. raise TypeError("Parameter batas harus berupa integer")
  12.  
  13. # Validasi nilai minimum dan unsigned (positif)
  14. if batas < 0:
  15. raise ValueError("Parameter batas harus berupa unsigned integer (positif)")
  16.  
  17. if batas < 20:
  18. raise ValueError("Parameter batas harus memiliki nilai paling sedikit 20")
  19.  
  20. # Loop dari 1 sampai batas
  21. for i in range(1, batas + 1):
  22. output = ""
  23.  
  24. # Cek pembagian dengan 2, 3, dan 5
  25. if i % 2 == 0:
  26. output += "Teka"
  27. if i % 3 == 0:
  28. output += "Teki"
  29. if i % 5 == 0:
  30. output += "Teko"
  31.  
  32. # Jika tidak ada yang habis dibagi, cetak angka
  33. if output == "":
  34. output = str(i)
  35.  
  36. print(output)
  37.  
  38. # Testing dan contoh penggunaan
  39. if __name__ == "__main__":
  40. print("=== TESTING FUNGSI TEKA TEKI TEKO ===\n")
  41.  
  42. # Test case valid
  43. try:
  44. print("Test dengan batas 30:")
  45. teka_teki_teko(30)
  46. print()
  47. except (ValueError, TypeError) as e:
  48. print(f"Error: {e}\n")
  49.  
  50. # Test case dengan input invalid
  51. test_cases = [
  52. ("string", "Input bukan integer"),
  53. (-5, "Input negatif"),
  54. (15, "Input kurang dari 20"),
  55. (19, "Input tepat di bawah minimum")
  56. ]
  57.  
  58. print("=== TESTING ERROR HANDLING ===")
  59. for test_input, description in test_cases:
  60. try:
  61. print(f"\nTest {description} ({test_input}):")
  62. teka_teki_teko(test_input)
  63. except (ValueError, TypeError) as e:
  64. print(f"Error berhasil ditangkap: {e}")
  65.  
  66.  
Success #stdin #stdout 0.04s 9344KB
stdin
Standard input is empty
stdout
=== TESTING FUNGSI TEKA TEKI TEKO ===

Test dengan batas 30:
1
Teka
Teki
Teka
Teko
TekaTeki
7
Teka
Teki
TekaTeko
11
TekaTeki
13
Teka
TekiTeko
Teka
17
TekaTeki
19
TekaTeko
Teki
Teka
23
TekaTeki
Teko
Teka
Teki
Teka
29
TekaTekiTeko

=== TESTING ERROR HANDLING ===

Test Input bukan integer (string):
Error berhasil ditangkap: Parameter batas harus berupa integer

Test Input negatif (-5):
Error berhasil ditangkap: Parameter batas harus berupa unsigned integer (positif)

Test Input kurang dari 20 (15):
Error berhasil ditangkap: Parameter batas harus memiliki nilai paling sedikit 20

Test Input tepat di bawah minimum (19):
Error berhasil ditangkap: Parameter batas harus memiliki nilai paling sedikit 20