Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
Python da hiç denk geldiniz mi: Su sayacı mantığı gibi çalışan, ama harfleri çeviren bir fonksiyon veya kütüphane var mı?
örnek: fonksiyon'a ABCD gönderdiğimizde geri ABCE dönderecek, yani sondakini bir arttıracak, ABCZ gönderdiğimizde ise ABDA dönderen bir fonksiyon var mı?
Ben aradım bulamadım, belki siz denk gelmişsinizdir. Kendim şimdi yapmaya çalışıyorum, bir yerden sonra kafam karışıyor sonunu getiremiyorum.
Öyle hazır bir kütüphane var mı bilmiyorum ama yarım saat kadar önce bu yorumu görünce merak edip hızlıca bir deneme yapmak istedim. İstediğin bu şekilde miydi bilmiyorum, bi test edersin artık, olmazsa da eksik yerleri düzenlersin tabi
import string
abc = string.ascii_letters
def arttir(text):
c = 1
text_list = list(text)
while True:
index = abc.index(text_list[-c])
if not list(filter(lambda a: a!=abc[-1], text_list)):
return "".join(text_list)
if text_list[-c] == abc[-1]:
text_list[-c] = abc[0]
c += 1
continue
else:
text_list[-c] = abc[index+1]
return "".join(text_list)
if __name__ == "__main__":
print(arttir("AVscXZ"))
Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
03-11-2020, Saat: 12:35
(Son Düzenleme: 03-11-2020, Saat: 13:17, Düzenleyen: oktay811.)
gecemor;
Teşekkürler abi, sen de olmazsan halimiz yaman olurdu python da
def arttir(text,tekrar=3,yan_yana=False,ek_harfler=None):
abc = list("ABCDEFGHIJKLMNOPRSTUVWQYZ0123456789")
if (ek_harfler!=None) and (type(ek_harfler)==list):
abc+=ek_harfler
c = 1
text_list = list(text)
while 1:
konum = abc.index(text_list[-c])
if not list(filter(lambda a: a!=abc[-1], text_list)):
return "".join(text_list)
if text_list[-c] == abc[-1]:
text_list[-c] = abc[0]
c += 1
continue
else:
s=1
while 1:
text_list[-c] = abc[(konum+s) if (konum+s)<len(abc) else 0]
if text_list.count(abc[(konum+s) if (konum+s)<len(abc) else 0])+1<tekrar:
break
s+=1
text_list[-c] = abc[(konum+s) if (konum+s)<len(abc) else 0]
return "".join(text_list)
if __name__ == "__main__":
kod="FFHGHGA"
while 1:
kod=arttir(kod)
time.sleep(0.5)
print(kod)
Kod da değişiklik yaptım biraz, tekrar sayısını düşürtmeye çalıştım, yani gelen string içerisinde 3 tane aynı harf olmayacak. Düzenlemeye çalıştığım hali böyle, şimdilik işe yarıyor.
Bir de yan_yana harf olmayacak şekilde düzenlemeye çalışacağım.
Senin kod ile ilgili bir sorum olacak; while döngüsünün altındaki ilk if bloğunun görevi tam olarak nedir?
Teşekkürler.
(03-11-2020, Saat: 12:35)oktay811 Nickli Kullanıcıdan Alıntı: gecemor;
Teşekkürler abi, sen de olmazsan halimiz yaman olurdu python da
def arttir(text,tekrar=3,yan_yana=False,ek_harfler=None):
abc = list("ABCDEFGHIJKLMNOPRSTUVWQYZ0123456789")
if (ek_harfler!=None) and (type(ek_harfler)==list):
abc+=ek_harfler
c = 1
text_list = list(text)
while 1:
konum = abc.index(text_list[-c])
if not list(filter(lambda a: a!=abc[-1], text_list)):
return "".join(text_list)
if text_list[-c] == abc[-1]:
text_list[-c] = abc[0]
c += 1
continue
else:
s=1
while 1:
text_list[-c] = abc[(konum+s) if (konum+s)<len(abc) else 0]
if text_list.count(abc[(konum+s) if (konum+s)<len(abc) else 0])+1<tekrar:
break
s+=1
text_list[-c] = abc[(konum+s) if (konum+s)<len(abc) else 0]
return "".join(text_list)
if __name__ == "__main__":
kod="FFHGHGA"
while 1:
kod=arttir(kod)
time.sleep(0.5)
print(kod)
Kod da değişiklik yaptım biraz, tekrar sayısını düşürtmeye çalıştım, yani gelen string içerisinde 3 tane aynı harf olmayacak. Düzenlemeye çalıştığım hali böyle, şimdilik işe yarıyor.
Bir de yan_yana harf olmayacak şekilde düzenlemeye çalışacağım.
Senin kod ile ilgili bir sorum olacak; while döngüsünün altındaki ilk if bloğunun görevi tam olarak nedir?
Teşekkürler.
Şimdi fonksiyona iletilen textin son harfinden başlayarak harfleri alfabetik sıraya göre bir bir arttırıyoruz. Bir de tabi bu alfabetik sıraya büyük harfler de dahil. Bu durumda son harfimiz "Z" oluyor ve textin bütün harfleri "ZZZZ" gibi son harflere geldiğinde kodun geri dönmesi için öyle bir koşul yapmaya çalıştım.
filter() fonksiyonu listedeki tüm elemanları alfabemizdeki son har olan "Z" ile eşleşme yapıyor, eğer eşit değilse filter() 'dan dönen listeye ekleniyor. Sonuç olarak koşuldaki liste dolu ise devam ediyor boş ise bu tüm harflerin "ZZZ" falan olduğu anlamına geldiği için geri gönderiyor.
Bir de kodu da çok detaylı deneme vaktim olmadı belki gözden kaçırdığım bir detay da olabilir. Zaten gerisini sen halledersin Bu şekilde algoritma kurmaya çalışmak ve çalıştıkça ihtiyacın olan metodları kullanmak geliştirmede çok faydalı oluyor. Yani güzel bir soruydu.
Kıdemli Üye
Üyelik Tarihi: 03-06-2016
Yorum Sayısı: 232
Konu Sayısı: 6
Rep Puanı:
6
03-11-2020, Saat: 18:44
(Son Düzenleme: 03-11-2020, Saat: 18:44, Düzenleyen: ahgonlum.)
kelime="ABCD"
def kelimeArtir(kelime,sira=len(kelime)-1):
x=str(chr(ord(kelime[sira]) + 1))
y=list(kelime)
y[sira]=x
return "".join(y)
print(kelimeArtir(kelime))
kelimeleri ascii koduna çevirip yaparsan daha kolay ve kısa olur.
python ve javascript dünyada en çok yazılan iki dil.
c kadar hızlı python kadar syntaxı kolay olan julia da geleceğin dilleri arasında..
04-11-2020, Saat: 16:50
(Son Düzenleme: 04-11-2020, Saat: 16:51, Düzenleyen: gecemor.)
(03-11-2020, Saat: 18:44)ahgonlum Nickli Kullanıcıdan Alıntı:
kelime="ABCD"
def kelimeArtir(kelime,sira=len(kelime)-1):
x=str(chr(ord(kelime[sira]) + 1))
y=list(kelime)
y[sira]=x
return "".join(y)
print(kelimeArtir(kelime))
kelimeleri ascii koduna çevirip yaparsan daha kolay ve kısa olur.
Evet güzel fikir, fakat büyük ve küçük harflerin birleşimi olan string.ascii_letters gibi bir dize kullanılırsa arada boşluklar oluyor
O yüzden string.ascii_uppercase veya string.ascii_lowercase kullanmak gerek.
Vip üye
Üyelik Tarihi: 24-01-2017
Yorum Sayısı: 690
Konu Sayısı: 23
Rep Puanı:
11
06-11-2020, Saat: 15:39
(Son Düzenleme: 06-11-2020, Saat: 15:45, Düzenleyen: oktay811.)
(03-11-2020, Saat: 15:36)gecemo Nickli Kullanıcıdan Alıntı: Şimdi fonksiyona iletilen textin son harfinden başlayarak harfleri alfabetik sıraya göre bir bir arttırıyoruz. Bir de tabi bu alfabetik sıraya büyük harfler de dahil. Bu durumda son harfimiz "Z" oluyor ve textin bütün harfleri "ZZZZ" gibi son harflere geldiğinde kodun geri dönmesi için öyle bir koşul yapmaya çalıştım.
filter() fonksiyonu listedeki tüm elemanları alfabemizdeki son har olan "Z" ile eşleşme yapıyor, eğer eşit değilse filter() 'dan dönen listeye ekleniyor. Sonuç olarak koşuldaki liste dolu ise devam ediyor boş ise bu tüm harflerin "ZZZ" falan olduğu anlamına geldiği için geri gönderiyor.
Bir de kodu da çok detaylı deneme vaktim olmadı belki gözden kaçırdığım bir detay da olabilir. Zaten gerisini sen halledersin Bu şekilde algoritma kurmaya çalışmak ve çalıştıkça ihtiyacın olan metodları kullanmak geliştirmede çok faydalı oluyor. Yani güzel bir soruydu.
Valla son hali güzel çalışıyor, ama son iki hane için çalışıyor, sondan 3. basamak değiştirmeye gelince fonksiyon takılıyor. Beynim yandı, 2-3 gündür uğraşıyorum... Basit gibi gözüküyor ama çok karmaşık. İçinden çıkamadım
Bu yapmaya çalıştığım fonksiyon aslında çok kullanışlı olur. Şifre tahmin etme, kod denemeleri gibi işlemlerde kullanılabilir. Şu anda bruteforce ataklarında kullanılan sistemlerin çoğu bu şekilde kombinasyonları deniyor. Ama kombinasyonlarda harflerin yan yana gelme ve tekrar etme ihtimalleri var. Ama benim yapmaya çalıştığım, tekrar ve yan yana olmadan kod üretmek.
(06-11-2020, Saat: 15:39)oktay811 Nickli Kullanıcıdan Alıntı: (03-11-2020, Saat: 15:36)gecemo Nickli Kullanıcıdan Alıntı: Şimdi fonksiyona iletilen textin son harfinden başlayarak harfleri alfabetik sıraya göre bir bir arttırıyoruz. Bir de tabi bu alfabetik sıraya büyük harfler de dahil. Bu durumda son harfimiz "Z" oluyor ve textin bütün harfleri "ZZZZ" gibi son harflere geldiğinde kodun geri dönmesi için öyle bir koşul yapmaya çalıştım.
filter() fonksiyonu listedeki tüm elemanları alfabemizdeki son har olan "Z" ile eşleşme yapıyor, eğer eşit değilse filter() 'dan dönen listeye ekleniyor. Sonuç olarak koşuldaki liste dolu ise devam ediyor boş ise bu tüm harflerin "ZZZ" falan olduğu anlamına geldiği için geri gönderiyor.
Bir de kodu da çok detaylı deneme vaktim olmadı belki gözden kaçırdığım bir detay da olabilir. Zaten gerisini sen halledersin Bu şekilde algoritma kurmaya çalışmak ve çalıştıkça ihtiyacın olan metodları kullanmak geliştirmede çok faydalı oluyor. Yani güzel bir soruydu.
Valla son hali güzel çalışıyor, ama son iki hane için çalışıyor, sondan 3. basamak değiştirmeye gelince fonksiyon takılıyor. Beynim yandı, 2-3 gündür uğraşıyorum... Basit gibi gözüküyor ama çok karmaşık. İçinden çıkamadım
Bu yapmaya çalıştığım fonksiyon aslında çok kullanışlı olur. Şifre tahmin etme, kod denemeleri gibi işlemlerde kullanılabilir. Şu anda bruteforce ataklarında kullanılan sistemlerin çoğu bu şekilde kombinasyonları deniyor. Ama kombinasyonlarda harflerin yan yana gelme ve tekrar etme ihtimalleri var. Ama benim yapmaya çalıştığım, tekrar ve yan yana olmadan kod üretmek.
Neden yan yana gelmesin ki? Mantıken rakam arttırırken yan yana geliyorsa harflerde de aynı şekilde olabilir. Ama illa da gelmesin diyosan da kontrol etmesi o kadar zor olmasa gerek, listenin bir inceki elemanını ve bir sonraki elemanını kontrol edeceksin ne de olsa
Kelimenin içinde aynı harften 2 tane gelmesin istiyosan da liste.count(eleman) şeklinde listede kaç tane olduğunu öğrenebilirsin.
|