print(kelime[0:1], " " * bosluk, kelime[0::-1], sep = "")
Şimdi ikinci satırı yazdıralım. Bu satırda kelimenin ilk iki harfi yazdırılmaktadır. Boşluk sayısını bulmak için sütun sayısından harf sayıları toplamını çıkarıyoruz.
harf = len(kelime[0:2]) * 2
bosluk = sutun - harf
print(kelime[0:2], " " * bosluk, kelime[1::-1], sep = "")
Sıra geldi üçüncü satıra.
harf = len(kelime[0:3]) * 2
bosluk = sutun - harf
print(kelime[0:3], " " * bosluk, kelime[2::-1], sep = "")
Vakit kaybetmeden dördüncü satırımızı yapalım.
harf = len(kelime[0:4]) * 2
bosluk = sutun - harf
print(kelime[0:4], " " * bosluk, kelime[3::-1], sep = "")
Artık kelebek deseninin üst tarafını bitirebiliriz. Bu arada değişen değerlere dikkat ediniz.
harf = len(kelime[0:5]) * 2 - 1
bosluk = sutun - harf
print(kelime[0:5], " " * bosluk, kelime[3::-1], sep="")
Şimdi kelebek deseninin alt tarafını yapalım. Altıncı satırı yapmaya çalışalım.
harf = len(kelime[0:4]) * 2
bosluk = sutun - harf
print(kelime[0:4], " " * bosluk, kelime[3::-1], sep="")
Yedinci satırı yapalım.
harf = len(kelime[0:3]) * 2
bosluk = sutun - harf
print(kelime[0:3], " " * bosluk, kelime[2::-1], sep="")
Sekizinci satırı yapalım.
harf = len(kelime[0:2]) * 2
bosluk = sutun - harf
print(kelime[0:2], " " * bosluk, kelime[1::-1], sep="")
Nihayet son satıra geldik. Bunu da kodlayalım.
harf = len(kelime[0:1]) * 2
bosluk = sutun - harf
print(kelime[0:1], " " * bosluk, kelime[0::-1], sep="")
Projeyi kaydedip çalıştıralım. Kelime olarak İSLAM girelim. Ekranda kelebek desenini görürsünüz. Uygulamayı incelediğinizde şu sonuçlara ulaşırsınız.
Programda sürekli tekrar eden satırlar var. Bunları nasıl azaltabiliriz.
Program sadece İSLAM kelimesinde doğru sonuç vermektedir. Başka bir kelime yazıldığında doğru sonuç nasıl oluşturulabilir.
Program kullanıcı H harfine basıncaya kadar nasıl devam edebilir.
Kullanıcı kelime girmediğinde hata mesajı nasıl oluşturulabilir.
Hadi şimdi bunları yapmaya çalışalım.
1. Kelebek desenine bakıldığında üst bölüm ve alt bölüm olarak iki bölümden oluştuğunu görürsünüz. Üst bölümde harf sayısının arttığını, alt bölümde ise harf sayısının azaldığını görürsünüz. Öncelikle üst bölümü yapalım.
Burada harf sayısını belirlemek için i değişkenini kullanalım. for döngüsünde i değişkeni 0 ile kelimenin içindeki harf sayısı arasında değişir. Örneğimiz İSLAM kelimesini dikkate alırsak, i değişkeni, 0 ile 4 arasında değer alır. Bu döngüyü kullanarak işlemi yapalım. Öncekile harf sayısını bulalım.
for i in range(len(kelime)):
harf = len(kelime[0 : i + 1]) * 2
print(harf)
Şimdi harf sayısına göre boşluk sayısını bulalım.
for i in range(len(kelime)):
harf = len(kelime[0 : i + 1]) * 2
bosluk = sutun - harf
print(bosluk)
Projeyi çalıştırdığınızda son değerin -1 olduğunu görürsünüz. Kelimenin tamamı yazılırken buna dikkat ederek kod yazacağız. Şimdi de kelebek desenine ait üst kısmı yapalımı.
for i in range(len(kelime)):
harf = len(kelime[0 : i + 1]) * 2
bosluk = sutun - harf
print(kelime[0:i + 1], " " * bosluk, kelime[i::-1], sep="")
Projeyi çalıştırdığımızda son satırın deseni bozduğunu görürsünüz. Şimdi bu hatayı düzeltelim.
for i in range(len(kelime)):
harf = len(kelime[0 : i + 1]) * 2
bosluk = sutun - harf
if bosluk < 0:
bosluk = 0
print(kelime[0 : i + 1], " " * bosluk, kelime[i - 1 :: -1],
sep="")
else:
print(kelime[0 : i + 1], " " * bosluk, kelime[i::-1], sep="")
Projeyi çalıştıralım. İSLAM kelimesini girelim. Kelebek deseninin üst tarafının hatasız bir şekilde yapıldığını görürsünüz. Şimdi kelebek deseninin alt tarafını yapalım. Öncelikle harf sayısını bulalım.
for i in range(len(kelime),0,-1):
harf = len(kelime[0:i - 1]) * 2
print(harf)
Şimdi boşluk sayısını bulalım.
for i in range(len(kelime),0,-1):
harf = len(kelime[0:i - 1]) * 2
bosluk = sutun - harf
print(bosluk)
Alt tarafa ait kelebek desenini yapalım.
for i in range(len(kelime), 0, -1):
harf = len(kelime[0 : i - 1]) * 2
bosluk = sutun - harf
print(kelime[0 : i - 1], " " * bosluk, kelime[i - 2 :: -1],
sep="")
Projeyi kaydedip çalıştıralım. Kelebek deseninin alt tarafının hatalı olduğunu görürsünüz. Şimdi bu hatayı düzeltelim.
for i in range(len(kelime), 0, -1):
harf = len(kelime[0 : i - 1]) * 2
if harf > 0:
bosluk = sutun - harf
print(kelime[0 : i - 1], " " * bosluk, kelime[i - 2 :: -1],
sep="")
Projeyi kaydedip çalıştıralım. Kelebek deseninin hatasız bir şekilde yapıldığını görürsünüz. Bu arada başka bir kelime yazdığınızda da desenin yapıldığına dikkat ediniz.
Şimdi kelebek desenini desen isimli bir fonksiyon aracılığıyla yapalım. Tanımladığımız desen fonksiyonu aşağıdaki gibi olacaktır.
def desen(kelime: str):
sutun = len(kelime) * 2 - 1
for i in range(len(kelime)):
harf = len(kelime[0 : i + 1]) * 2
bosluk = sutun - harf
if bosluk < 0:
bosluk = 0
print(kelime[0 : i + 1], " " * bosluk, kelime[i - 1 :: -1],
sep="")
else:
print(kelime[0 : i + 1], " " * bosluk, kelime[i::-1], sep="")
for i in range(len(kelime), 0, -1):
harf = len(kelime[0 : i - 1]) * 2
if harf > 0:
bosluk = sutun - harf
print(kelime[0 : i - 1], " " * bosluk, kelime[i - 2 :: -1],
sep="")
Bu fonksiyonu çağıran ana kodlarımızı aşağıdaki gibi düzenleyelim.
while True:
kelime = input("Kelimeyi giriniz : ")
if kelime != "":
if kelime.upper() == "H":
break
desen(kelime.upper())
else:
print("Lütfen bir kelime giriniz...")
Projeyi kaydedip çalıştıralım. Kullanıcı "H" tuşuna basıncaya kadar girilen bir kelimeyi kelebek deseninde ekranda görürsünüz. Şimdi oluşturulan kelebek desenini harici bir dosyaya atalım. Ben Kelebek isminde bir class dosyası oluşturuyorum. Bu dosyanın içeriği aşağıdaki gibi olacaktır.
class Desen:
sutun: int = 0
bosluk: int = 0
harf: int = 0
def __init__(self, kelime: str):
self.kelime = kelime
def desen(self):
sutun = len(self.kelime) * 2 - 1
for i in range(len(self.kelime)):
harf = len(self.kelime[0 : i + 1]) * 2
bosluk = sutun - harf
if bosluk < 0:
bosluk = 0
print(
self.kelime[0 : i + 1],
" " * bosluk,
self.kelime[i - 1 :: -1],
sep="",
)
else:
print(self.kelime[0 : i + 1], " " * bosluk,
self.kelime[i::-1], sep="")
for i in range(len(self.kelime), 0, -1):
harf = len(self.kelime[0 : i - 1]) * 2
if harf > 0:
bosluk = sutun - harf
print(
self.kelime[0 : i - 1],
" " * bosluk,
self.kelime[i - 2 :: -1],
sep="",
)
Şimdi bu class dosyasını kullanan ana programımızı aşağıdaki gibi düzenleyelim.
from Kelebek import Desen
ornek: Desen
kelime: str = ""
while True:
kelime = input("Kelimeyi giriniz : ")
if kelime != "":
if kelime.upper() == "H":
break
ornek = Desen(kelime.upper())
ornek.desen()
else:
print("Lütfen bir kelime giriniz...")
Gördüğünüz gibi ana programa ait kodlar ne kadar azaldı. Tanımlanan class dosyasını istenen tüm programlarda kullanabilirsiniz.