def teka_teki_teko( batas) :
# Validasi parameter
if not isinstance ( batas, int ) :
raise ValueError ( "Parameter harus berupa integer" )
if batas < 0 :
raise ValueError ( "Parameter harus berupa unsigned integer (tidak boleh negatif)" )
if batas < 20 :
raise ValueError ( "Parameter harus memiliki nilai paling sedikit 20" )
# Loop dari 1 sampai batas
for i in range ( 1 , batas + 1 ) :
output = ""
# Angka habis dibagi 2
if i % 2 == 0 :
output += "Teka"
# Angka habis dibagi 3
if i % 3 == 0 :
output += "Teki"
# Angka habis dibagi 5
if i % 5 == 0 :
output += "Teko"
# Jika tidak ada yang habis dibagi, cetak angka
if output == "" :
output = str ( i)
print ( output)
# Penggunaan
if __name__ == "__main__" :
try :
print ( "Hasil teka_teki_teko(30):" )
teka_teki_teko( 30 )
print ( "\n \n Tes dengan parameter invalid:" )
# Test Error Handling
print ( "Hasil teka_teki_teko(10):" )
teka_teki_teko( 10 ) # Error nilai paling sedikit 20
# print("Hasil teka_teki_teko(-5):")
# teka_teki_teko(-5) # Error parameter harus berupa unsigned integer
# print("Hasil teka_teki_teko(\"a\"):")
# teka_teki_teko("a") # Error parameter harus berupa integer
except ValueError as e:
print ( f"Error: {e}" )
CmRlZiB0ZWthX3Rla2lfdGVrbyhiYXRhcyk6CgogICAgIyBWYWxpZGFzaSBwYXJhbWV0ZXIKICAgIGlmIG5vdCBpc2luc3RhbmNlKGJhdGFzLCBpbnQpOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBhcmFtZXRlciBoYXJ1cyBiZXJ1cGEgaW50ZWdlciIpCiAgICAKICAgIGlmIGJhdGFzIDwgMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXJhbWV0ZXIgaGFydXMgYmVydXBhIHVuc2lnbmVkIGludGVnZXIgKHRpZGFrIGJvbGVoIG5lZ2F0aWYpIikKICAgIAogICAgaWYgYmF0YXMgPCAyMDoKICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXJhbWV0ZXIgaGFydXMgbWVtaWxpa2kgbmlsYWkgcGFsaW5nIHNlZGlraXQgMjAiKQogICAgCiAgICAjIExvb3AgZGFyaSAxIHNhbXBhaSBiYXRhcwogICAgZm9yIGkgaW4gcmFuZ2UoMSwgYmF0YXMgKyAxKToKICAgICAgICBvdXRwdXQgPSAiIgogICAgICAgIAogICAgICAgICMgQW5na2EgaGFiaXMgZGliYWdpIDIKICAgICAgICBpZiBpICUgMiA9PSAwOgogICAgICAgICAgICBvdXRwdXQgKz0gIlRla2EiCiAgICAgICAgCiAgICAgICAgIyBBbmdrYSBoYWJpcyBkaWJhZ2kgMwogICAgICAgIGlmIGkgJSAzID09IDA6CiAgICAgICAgICAgIG91dHB1dCArPSAiVGVraSIKICAgICAgICAKICAgICAgICAjIEFuZ2thIGhhYmlzIGRpYmFnaSA1CiAgICAgICAgaWYgaSAlIDUgPT0gMDoKICAgICAgICAgICAgb3V0cHV0ICs9ICJUZWtvIgogICAgICAgIAogICAgICAgICMgSmlrYSB0aWRhayBhZGEgeWFuZyBoYWJpcyBkaWJhZ2ksIGNldGFrIGFuZ2thCiAgICAgICAgaWYgb3V0cHV0ID09ICIiOgogICAgICAgICAgICBvdXRwdXQgPSBzdHIoaSkKICAgICAgICAKICAgICAgICBwcmludChvdXRwdXQpCgoKIyBQZW5nZ3VuYWFuCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICB0cnk6CiAgICAgICAgcHJpbnQoIkhhc2lsIHRla2FfdGVraV90ZWtvKDMwKToiKQogICAgICAgIHRla2FfdGVraV90ZWtvKDMwKQogICAgICAgIAogICAgICAgIHByaW50KCJcblxuVGVzIGRlbmdhbiBwYXJhbWV0ZXIgaW52YWxpZDoiKQogICAgICAgICMgVGVzdCBFcnJvciBIYW5kbGluZwoKICAgICAgICBwcmludCgiSGFzaWwgdGVrYV90ZWtpX3Rla28oMTApOiIpCiAgICAgICAgdGVrYV90ZWtpX3Rla28oMTApICAjIEVycm9yIG5pbGFpIHBhbGluZyBzZWRpa2l0IDIwCgogICAgICAgICMgcHJpbnQoIkhhc2lsIHRla2FfdGVraV90ZWtvKC01KToiKQogICAgICAgICMgdGVrYV90ZWtpX3Rla28oLTUpICAjIEVycm9yIHBhcmFtZXRlciBoYXJ1cyBiZXJ1cGEgdW5zaWduZWQgaW50ZWdlcgoKICAgICAgICAjIHByaW50KCJIYXNpbCB0ZWthX3Rla2lfdGVrbyhcImFcIik6IikKICAgICAgICAjIHRla2FfdGVraV90ZWtvKCJhIikgICMgRXJyb3IgcGFyYW1ldGVyIGhhcnVzIGJlcnVwYSBpbnRlZ2VyCiAgICAgICAgCiAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgIHByaW50KGYiRXJyb3I6IHtlfSIp