Komut istemi renklendirme

Selamlar,

Komut istemini renklendirmek için şu şekilde bir sınıf buldum.

class color:
   PURPLE = '\033[95m'
   CYAN = '\033[96m'
   DARKCYAN = '\033[36m'
   BLUE = '\033[94m'
   GREEN = '\033[92m'
   YELLOW = '\033[93m'
   RED = '\033[91m'
   BOLD = '\033[1m'
   UNDERLINE = '\033[4m'
   END = '\033[0m'

Bunu tek başına kullandığınızda

print(color.GREEN , "YAZI" , color.END)

YAZI yı yeşil yapıyor. Ben bunu bir adım daha iler götüreyim şarta göre renklendirme yapayım dedim ve şu şekilde bir fonksiyon yazdım.

def renk(deger):
    if deger > 0:
        a = color.GREEN , deger , color.END
    elif deger < 0:
        a = color.RED , deger , color.END
    else:
        a = deger
    return a

rakam=45
print(renk(rakam))

Bunu yeşil yazmasın gerekirken
'\x1b[92m', 45, '\x1b[0m'
şeklinde sonuç geliyor.
Bunu nasıl çözebiliriz?

Değilse a ya değeri ata demişsiniz. Değilmiş, oda bunu döndürmüş.

Şu kütüphaneye göz atarsanız daha rahat çalışabilirsiniz

1 Beğeni

Okuduğunu mu anlamıyorsun? Anladığını mı anlatamıyorsun? Bunları kasıtlı mı yapıyorsun, provatör müsün ya da bir iktidar problemin mi var? Durumunu çözemedim. Şimdiye kadar ki vermiş olduğun cevaplardan da aslında ne olduğun anlaşılıyor. Bak sana küçük bir tavsiye, bir İngliz atasözü der ki “Eğer söyleyebilecek daha iyi bir sözün yoksa söyleme”. Ben bunu bir adım daha ileriye atayım. Benim açmış olduğum hiç bir başlığa cevap verme ve hatta okuma! Benim ukalalığa değil eğer varsa bilgiye ihtiyacım var. Bir cevap yoksa da yoktur, bu benim hayatımı ne uzatır ne kısaltır ne de herhangi bir eksisi olur.

Yaptığın ukalalığa da cevap vereyim de altı boş kalmasın, çünkü sen ve senin gibiler susmanın, cevap vermemenin adam yerine koymama olduğunu anlamıyor da kendini bak “ben koydum gol oldu” diye düşünmesine neden oluyor.

45 (yazıyla kırk beş) rakamı, 0 (yazıyla sıfır) rakamından büyüktür. Zaten fonksiyon da doğru çalışıyor ve ‘\x1b[92m’, 45, ‘\x1b[0m’ şeklinde sonuç veriyor. Tekrar edeyim mi? Belki kıt matematiğin yetmemiştir anlamaya. KIRKBEŞ SIFIRDAN BÜYÜKTÜR!

Bu kısmı geçtim, her zaman duyuyoruz, normal.

İstediğin kadar cevap verebilirsin, sorun değil.

Asıl bu kısım benim ilgi alanım. Anlamamışsın dediğimi, ne döndürürsen döndür ekrana yazdır diye gönderiyorsun o da yazdırıyoru. Konsolda komut çalıştırmak ile konsola yazdırmak faklı şeylerdir.

Aslında kodu düzeltip ekleyecektim, gururlu adamsın istemezsin diye eklemiyorum.

Linki koymayı unutmuşum, colorama kütüphanesini kullanırsan daha iyi olur diye tavsiyede bulunmuştum gerek yok onu da google lar bulursun.

Hakaret etmediğin sürece akşama kadar yazarız sorun değil.

1 Beğeni

Susman ya da daha doğrusu yazmaman için ne yapmak gerekiyor?

Çünkü sonucu tuple olan fonksiyonun değerini yazdırıyorsunuz. Şu şekilde yazdırmayı deneyin:

print("".join(renk(rakam)))
1 Beğeni
import os
os.system("")  # enables ansi escape characters in terminal

COLOR = {
    "HEADER": "\033[95m",
    "BLUE": "\033[94m",
    "GREEN": "\033[92m",
    "RED": "\033[91m",
    "ENDC": "\033[0m",
}

print(COLOR["RED"], "Testing Green!!", COLOR["ENDC"])

Komut göndermekle string göndermek arasındaki farkı anladığın zaman.

5 Beğeni

Senin anlamadığın da okumayı bilmemen, bir şey biliyor olduğunu sanman ve aslında hiç bir b*k bilmemen.

print(color.GREEN , "YAZI" , color.END)

bununla

print(COLOR["RED"], "Testing Green!!", COLOR["ENDC"])

bu yazdığının ne farkı var. ben bunu mu diyorum!

Sana yazma demiyor muyum? sen zaten hiç bir şeyden anlamıyorsun, okuduğunu dahi anlamıyorsun. bak yazma diyorum yazıyorsun, senin yazdığını zaten ben yazmışım bu zetn oluyor dert başka diye okumayı bilmediğin okuduğunu anlamadığın için yine anlamıyorsun. Tekrar ediyorum YAZMA. Yazmaman için koşul komut göndermekle string göndermek arasındaki farkı anladığın zamansa anladım tamam sen süpersin zeka küpüsün efsanesin.

Doğru anlamıyorum, bunu geç.

İkisi arasında fark var demedin, buradaki komut dizilimi ile senin kinin ne alakası var dedim.

Söyledim ya, komut göndermekle string göndermek arasındaki farkı anlayana kadar susmam diye.

Tamam senin seviyene göre anlatayım.

Şimdi sen a gibi değişkene 45 gibi bir tam sayı atıyorsun, sonra yanına kaçış karakterlerini diziyorsun, yanına da virgül koyuyorsun.

Bu durumda soru şu a nın değeri nedir? tam sayı mı string mi? virgüller ne yapıyor?

Baştan beri anlatmaya çalışıyorum ama yok maalesef böyle yardım alamazsın zaten öğrenemezsin de.

Biraz kodu senin seviyene göre indirgedim.

Anca anlarsın sanırım.

import os
os.system("")

class color:
   PURPLE = '\033[95m'
   CYAN = '\033[96m'
   DARKCYAN = '\033[36m'
   BLUE = '\033[94m'
   GREEN = '\033[92m'
   YELLOW = '\033[93m'
   RED = '\033[91m'
   BOLD = '\033[1m'
   UNDERLINE = '\033[4m'
   END = '\033[0m'


def renk(deger):
    if deger > 0:
        a,b,c = color.RED,deger,color.END
    elif deger < 0:
        a = color.RED , deger , color.END
    else:
        a = deger
    return a,b,c

rakam=45
a,b,c= renk(rakam)
print(a,b,c)

EDIT:

Dur sen şimdi print i de anlamadığımı düşünürsün.

Ben üç değişken kullanmak istemiyorum print ile dersin.

print("%s%s%s"%(renk(rakam)))

Şimdi anladın mı? Printe parametre diye ne gönderdiğini?

Birine kızmadan önce dinlemeyi öğren.

EDIT 2:

Devam edelim. Buraya kadar üçünü de ayrı ayrı string olarak gönderince yazdırabiliyormuşuz.

Peki nasıl İki string ve bir int değeri birleştirebiliriz.

Üçünün de string olduğuna emin olarak.

a = str(color.RED)+ str(deger)+str(color.END)

Bu durumda kodumuz ne olur?

import os
os.system("")

class color:
   PURPLE = '\033[95m'
   CYAN = '\033[96m'
   DARKCYAN = '\033[36m'
   BLUE = '\033[94m'
   GREEN = '\033[92m'
   YELLOW = '\033[93m'
   RED = '\033[91m'
   BOLD = '\033[1m'
   UNDERLINE = '\033[4m'
   END = '\033[0m'


def renk(deger):
    if deger > 45:
        a = str(color.RED)+ str(deger)+str(color.END)
    elif deger <0:
        a = str(color.YELLOW)+ str(deger)+str(color.END)
    else:
        a = deger
    return a

rakam=45

print(renk(rakam))

Geçelim bu string bilmeme konunu.

Asıl kolay olanı colorama gibi kütüphaneler kullanmaktır.

colorama · PyPI

Kullanım örneği de aşağıda.

Print Colors in Python terminal - GeeksforGeeks

Neden colorama?

Windows için terminalde ansi ayarlarını kendi kontrol eder:

colorama/ansitowin32.py at master · tartley/colorama · GitHub

    ANSI_CSI_RE = re.compile('\001?\033\\[((?:\\d|;)*)([a-zA-Z])\002?')   # Control Sequence Introducer
    ANSI_OSC_RE = re.compile('\001?\033\\]([^\a]*)(\a)\002?')             # Operating System Command

Gibi düzenlemeler yapakar, işletim sistemine uyumlu terminal çıktısı almanı sağlar.

Ha bu kadar yazıyı neden yazdım. Birilerinin belki işine yarar diye. Senin ilginç cümelerini okumaktan daha işlerine yarar belki.

EDIT:

Konuyla alakasız ama, sen bu ingiliz atasözü deyince benim de aklıma, amerikan atasözü sahnesii geldi.

amerikalıların bir lafı vardır bildin mi - YouTube

6 Beğeni