Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Python ile harf çeviren fonksiyon.
#1
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 Smile  sonunu getiremiyorum.
Ara
Cevapla
#2
Ö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 Smile

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"))
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#3
gecemor;

Teşekkürler abi, sen de olmazsan halimiz yaman olurdu python da Smile



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. Smile

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.
Ara
Cevapla
#4
(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 Smile



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. Smile

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 Smile 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.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#5

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..
Ara
Cevapla
#6
(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.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#7
(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 Smile 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 Big Grin

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.
Ara
Cevapla
#8
(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 Smile 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 Big Grin

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 Smile

Kelimenin içinde aynı harften 2 tane gelmesin istiyosan da liste.count(eleman) şeklinde listede kaç tane olduğunu öğrenebilirsin.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  15gb .myd uzantılı dosya python ile okutma perry 1 1,196 27-11-2022, Saat: 17:59
Son Yorum: perry
Question Python Dili Soru & Cevap gecemor 1,493 1,075,068 08-11-2022, Saat: 11:18
Son Yorum: Antonyobanderas
  GÜNCEL Python request , c# request e göre çok yavaş ne yapabilirim perry 12 3,088 28-09-2022, Saat: 20:27
Son Yorum: krast
  YENİ Python Pyqt5 memory leak sorunu perry 3 1,378 28-09-2022, Saat: 11:33
Son Yorum: gecemor
  YENİ PYTHON ads approval CaglarDevv 2 1,509 04-07-2022, Saat: 01:23
Son Yorum: CaglarDevv

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme