Skip to content

Instantly share code, notes, and snippets.

@galihboy
Last active October 16, 2021 17:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save galihboy/4098be912ed7f3ac0be4ebc049d07bc0 to your computer and use it in GitHub Desktop.
Save galihboy/4098be912ed7f3ac0be4ebc049d07bc0 to your computer and use it in GitHub Desktop.
nama acak versi 2
"""
@author: galih-hermawan
"""
import random
# fungsi untuk membangkitkan nama acak
# paksaGabung: True, jika ingin menggabung nama abdul dan asmaul husna, jika bisa
# False (atau diabaikan), jika tidak ingin digabung
def BangkitNama(daftar, jumlah, paksaGabung = False):
while True:
# ambil nama acak sebanyak jumlah
nama = random.sample(daftar, jumlah)
# mencari list nama anti sendiri
lstAntiSendiri = [i for i,n in enumerate(nama) if n in namaAntiSendiri]
# jika nama anti sendiri ditemukan
if lstAntiSendiri:
# indeks nama anti sendiri
idxAntiSendiri = lstAntiSendiri[0]
# jika posisi nama anti sendiri di nama paling belakang
if idxAntiSendiri == jumlah-1:
#print("abdul di indeks terakhir")
pass
# jika nama abdul ada di depan, nama belakang diganti nama asmaul husna
else:
namaAsmaulHusna = random.choice(daftarAsmaulHusna)
# jika nama asmaul husna dapat digabung dengan abdul
# dan pilihan paksa gabung : True
karCari = CariKarakter(namaAsmaulHusna)
if paksaGabung and karCari != "":
nama[idxAntiSendiri] = "abdu" + karCari + namaAsmaulHusna
while True:
namaPengganti = BangkitNama(daftar, 1)[0]
# cari nama pengganti yang belum ada di list nama
if namaPengganti not in nama:
nama[idxAntiSendiri+1] = namaPengganti
break
else:
nama[idxAntiSendiri+1] = namaAsmaulHusna
break
else:
break
return nama
# fungsi untuk memeriksa karakter/string awal nama asmaul husna
def CariKarakter(nama):
for i in range(2,0,-1):
try:
cek = nama[0:i]
karGabung.index(cek)
except ValueError:
hasil = ""
else:
hasil = cek
break
return hasil
daftarNama = ("muhammad", "abdul", "zulkarnain", "umar", "ali", "saifullah")
daftarAsmaulHusna = ("aziz", "jabbar", "karim", "majid",
"rafi\'", "rahim", "rahman",
"salam", "sami\'", "shabur", "shamad", "syakur")
namaAntiSendiri = ("abdul")
karGabung = ("dh", "n", "r", "s", "sh", "sy", "t", "z")
banyakNama = 3 # jumlah kata (nama) dalam satu string (kalimat)
lstNamaBaru3 = BangkitNama(daftarNama, banyakNama)
strNama3 = " ".join(lstNamaBaru3).title()
print(f"nama baru: {strNama3}") # contoh output: "Umar Abdul Salam"
lstNamaBaru3 = BangkitNama(daftarNama, banyakNama, True)
strNama3 = " ".join(lstNamaBaru3).title()
print(f"nama baru (gabung): {strNama3}") # contoh output: "Umar Abdussalam Ali"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment