├── .gitattributes ├── .gitignore ├── README.md ├── arahpetualangan.py ├── ceritamaker.py ├── deteksi-gender ├── README.md ├── dataset │ ├── data.csv │ └── data.txt ├── priawanitacsv.py ├── priawanitasimple.py └── runapp.jpg ├── guntingbatukertas.py ├── images ├── arahpetualangantext.jpg ├── ceritamaker.jpg ├── guntingbatukertas.jpg ├── lempardadu.jpg ├── tebakangka.jpg └── tebakkata.jpg ├── lempardadu.py ├── tebakangka.py └── tebakkata.py /.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 | -------------------------------------------------------------------------------- /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) -------------------------------------------------------------------------------- /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() -------------------------------------------------------------------------------- /ceritamaker.py: -------------------------------------------------------------------------------- 1 | cerita = ''' 2 | saya merasa {} hari ini, 3 | jika tidak hujan, hari ini saya akan {}, 4 | dan pergi ke {} untuk membuat {}, 5 | menghabiskan waktu sebelum memesan {} 6 | untuk makan, dan pulang pada {} hari, 7 | untuk melanjutkan dengan {} di rumah 8 | ''' 9 | 10 | def main(): 11 | keadaan = input('Bagaimana perasaan Anda hari ini? (eg. sehat): ') 12 | lokasi = input('Masukkan nama tempat? (eg. lapangan/mall): ') 13 | objek = input('Masukkan kata objek? (eg. PR/Mading/layangan): ') 14 | makanan = input('Nama makanan yang Anda suka? (eg. coto): ') 15 | hari = input('Masukkan ungkapan waktu? (eg. pagi/siang/sore/malam): ') 16 | 17 | pekerjaan = [] 18 | pekerjaan.append(input('Masukkan ungkapan kata kerja? (eg. bersepeda): ')) 19 | pekerjaan.append(input('Masukkan ungkapan kata kerja yang biasa dilakukan dirumah? (eg. tidur): ')) 20 | 21 | mad_lib = cerita.format(keadaan, 22 | pekerjaan[0], 23 | lokasi, 24 | objek, 25 | makanan, 26 | hari, 27 | pekerjaan[1]) 28 | print(mad_lib) 29 | 30 | main() 31 | -------------------------------------------------------------------------------- /deteksi-gender/README.md: -------------------------------------------------------------------------------- 1 | # Deteksi Gender (Pria/Wanita) DTree 2 | 3 | Deteksi Gender (Pria/Wanita) DTree adalah sebuah apliaksi sederhana untuk mendeteksi gender (pria/wanita) berdasarkan dengan karakter masing-masing gender. Karakter yang digunakan pada aplikasi ini adalah tinggi badan, berat badan dan ukuran sepatu. Dataset karater menjadi data latih untuk metode Decision Tree untuk dapat mendeteksi gender (pria/wanita) untuk input karakter baru. 4 | 5 | ## Gambaran Umum 6 | 7 | Sebagai gambaran, struktur deteksi gender sangat sederhana dengan bagian: 8 | 9 | * **dataset**: berisi file .csv dan .txt dataset yang digunakan untuk training 10 | * **priawanitacsv.py**: aplikasi deteksi gender dengan dataset dari file .csv / .txt 11 | * **priawanitasimple.py**: aplikasi deteksi gender sederhana 12 | 13 | ## Instalasi dan Dependensi Paket 14 | 15 | * Install Python (Kontributor menggunakan Python 3.5) 16 | * Install package numpy, scipy dan scikit-learn lewat pip (pip install) 17 | * Simpan file pada direktori yang dikehendaki 18 | * Buka direktori menggunakan terminal / cmd 19 | * Eksekusi dengan perintah (python [namafile]) 20 | * Selesai 21 | 22 | ## Kontributor 23 | 24 | * [Muhammad Nur Yasir Utomo](https://www.facebook.com/yasirutomo) -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /deteksi-gender/priawanitasimple.py: -------------------------------------------------------------------------------- 1 | from sklearn import tree # decision tree 2 | 3 | # sample data format [tinggi, berat, ukuran-sepatu] 4 | # data ukuran dari 11 orang 5 | data = [[181,80,44], [177,70,43], [160,60,38], [154,54,37], 6 | [166,65,40], [190,90,47], [175,64,39], [165,49,40], 7 | [171,75,42], [157,55,39], [181,85,43],] 8 | 9 | # data gender,berurut sesuai dengan datanya (merujuk variabel data) 10 | gender = ['pria', 'pria', 'wanita', 'wanita', 11 | 'wanita', 'pria', 'pria', 'wanita', 12 | 'pria', 'wanita', 'pria',] 13 | 14 | # memanggil metode DecisionTreeClassifier() dari onjek tree 15 | klasifikasi = tree.DecisionTreeClassifier() 16 | # training data, memanggil metode fit(param), param = data dan gender 17 | klasifikasi = klasifikasi.fit(data,gender) 18 | 19 | # memasukkan data baru untuk di prediksi 20 | # memanggil metode predict([data]) 21 | databaru = [170,59,41] 22 | prediksi = klasifikasi.predict([databaru]) 23 | 24 | # print hasil prediksi 25 | print(data) 26 | # print(type(data)) 27 | print(prediksi) -------------------------------------------------------------------------------- /deteksi-gender/runapp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/deteksi-gender/runapp.jpg -------------------------------------------------------------------------------- /guntingbatukertas.py: -------------------------------------------------------------------------------- 1 | import random 2 | import sys 3 | 4 | def initial(pilihan): 5 | if pilihan == 'Gunting': 6 | return 0 7 | if pilihan == 'Batu': 8 | return 1 9 | if pilihan == 'Kertas': 10 | return 2 11 | 12 | def winlose(aturan,pilihanuser,pilihankomp): 13 | cekpemenang = initial(pilihankomp) 14 | cekaturan = aturan[cekpemenang] 15 | 16 | if cekaturan == 1: 17 | print('Selamat kamu Menang.') 18 | elif cekaturan == 0: 19 | print('Pilihan sama, Seri.') 20 | else: 21 | print('Maaf, kamu kalah.') 22 | 23 | def main(): 24 | aturan = (0,0,0) # gunting, batu, kertas 25 | 26 | gunting = {'nama':'Gunting','aturan':aturan,'pesan':''} 27 | batu = {'nama':'Batu','aturan':aturan,'pesan':''} 28 | kertas = {'nama':'Kertas','aturan':aturan,'pesan':''} 29 | 30 | gunting['aturan'] = (0,-1,1) # g=g:0,gk: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() -------------------------------------------------------------------------------- /images/arahpetualangantext.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/images/arahpetualangantext.jpg -------------------------------------------------------------------------------- /images/ceritamaker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/images/ceritamaker.jpg -------------------------------------------------------------------------------- /images/guntingbatukertas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/images/guntingbatukertas.jpg -------------------------------------------------------------------------------- /images/lempardadu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/images/lempardadu.jpg -------------------------------------------------------------------------------- /images/tebakangka.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/images/tebakangka.jpg -------------------------------------------------------------------------------- /images/tebakkata.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yasirutomo/mini-project-python/75a906553bd42c6479a0e9f73bf0e4c26decd248/images/tebakkata.jpg -------------------------------------------------------------------------------- /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() -------------------------------------------------------------------------------- /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 (angkauser