├── images ├── lempardadu.jpg ├── tebakangka.jpg ├── tebakkata.jpg ├── ceritamaker.jpg ├── guntingbatukertas.jpg └── arahpetualangantext.jpg ├── deteksi-gender ├── runapp.jpg ├── dataset │ ├── data.csv │ └── data.txt ├── priawanitasimple.py ├── README.md └── priawanitacsv.py ├── lempardadu.py ├── .gitattributes ├── .gitignore ├── tebakangka.py ├── ceritamaker.py ├── guntingbatukertas.py ├── arahpetualangan.py ├── README.md └── tebakkata.py /images/lempardadu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/images/lempardadu.jpg -------------------------------------------------------------------------------- /images/tebakangka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/images/tebakangka.jpg -------------------------------------------------------------------------------- /images/tebakkata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/images/tebakkata.jpg -------------------------------------------------------------------------------- /images/ceritamaker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/images/ceritamaker.jpg -------------------------------------------------------------------------------- /deteksi-gender/runapp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/deteksi-gender/runapp.jpg -------------------------------------------------------------------------------- /images/guntingbatukertas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/images/guntingbatukertas.jpg -------------------------------------------------------------------------------- /images/arahpetualangantext.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/HEAD/images/arahpetualangantext.jpg -------------------------------------------------------------------------------- /deteksi-gender/dataset/data.csv: -------------------------------------------------------------------------------- 1 | pria,181,80,44 2 | pria,177,70,43 3 | pria,190,90,47 4 | pria,175,64,39 5 | pria,171,75,42 6 | pria,181,85,43 7 | wanita,160,60,38 8 | wanita,154,54,37 9 | wanita,166,65,40 10 | wanita,165,49,40 11 | wanita,157,55,39 -------------------------------------------------------------------------------- /deteksi-gender/dataset/data.txt: -------------------------------------------------------------------------------- 1 | pria,181,80,44 2 | pria,177,70,43 3 | pria,190,90,47 4 | pria,175,64,39 5 | pria,171,75,42 6 | pria,181,85,43 7 | wanita,160,60,38 8 | wanita,154,54,37 9 | wanita,166,65,40 10 | wanita,165,49,40 11 | wanita,157,55,39 -------------------------------------------------------------------------------- /lempardadu.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def roll(sides=6): 4 | lempardadu = random.randint(1,sides) 5 | return lempardadu 6 | 7 | def main(): 8 | putar = True 9 | while putar: 10 | tanya = str(input('\nIngin melempar dadu? [y/n]')) 11 | if tanya.lower() != 'n': 12 | dadu = roll() 13 | print('Dadu yang keluar: ', dadu) 14 | else: 15 | putar = False 16 | print('\nTerimakasih Sudah Bermain') 17 | 18 | main() -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | 42 | # Directories potentially created on remote AFP share 43 | .AppleDB 44 | .AppleDesktop 45 | Network Trash Folder 46 | Temporary Items 47 | .apdisk 48 | -------------------------------------------------------------------------------- /tebakangka.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def randnumber(): 4 | number = random.randint(1,100) 5 | return number 6 | 7 | def userinput(): 8 | putar = True 9 | while putar: 10 | guest = input('Masukkan angka tebakan: ') 11 | try: 12 | number = int(guest) 13 | except ValueError: 14 | print('Input harus berupa angka') 15 | else: 16 | return int(guest) 17 | putar = False 18 | 19 | def main(): 20 | tebak = True 21 | number = randnumber() 22 | angkauser = userinput() 23 | num_tebak = 0 24 | while tebak: 25 | num_tebak += 1 26 | if (angkauser==number): 27 | print('Tebakan benar, angkanya adalah', number) 28 | print('Tertebak dalam %d tebakan' % num_tebak) 29 | tebak = False 30 | elif (angkauserk:1 31 | batu['aturan'] = (1,0,-1) 32 | kertas['aturan'] = (-1,1,0) 33 | 34 | datapilihan = [gunting,batu,kertas] 35 | 36 | keluar = False 37 | 38 | print('Game Gunting Batu Kertas') 39 | while not keluar: 40 | pilihankomp = random.choice(datapilihan) 41 | pilihanuser = gunting 42 | inputuser = input('Pilihan Kamu: ') 43 | print('Pilihan Komputer: ', pilihankomp['nama']) 44 | 45 | if inputuser.isdigit(): 46 | if inputuser == 0: 47 | keluar = True 48 | else: 49 | print('Input tidak valid.') 50 | else: 51 | if inputuser == 'gunting': 52 | pilihanuser = gunting 53 | elif inputuser == 'batu': 54 | pilihanuser = batu 55 | elif inputuser == 'kertas': 56 | pilihanuser = kertas 57 | else: 58 | print('Input tidak valid') 59 | 60 | cekmenang = winlose(pilihanuser['aturan'],pilihanuser['nama'],pilihankomp['nama']) 61 | print() 62 | 63 | main() -------------------------------------------------------------------------------- /deteksi-gender/priawanitacsv.py: -------------------------------------------------------------------------------- 1 | import csv # import paket csv 2 | from sklearn import tree # import sklearn untuk decision tree 3 | 4 | gender = [] # variabel global gender 5 | data = [] # variabel global data 6 | 7 | # S: parse data csv 8 | with open('dataset\\data.csv','r',newline='',encoding='utf-8') as csvfile: 9 | r = csv.reader(csvfile, delimiter=',') 10 | for row in r: 11 | gendertemp=[] 12 | datatemp=[] 13 | for i in range(len(row)): 14 | # genderin=[] 15 | if i == 0: # row[0] = gender 16 | gendertemp = row[0] 17 | # print(gender) 18 | elif i == 1: # row[1] = tinggi 19 | tinggi = int(row[1]) 20 | datatemp.append(tinggi) 21 | elif i == 2: # row[2] = berat 22 | berat = int(row[2]) 23 | datatemp.append(berat) 24 | else: # row[3] = ukuran sepatu 25 | ukrsepatu = int(row[3]) 26 | datatemp.append(ukrsepatu) 27 | gender.append(gendertemp) # gabung gender 28 | data.append(datatemp) # gabung karakter 29 | csvfile.close() 30 | # E: parse data csv 31 | 32 | # S: print data awal 33 | print('\n Dataset Training:') 34 | print('Data Gender: ', end='') 35 | print(gender) 36 | print('Data Karakter: ', end='') 37 | print(data) 38 | # E: print data awal 39 | 40 | # S: klasifikasi dan training dataset untuk decision tree 41 | # memanggil metode DecisionTreeClassifier() dari onjek tree 42 | klasifikasi = tree.DecisionTreeClassifier() 43 | # training data, memanggil metode fit(param), param = data dan gender 44 | klasifikasi = klasifikasi.fit(data,gender) 45 | # E: klasifikasi dan training dataset untuk decision tree 46 | 47 | # S: data baru untuk di prediksi 48 | # memasukkan data baru untuk di prediksi 49 | # memanggil metode predict([data]) 50 | databaru = [170,59,41] 51 | prediksi = klasifikasi.predict([databaru]) 52 | # E: data baru untuk di prediksi 53 | 54 | # S: print hasil prediksi 55 | print('\n Data Tes Baru: ', end='') 56 | print(databaru, end='') 57 | print(', ', end='') 58 | print('Hasil: ', end='') 59 | print(prediksi) 60 | # E: print hasil prediksi -------------------------------------------------------------------------------- /arahpetualangan.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def msg(posisi): 4 | if posisi['msg'] == '': 5 | return "kau memasuki ruangan " + posisi['nama'] + '.' 6 | else: 7 | return posisi['msg'] 8 | 9 | def pilihan(posisi,dir): 10 | if dir == 'u': 11 | pilih = 0 12 | elif dir == 't': 13 | pilih = 1 14 | elif dir == 's': 15 | pilih = 2 16 | elif dir == 'b': 17 | pilih = 3 18 | else: 19 | return -1 20 | # return kearah 21 | if posisi['arah'][pilih] == 0: 22 | return 4 23 | else: 24 | return pilih 25 | 26 | def main(): 27 | arah = (0,0,0,0) # u,t,s,b 28 | 29 | # bikin dictionary tiap ruang 30 | ruangtamu = {'nama':'Ruang Tamu','arah':arah,'msg':''} 31 | ruangkeluarga = {'nama':'Ruang Keluarga','arah':arah,'msg':''} 32 | ruangkerja = {'nama':'Ruang Kerja','arah':arah,'msg':''} 33 | kamar = {'nama':'kamar','arah':arah,'msg':''} 34 | ruangmakan = {'nama':'Ruang Makan','arah':arah,'msg':''} 35 | dapur = {'nama':'Dapur','arah':arah,'msg':''} 36 | 37 | # inisialisasi ruangan U,T,S,B 38 | ruangtamu['arah'] = (ruangkeluarga,0,0,0) 39 | ruangkeluarga['arah'] = (0,ruangmakan,ruangtamu,ruangkerja) 40 | ruangkerja['arah'] = (kamar,ruangkeluarga,0,0) 41 | kamar['arah'] = (0,0,ruangkerja,0) 42 | ruangmakan['arah'] = (0,dapur,0,ruangkeluarga) 43 | dapur['arah'] = (0,0,0,ruangmakan) 44 | 45 | # inisialisasi masuk dari ruang tamu 46 | ruangan = [ruangtamu,ruangkeluarga,ruangkerja,kamar,ruangmakan,dapur] 47 | ruang_telur = random.choice(ruangan) 48 | telur_diantarkan = False 49 | posisi = ruangtamu 50 | print('Anda membawa sebuah telur untuk diantarkan ke dalam keranjang.') 51 | print('Ada sebuah keranjang dalam rumah, bisa kah kau menemukannnya untuk mengantar telurnya?') 52 | 53 | while True: 54 | if telur_diantarkan and posisi['nama'] == 'Ruang Tamu': 55 | print('Kau berhasil mengantarkan telurnya, sekarang kau bisa pergi, selamat !!!') 56 | break; 57 | elif not telur_diantarkan and posisi['nama'] == ruang_telur['nama']: 58 | telur_diantarkan = True 59 | print(msg(posisi) + 'ada keranjang, telur berhasil di kirim, sekarang keluar!') 60 | posisi['msg'] = ('kau kembali ke ' + posisi['nama'] + ' ayo cepat keluar.!') 61 | else: 62 | print(msg(posisi)) 63 | posisi['msg'] = 'kau kembali ke ' + posisi['nama'] 64 | 65 | stuck = True 66 | while stuck: 67 | dir = input('Ke arah mana kau ingin pergi: u/t/s/b? ') 68 | pilih = pilihan(posisi,dir) 69 | if pilih == -1: 70 | print('tolong pilih u/t/s/b?') 71 | elif pilih == 4: 72 | print('kau tidak bisa ke arah sana') 73 | else: 74 | posisi = posisi['arah'][pilih] 75 | stuck = False 76 | 77 | # print(posisi['nama']) 78 | 79 | main() -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mini Project to Learn Python 2 | 3 | Some mini project that can be used to learn Python, this project has represented some use of the important parts in the Python programming such as functions, loops, list, dictionary, data types, package etc. that can be studied by doing while code the project. 4 | 5 | Beberapa mini project yang dapat digunakan untuk belajar Python, beberapa project ini telah merepresentasikan penggunaan bagian-bagian penting dalam pemograman python seperti fungsi, perulangan, list, dictionary, type data, hingga penggunaan package yang dapat dipelajari dalam proses pembuatannya. 6 | 7 | ## Permainan Lempar Dadu (Dice Rolling Simulator) 8 | 9 | Seperti namanya, project ini merupakan simulator permainan lempar dadu. User akan diminta melempar sebuah dadu, kemudian komputer mengeluarkan nilai dadu secara acak, sangat sederhana namun baik untuk project-project berikutnya. 10 | 11 | Konsep yang digunakan: 12 | * Random 13 | * Integer 14 | * Print 15 | * While Loop 16 | 17 | ## Pembuat Cerita (Story Maker) 18 | 19 | Tujuannya adalah membuat sebuah cerita menjadi dinamis. Awalnya kita mendefenesikan sebuah string berupa template cerita, pada bagian-bagian tertentu dari template tersebut dapat berubah-ubah sesuai dengan input user. User akan di minta untuk memasukkan beberapa kata baik itu kata kerja, benda hingga sifat, kemudian program mengeluarkan cerita berdasarkan isi input dari user. 20 | 21 | Konsep yang digunakan: 22 | * String 23 | * Variable 24 | * Input-output 25 | * List 26 | 27 | ## Tebak Angka (Guest The Number) 28 | 29 | Permainan tebak angka, secara acak komputer akan mengacak angka 1 - 100 untuk dipilih satu, user akan menebak angka berapa yang telah di acak. Jika pilihan user lebih kecil dari angkanya akan keluar notice bahwa angka terlalu kecil, dan begitu pula sebaliknnya. 30 | 31 | Konsep yang digunakan: 32 | * Random 33 | * Function 34 | * If-Else Statement 35 | * While Loop 36 | * Integer 37 | * Input-output 38 | * Execption 39 | 40 | ## Gunting Batu Kertas (Rock Paper Scissors) 41 | 42 | Permainan gunting batu kertas melawan komputer, user memilih antara gunting, batu dan kertas, kemudian komputer juga akan memilih secara acak. Seperti permainan gunting batu kertas biasanya. 43 | 44 | Konsep yang digunakan: 45 | * Random 46 | * Function 47 | * If-Else Statement 48 | * Dictionary 49 | * List 50 | * Tuple 51 | * While Loop 52 | 53 | ## Arah Petualangan dengan Text (Text Based Adventure Game) 54 | 55 | Game ini mengambil skenario seekor kelinci yang ingin mengantar sebuah telur untuk di simpan pada sebuah keranjang. Keranjang berada pada sebuah ruangan dalam rumah. Dengan menggunakan input text user dapat menggerakkan kelinci dari satu ruangan ke ruangan lain untuk mencari keranjang. Setelah telur berhasil di kirim, kelinci harus di arahkan ke ruangan awal pada saat game baru di mulai. 56 | 57 | Konsep yang digunakan: 58 | * Random 59 | * Function 60 | * If-Else Statement 61 | * Dictionary 62 | * List 63 | * Tuple 64 | * While Loop 65 | * Bolean 66 | * Input-output 67 | 68 | ## Tebak Kata (Guest The Word / Hangman) 69 | 70 | Tebak kata merupakan game sederhana yang goalnya user akan menebak kata acak pilihan game. Awalnya game memiliki beberapa kata, kemudian dipilih secara acak untuk di tebak oleh user. User bisa memasukkan 1 huruf pertebakan kemudian game mengecek apakah ada huruf tersebut yang terkandung dalam kata, jika ada huruf akan muncul dan begitu seterusnya sampai user dapat menebak keseluruhan huruf yang membentuk kata. 71 | 72 | Konsep yang digunakan: 73 | * Random 74 | * Function 75 | * If-Else Statement 76 | * Dictionary 77 | * List 78 | * Tuple 79 | * For Loop 80 | * While Loop 81 | * Bolean 82 | * Input-output 83 | 84 | ## Kontributor 85 | 86 | * [Muhammad Nur Yasir Utomo](https://www.facebook.com/yasirutomo) -------------------------------------------------------------------------------- /tebakkata.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | def acakkata(): # list kata 4 | katakata = ['mutlak', 5 | 'benar', 6 | 'terserap', 7 | 'menonjolkan', 8 | 'aktivis', 9 | 'sebenarnya', 10 | 'aktualitas', 11 | 'remaja', 12 | 'mempengaruhi', 13 | 'terpengaruh', 14 | 'udara', 15 | 'waspada', 16 | 'sepanjangwaktu', 17 | 'mengalegorisasikan', 18 | 'persekutuan', 19 | 'aliansi', 20 | 'kiasan', 21 | 'sindiran', 22 | 'baik', 23 | 'samasekali', 24 | 'memperkuat', 25 | 'analisis', 26 | 'semu', 27 | 'tampaknya', 28 | 'penampilan', 29 | 'menangkap', 30 | 'menilai', 31 | 'penilaian', 32 | 'anggapan', 33 | 'astronomis', 34 | 'sikap', 35 | 'rata-rata', 36 | 'sadar', 37 | 'kesadaran', 38 | 'bayi', 39 | 'padadasarnya', 40 | 'tongkat', 41 | 'kepercayaan', 42 | 'keyakinan', 43 | 'besar', 44 | 'darah', 45 | 'berbasisluas', 46 | 'tanpahenti', 47 | 'pusat', 48 | 'bersertifikat', 49 | 'nyanyian', 50 | 'klaim', 51 | 'rahasia', 52 | 'memikirkan', 53 | 'tanggungjawab', 54 | 'komentar', 55 | 'komentator', 56 | 'lengkap', 57 | 'samasekali', 58 | 'memahami', 59 | 'terpadu', 60 | 'curhat', 61 | 'dugaan', 62 | 'hatinurani', 63 | 'kesadaran', 64 | 'besar', 65 | 'sangat'] 66 | kataterpilih = random.choice(katakata) 67 | return kataterpilih 68 | 69 | def cektebakan(parsekata,huruftebakan=None): # cek apakan huruf ada di kata 70 | if huruftebakan in parsekata: 71 | return True 72 | else: 73 | return False 74 | 75 | def hitunginput(huruftebakan): # menghitung jumlah input tebakan 76 | count = 0 77 | for i in huruftebakan: 78 | count += 1 79 | return count 80 | 81 | def progresskata(parsekata,progress,huruftebakan=None): # fungsi tebak per 1 kata 82 | if progress == None: # jika game baru di mulai progress masih * semua 83 | progress = [] 84 | for i in parsekata: 85 | progress.append('*') 86 | 87 | for i in (i for i,x in enumerate(parsekata) if x == huruftebakan): 88 | progress[i] = str(huruftebakan) # ubah * jd huruf 89 | 90 | return progress 91 | 92 | def tebaklangsung(parsekata,huruftebakan): # fungsi tebakan langsung 93 | kata = ''.join(parsekata) 94 | tebak = ''.join(huruftebakan) 95 | 96 | if kata == tebak: 97 | return True 98 | else: 99 | return False 100 | 101 | def cekselesai(progress): # cek progress kata yang di tebak 102 | ada = -1 103 | for i in (i for i,x in enumerate(progress) if x == '*'): 104 | ada = i 105 | 106 | if ada != -1: 107 | return True 108 | else: 109 | return False 110 | 111 | def join(kata): # menggabungkan isi list 112 | kata = ' '.join(kata) 113 | return kata 114 | 115 | def sudahdipilih(baghuruf,pilihan): # fungsi cek huruf pernah dipilih 116 | ada = -1 117 | for i in (i for i,x in enumerate(baghuruf) if x == pilihan): 118 | ada = i 119 | 120 | if ada != -1: 121 | return True 122 | else: 123 | return False 124 | 125 | def main(): 126 | kata = acakkata() 127 | parsekata = list(kata) 128 | panjangkata = len(parsekata) 129 | progress = None 130 | tertebak = False 131 | telahdipilih = [] 132 | 133 | # print(parsekata) 134 | print('Selamat datang pada GAME TEBAK KATA.') 135 | 136 | langkah = 0 137 | while not tertebak: 138 | print('Kata berisi %d huruf, ' % panjangkata, end='') 139 | huruftebakan = input('silahkan tebak 1 huruf: ') 140 | 141 | jmltebakan = hitunginput(huruftebakan) 142 | if jmltebakan == 1: # jika input hanya 1 huruf 143 | # S: cek huruf sudah pernah di pilih 144 | cektlhdipilih = sudahdipilih(telahdipilih,huruftebakan) 145 | if cektlhdipilih: 146 | print('Anda sudah menebak hurur %s sebelumnya.' % huruftebakan) 147 | print(join(progress)) 148 | continue # lansung langkah berikutnya 149 | else: 150 | telahdipilih.append(huruftebakan) 151 | # E: cek huruf sudah pernah di pilih 152 | 153 | # S: cek jika huruf tebakan ada dalam kata 154 | cekada = cektebakan(parsekata,huruftebakan) 155 | if cekada: 156 | progress = progresskata(parsekata,progress,huruftebakan) 157 | print(join(progress)) 158 | else: 159 | print('Tidak mengandung huruf ', huruftebakan) 160 | print(join(progress)) 161 | # E: cek jika huruf tebakan ada dalam kata 162 | 163 | # S: cek jika huruf sudah berhasil tertebak 164 | selesai = cekselesai(progress) 165 | if not selesai: 166 | print('Selamat Anda berhasil!!!') 167 | print('Kata ''%s'' tertebak dalam %d langkah.' % (join(parsekata),langkah)) 168 | tertebak = True 169 | # E: cek jika huruf sudah berhasil tertebak 170 | else: # jika input lebih dari 1 huruf 171 | if jmltebakan == 0: # tidak ada input 172 | print('Tidak ada input, masukkna satu huruf.') 173 | print(join(progress)) 174 | else: # input lebih dari satu, tebakan langsung 175 | langsung = tebaklangsung(parsekata,huruftebakan) 176 | if langsung == True: # jika tebakan langsung benar 177 | print('Selamat tebakan langsung anda berhasil!!!') 178 | print('Kata ''%s'' tertebak dalam %d langkah.' % (join(parsekata),langkah)) 179 | tertebak = True 180 | else: # tebakan langsung salah 181 | print('Tebakan langsung anda belum tepat.') 182 | print(join(progress)) 183 | langkah += 1 184 | 185 | main() --------------------------------------------------------------------------------