Metni farklı biçime dönüştürmek

Herkese Merhaba,
www.figlet.org sitesindeki yazıtiplerini kullanacak şekilde yeni kod yazdım.
kodları hem aşağıda hem de GitHub adresimde paylaşıyorum.
Kodları, 10 yazıtipi üzerinde denedim ve istediğim sonucu elde ettim. (“standard” isimli yazıtipi dosyasında, bazı satırlara elle müdahale edip silmem gerekti. kullandığım yazıtipi dosyalarını da GitHub adresimde “fonts” klasöründe bulabilirsiniz.)

Acemi bir python kullanıcısı olduğum için, kodlarda geliştirmem/düzeltmem gereken yerler olacağının bilincindeyim.

Kodları denemek, ya da incelemek isteyenler için aşağıya ekliyorum.
İlgili konuya ait GitHub adresi: GitHub - mhalil/dijital_metin: http://www.figlet.org/ adresinde paylaşılan yazıtipi dosyalarını kullanarak benzer çıktılar üreten python kodu.

# Yazıtipi İsimlerini Gösteren Bir Seçim Menüsü oluşturuldu.
print("""
Kullanılabilir Yazıtipleri;
**************************
 1. Banner3          6. Isometric2
 2. Colossal         7. Isometric3
 3. Doh              8. Isometric4
 4. Epic             9. Standard
 5. Isometric1      10. Univers

 Q. ÇIKIŞ
""")

def ky():                                           # Yazıtipini oluşturan karakterlerin yuksekligi (her karakterin kaç satırdan oluştuğunu) hesaplayan fonksiyon.
    yukseklik = 0                                   # Karakter Yüksekliği (satır sayısı) 
          
    with open (yazitipi_yolu , "r", encoding="utf-8") as dosya:
        liste = dosya.readlines()                   # Yazıtipi dosyasını oku, Listele.
        
        for oge in liste:                           # harf yüksekliği hesaplanıyor.
            if (oge[-3:] == "@@\n"):                # ekseriyetle satır sonları @ ile, karakter sonları (sınırları) @@ ile bitiriliyor. Zaman zaman @ yerine # kullanıldığı da oluyor.
                break                               # harf yüksekliğinin sınırı ile karşılaşınca işlemi durdur.

            elif ((oge[-2:] == "@\n") or (oge[-3:] == "$@\n") or (oge == "\x7f\x7f\x7f\x7f\x7f@\n")):       # satırın tamamına, son 2 ve 3 karakterilerine bakarak karakter yüksekliği sonlanmış mı? kontrol et.
                yukseklik += 1                      # karakter yüksekliği sonlanmamışsa (sınırlanmamışsa) yükseklik değerini bir artır.
                 
    return (yukseklik+1)                            # Yazıtipinin karakter yüksekliğini fonksiyona değer olarak ata.

def listele():                                      # Belirtilen yazitipi dosyasındaki "@\n" ve "@@\n" karakterlerini silerek liste oluştur.
    alfabe_kodlari = list()

    with open (yazitipi_yolu , "r", encoding="utf-8") as dosya:
        liste = dosya.readlines()
        for i in liste:
            if (i[-2:] != "@\n"):
                if ( (i[-2:] == "#\n") and (i[-3:] != "##\n")):     # sonu @ ile bitmeyen karakterlerde ekseriyetle @ yerine # kullanılıyor. "doh" yazitipinde @ işareti, aynı karakterden oluşturulduğu için bitiş parametresi # ile belirtilmiş.
                    alfabe_kodlari.append(i[:-2])

                elif (i[-3:] == "##\n"):
                    alfabe_kodlari.append(i[:-3])

            else:
                if ( (i[-2:] == "@\n") and (i[-3:] != "@@\n")):     
                    alfabe_kodlari.append(i[:-2])
                
                elif (i[-3:] == "@@\n"):
                    alfabe_kodlari.append(i[:-3])
                  
    return alfabe_kodlari                           # Alfabeyi oluşturan kodlara ait listeyi, fonksiyona değer olarak ata.

def alfabe_sozluk():
    karakterler = """ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÖÜâöüβ""" # Yazıtipi dosyalarında bulunan sıralı karakter bilgisi.
    karakterler_standard = """ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÂÖÜâöüβ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſˇ˘˙˛˝""" # "STANDARD" isimli Yazıtipi dosyasında bulunan sıralı karakter bilgisi.
    
    krt_yuk = ky()                                  # Karakter YÜksekliği değerini ky() fonksiyonun çalıştırarak hesapla ve krt_yuk değişkenine ata.
    alfabe_kod = listele()                          # Alfabeye ait kodları listele() fonksiyonun çalıştırarak hesapla ve alfabe_kod değişkenine ata.
    alfabe_key = list()                             # alfabe_key isimi boş bir liste oluştur.
    alfabe = dict()                                 # alfabe isimi boş bir sözlük yapısı oluştur.
    
    if secim == "9":
        for k in karakterler_standard:              # Karakterlere sayı numarası eklenip alfabe_key listesine kaydeden döngü yapısı.
            for l in range(1,krt_yuk+1):            # Sayılar 1'den başlayarak karakter (satır) yüksekliğine kadar devam edecek.
                alfabe_key.append(k+str(l))         # listeye ekle. Ör: A1, A2, A3, ..., z1, z2, z3...vb
    else:        
        for k in karakterler:                       # Karakterlere sayı numarası eklenip alfabe_key listesine kaydeden döngü yapısı.
            for l in range(1,krt_yuk+1):            # Sayılar 1'den başlayarak karakter (satır) yüksekliğine kadar devam edecek.
                alfabe_key.append(k+str(l))         # listeye ekle. Ör: A1, A2, A3, ..., z1, z2, z3...vb

    for i in range(len(alfabe_kod)):                # alfabe_kod listesindeki öğeleri, alfabe_key listesindek öğelerle sırasına uygun olarak eşleştirip alfabe isimli sözlüğe ekleyen döngü yapısı. Ör: {'a1' : '## # #' }
        alfabe[alfabe_key[i]] = alfabe_kod[i]

    return alfabe                                   # Oluşturulan alfabe isimli sözlüğü fonksiyona değer olarak ata.

def sonuc():                                        # Kullanıcıdan Yazitipi menüsünden seçim yapmasını ve bir metin yazmasını isteyen; Yazılan metni, seçilen yazıtipi kodlarına çevirerek ekrana yazdıran fonksiyon.

    yuk = ky()                                  # ky() fonksiyonunu çalıştırarak, karakter (satır) yüksekliğini hesaplaya ve yuk isimli değişkene ata.
    sozluk = alfabe_sozluk()                    # alfabe_sozluk() fonksiyonunu çalıştır ve sozluk isimli değişkene ata.                                       
    girdi = input("Metni yazın: ")              # Kullanıcıdan bir metin girmesini iste.
    sonuc = ""                                  # sonuc isimli boş bir string oluştur.
    
    if secim != "9":                            # "standard" isimli yazıtiplerinde daha az sayıda karakter var, eğer o yazıtipleri seçilirse Türkçe karakterler yerine diğer karakterleri kullan.
        turkce_karakterler = {"ç" : "c", "Ç" : "C", "ğ" : "g", "Ğ" : "G", "ı" : "i", "İ" : "I", "ş" : "s", "Ş" : "S"}       # hangi harfe yerine hangi hrf kullanılacak, onu belirle.

        for i in range(1, yuk+1):               # Kullanıcının yazdığı metni sozluk yapısından sorgulayarak her karaktere karşılık gelen kodları sonuc isimli stringe ekleyen döngü yapısı.
            for harf in girdi:
                if harf in turkce_karakterler.keys():   # Girdi içerisinde Türkçe karakter varsa, kod hata vermesin alfabede ona yakın karakteri kullansın. Ör: ş yerine s, Ğ yerine G, ...vb
                    harf = turkce_karakterler[harf]
                sonuc += sozluk[harf + str(i)] + "   "
            sonuc += "\n"
    
    else:                                       # "standart" isimli yazıtipi içerisinden 331 karakter var. Bu durumda, girdide yazılan kelimeleri olduğu gibi (karakterleri değiştirmeden) kullan.
        for i in range(1, yuk+1):               # Kullanıcının yazdığı metni sozluk yapısından sorgulayarak her karaktere karşılık gelen kodları sonuc isimli stringe ekleyen döngü yapısı.
            for harf in girdi:
                sonuc += sozluk[harf + str(i)] + "   "
            sonuc += "\n"

    print(sonuc.replace("$", " "))              # sonuc isimli stringdeki (karakter sonlarındaki) $ karakterini silerek sonucu ekrna yazdır.


# print(yazitipi_sec.keys())

while True:

    secim = input("Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: ") # Kullanıcıdan Menü seçeneklerinden birini seçmesi isteniyor.
    yazitipi_sec = {"1" : "banner3", "2" : "colossal" , "3" : "doh" ,"4" : "epic" , "5" : "isometric1", "6" : "isometric2", "7" : "isometric3" , "8" : "isometric4" , "9" : "standard", "10" : "univers"}                       # Seçime karşılık gelen yazıtipini sözlük ile belirle.
    
    if secim == "Q" or secim == "q":
        print(".:: PROGRAM SONLANDI ! ::.")
        break

    elif secim not in yazitipi_sec.keys():
        print("Geçerli bir seçim yapmalısınız!")
    
    else:

        yazitipi = yazitipi_sec[secim]                      # Seçilen yazıtipinin adı.
        yazitipi_yolu = "fonts/" + yazitipi + ".flf"        # Yazıtipinin tam yolu.
        
        sonuc()                                             # sonuc() fonksiyonunu çalıştır.
ÖRNEK ÇIKTILAR:

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 1
Metni yazın: YazBel
##    ##       ###       ########    ########     ########    ##          
 ##  ##       ## ##           ##     ##     ##    ##          ##          
  ####       ##   ##         ##      ##     ##    ##          ##          
   ##       ##     ##       ##       ########     ######      ##          
   ##       #########      ##        ##     ##    ##          ##          
   ##       ##     ##     ##         ##     ##    ##          ##          
   ##       ##     ##    ########    ########     ########    ########    

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 2
Metni yazın: YazBel
Y88b   d88P                            888888b.                  888    
 Y88b d88P                             888  "88b                 888    
  Y88o88P                              888  .88P                 888    
   Y888P        8888b.     88888888    8888888K.      .d88b.     888    
    888            "88b       d88P     888  "Y88b    d8P  Y8b    888    
    888        .d888888      d88P      888    888    88888888    888    
    888        888  888     d88P       888   d88P    Y8b.        888    
    888        "Y888888    88888888    8888888P"      "Y8888     888    
                                                                        
                                                                      
Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 3
Metni yazın: YazBel
                                                                                                                          
                                                                                                                          
YYYYYYY       YYYYYYY                                            BBBBBBBBBBBBBBBBB                             lllllll    
Y:::::Y       Y:::::Y                                            B::::::::::::::::B                            l:::::l    
Y:::::Y       Y:::::Y                                            B::::::BBBBBB:::::B                           l:::::l    
Y::::::Y     Y::::::Y                                            BB:::::B     B:::::B                          l:::::l    
YYY:::::Y   Y:::::YYY     aaaaaaaaaaaaa      zzzzzzzzzzzzzzzzz     B::::B     B:::::B       eeeeeeeeeeee        l::::l    
   Y:::::Y Y:::::Y        a::::::::::::a     z:::::::::::::::z     B::::B     B:::::B     ee::::::::::::ee      l::::l    
    Y:::::Y:::::Y         aaaaaaaaa:::::a    z::::::::::::::z      B::::BBBBBB:::::B     e::::::eeeee:::::ee    l::::l    
     Y:::::::::Y                   a::::a    zzzzzzzz::::::z       B:::::::::::::BB     e::::::e     e:::::e    l::::l    
      Y:::::::Y             aaaaaaa:::::a          z::::::z        B::::BBBBBB:::::B    e:::::::eeeee::::::e    l::::l    
       Y:::::Y            aa::::::::::::a         z::::::z         B::::B     B:::::B   e:::::::::::::::::e     l::::l    
       Y:::::Y           a::::aaaa::::::a        z::::::z          B::::B     B:::::B   e::::::eeeeeeeeeee      l::::l    
       Y:::::Y          a::::a    a:::::a       z::::::z           B::::B     B:::::B   e:::::::e               l::::l    
       Y:::::Y          a::::a    a:::::a      z::::::zzzzzzzz   BB:::::BBBBBB::::::B   e::::::::e             l::::::l   
    YYYY:::::YYYY       a:::::aaaa::::::a     z::::::::::::::z   B:::::::::::::::::B     e::::::::eeeeeeee     l::::::l   
    Y:::::::::::Y        a::::::::::aa:::a   z:::::::::::::::z   B::::::::::::::::B       ee:::::::::::::e     l::::::l   
    YYYYYYYYYYYYY         aaaaaaaaaa  aaaa   zzzzzzzzzzzzzzzzz   BBBBBBBBBBBBBBBBB          eeeeeeeeeeeeee     llllllll   
                                                                                                                          

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 4
Metni yazın: YazBel
             _______     _______     ______      _______     _          
|\     /|   (  ___  )   / ___   )   (  ___ \    (  ____ \   ( \         
( \   / )   | (   ) |   \/   )  |   | (   ) )   | (    \/   | (         
 \ (_) /    | (___) |       /   )   | (__/ /    | (__       | |         
  \   /     |  ___  |      /   /    |  __ (     |  __)      | |         
   ) (      | (   ) |     /   /     | (  \ \    | (         | |         
   | |      | )   ( |    /   (_/\   | )___) )   | (____/\   | (____/\   
   \_/      |/     \|   (_______/   |/ \___/    (_______/   (_______/   
                                                                        

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 5
Metni yazın: YazBel
      ___              ___              ___              ___              ___              ___    
     |\__\            /\  \            /\  \            /\  \            /\  \            /\__\   
     |:|  |          /::\  \           \:\  \          /::\  \          /::\  \          /:/  /   
     |:|  |         /:/\:\  \           \:\  \        /:/\:\  \        /:/\:\  \        /:/  /    
     |:|__|__      /::\~\:\  \           \:\  \      /::\~\:\__\      /::\~\:\  \      /:/  /     
     /::::\__\    /:/\:\ \:\__\    _______\:\__\    /:/\:\ \:|__|    /:/\:\ \:\__\    /:/__/      
    /:/~~/~       \/__\:\/:/  /    \::::::::/__/    \:\~\:\/:/  /    \:\~\:\ \/__/    \:\  \      
   /:/  /              \::/  /      \:\~~\~~         \:\ \::/  /      \:\ \:\__\       \:\  \     
   \/__/               /:/  /        \:\  \           \:\/:/  /        \:\ \/__/        \:\  \    
                      /:/  /          \:\__\           \::/__/          \:\__\           \:\__\   
                      \/__/            \/__/            ~~               \/__/            \/__/   

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 6
Metni yazın: YazBel
                     ___              ___                               ___                         
                    /\  \            /\__\            _____            /\__\                        
      ___          /::\  \          /::|  |          /::\  \          /:/ _/_                       
     /|  |        /:/\:\  \        /:/:|  |         /:/\:\  \        /:/ /\__\                      
    |:|  |       /:/ /::\  \      /:/|:|  |__      /:/ /::\__\      /:/ /:/ _/_      ___     ___    
    |:|  |      /:/_/:/\:\__\    /:/ |:| /\__\    /:/_/:/\:|__|    /:/_/:/ /\__\    /\  \   /\__\   
  __|:|__|      \:\/:/  \/__/    \/__|:|/:/  /    \:\/:/ /:/  /    \:\/:/ /:/  /    \:\  \ /:/  /   
 /::::\  \       \::/__/             |:/:/  /      \::/_/:/  /      \::/_/:/  /      \:\  /:/  /    
 ~~~~\:\  \       \:\  \             |::/  /        \:\/:/  /        \:\/:/  /        \:\/:/  /     
      \:\__\       \:\__\            |:/  /          \::/  /          \::/  /          \::/  /      
       \/__/        \/__/            |/__/            \/__/            \/__/            \/__/       

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 7
Metni yazın: YazBel
                     ___              ___                               ___                         
      ___           /  /\            /  /\            _____            /  /\                        
     /__/|         /  /::\          /  /::|          /  /::\          /  /:/_                       
    |  |:|        /  /:/\:\        /  /:/:|         /  /:/\:\        /  /:/ /\       ___     ___    
    |  |:|       /  /:/~/::\      /  /:/|:|__      /  /:/~/::\      /  /:/ /:/_     /__/\   /  /\   
  __|__|:|      /__/:/ /:/\:\    /__/:/ |:| /\    /__/:/ /:/\:|    /__/:/ /:/ /\    \  \:\ /  /:/   
 /__/::::\      \  \:\/:/__\/    \__\/  |:|/:/    \  \:\/:/~/:/    \  \:\/:/ /:/     \  \:\  /:/    
    ~\~~\:\      \  \::/             |  |:/:/      \  \::/ /:/      \  \::/ /:/       \  \:\/:/     
      \  \:\      \  \:\             |  |::/        \  \:\/:/        \  \:\/:/         \  \::/      
       \__\/       \  \:\            |  |:/          \  \::/          \  \::/           \__\/       
                    \__\/            |__|/            \__\/            \__\/                        

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 8
Metni yazın: YazBel
                       ___              ___              ___              ___              ___    
      __              /  /\            /__/\            /  /\            /  /\            /  /\   
     |  |\           /  /::\           \  \:\          /  /::\          /  /::\          /  /:/   
     |  |:|         /  /:/\:\           \  \:\        /  /:/\:\        /  /:/\:\        /  /:/    
     |  |:|        /  /::\ \:\           \  \:\      /  /::\ \:\      /  /::\ \:\      /  /:/     
     |__|:|__     /__/:/\:\_\:\     ______\__\:\    /__/:/\:\_\:|    /__/:/\:\ \:\    /__/:/      
     /  /::::\    \__\/  \:\/:/    \  \::::::::/    \  \:\ \:\/:/    \  \:\ \:\_\/    \  \:\      
    /  /:/~~~~         \__\::/      \  \:\~~~~~      \  \:\_\::/      \  \:\ \:\       \  \:\     
   /__/:/              /  /:/        \  \:\           \  \:\/:/        \  \:\_\/        \  \:\    
   \__\/              /__/:/          \  \:\           \__\::/          \  \:\           \  \:\   
                      \__\/            \__\/               ~~            \__\/            \__\/   

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 9
Metni yazın: YazBel
 __   __                         ____                 _    
 \ \ / /      __ _      ____    | __ )       ___     | |   
  \ V /      / _` |    |_  /    |  _ \      / _ \    | |   
   | |      | (_| |     / /     | |_) |    |  __/    | |   
   |_|       \__,_|    /___|    |____/      \___|    |_|   
                                                           

Kullanmak İstediğiniz Yazıtipine Ait Sıra Numarasını Yazın: 10
Metni yazın: YazBel
                                                                                    
8b        d8                                  88888888ba                     88     
 Y8,    ,8P                                   88      "8b                    88     
  Y8,  ,8P                                    88      ,8P                    88     
   "8aa8"        ,adPPYYba,     888888888     88aaaaaa8P'      ,adPPYba,     88     
    `88'         ""     `Y8          a8P"     88""""""8b,     a8P_____88     88     
     88          ,adPPPPP88       ,d8P'       88      `8b     8PP"""""""     88     
     88          88,    ,88     ,d8"          88      a8P     "8b,   ,aa     88     
     88          `"8bbdP"Y8     888888888     88888888P"       `"Ybbd8"'     88

3 Beğeni