Hortlattığım için özür dilerim ama her bir şekil için ayrı ayrı liste oluşturmaya gönlüm el vermedi. Yine de sözlük kullanmaktan uzak duramadım ve şöyle bir çözüm yöntemi geliştirdim.
# Şekil bilgileri sekiller sözlüğünde saklanır.
# Her bir 3 sayı, şu bilgileri içerir: abc -> a: satır numarası, b: başlangıç indeksi, c: yazdırılacak şekil miktarı
# Örneğin 0 sayısı için ilk satırda '00000000' olmalıdır. Buna göre ilk satır için 008 yazılmalıdır. (Her bir satır 8 birim genişliğindedir.)
# İkinci satırda ise '00 00' olması için 102:162 yazılmalıdır vb.
sekiller = {0: "008:102:162:202:262:302:362:402:462:502:562:608",
1: "044:162:262:362:462:562:662",
2: "008:162:262:308:402:502:608",
3: "008:162:262:326:462:562:608",
4: "002:062:102:162:202:262:308:462:562:662",
5: "008:102:202:308:462:562:608",
6: "008:102:202:308:402:462:502:562:608",
7: "008:162:262:362:462:562:662",
8: "008:102:162:202:262:308:402:462:502:562:608",
9: "008:102:162:202:262:308:462:562:608",
'-': "324"}
# Girilen şeklin bilgisine göre bir liste ayarlar.
def donustur(sekil):
# elemanları ':' sembolüne göre ayırırız.
sekil_bilgileri = sekiller[sekil].split(':')
yerel_liste = []
# liste elemanlarını tam sayı (integer) yapar ve listeyi 'return' eder.
def tam_sayi_yap(yazi):
return (int(yazi[i]) for i in range(len(yazi)))
for n in range(7):
# 7 elemanlı bir liste oluşturur. 7 sayısı dikey uzunluktur. Her bir eleman 8 birimlik bir boşluktur.
yerel_liste.append(8 * ' ')
for sekil_bilgisi in sekil_bilgileri:
i1, i2, miktar = tam_sayi_yap(sekil_bilgisi)
# Belirtilen indeks aralığına gerekli şekilleri yerleştirir.
yerel_liste[i1] = yerel_liste[i1][:i2] + miktar * str(sekil) + yerel_liste[i1][i2+miktar:]
return yerel_liste
def birlestir_donustur_ve_yazdir(liste):
for i in range(len(liste)):
liste[i] = donustur(liste[i])
for i in range(7):
for sekil in liste:
# Her bir şeklin aynı satırını yan yana yazar. Sonra alt satıra geçer.
print(sekil[i], end=" ")
print('')
yazdirilacaklar = [3, '-', 2] # Tuple olmamalı, liste olmalı.
birlestir_donustur_ve_yazdir(yazdirilacaklar)
Çıktı:
33333333 22222222
33 22
33 22
333333 ---- 22222222
33 22
33 22
33333333 22222222
Çeşitli fonksiyonlar ile terminalde görüntülenmek istenen şekli büyük haline çeviriyoruz. Bunun için de sözlük içerisinde o şekle dair bilgiler barındıran string’leri kullanıyoruz. Kod içerisinde yorum satırları ile açıklamaya çalıştım, umarım faydası olur.
yazdirilacaklar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Tuple olmamalı, liste olmalı.
birlestir_donustur_ve_yazdir(yazdirilacaklar)
00000000 1111 22222222 33333333 44 44 55555555 66666666 77777777 88888888 99999999
00 00 11 22 33 44 44 55 66 77 88 88 99 99
00 00 11 22 33 44 44 55 66 77 88 88 99 99
00 00 11 22222222 333333 44444444 55555555 66666666 77 88888888 99999999
00 00 11 22 33 44 55 66 66 77 88 88 99
00 00 11 22 33 44 55 66 66 77 88 88 99
00000000 11 22222222 33333333 44 55555555 66666666 77 88888888 99999999
yerel_liste[i1] = yerel_liste[i1][:i2] + miktar * str(sekil) + yerel_liste[i1][i2+miktar:]
satırını şununla değiştirince çok daha güzel bir görüntü oluşuyor aslında.
yerel_liste[i1] = yerel_liste[i1][:i2] + miktar * '|' + yerel_liste[i1][i2+miktar:]
|||||||| |||| |||||||| |||||||| || || |||||||| |||||||| |||||||| |||||||| ||||||||
|| || || || || || || || || || || || || ||
|| || || || || || || || || || || || || ||
|| || || |||||||| |||||| |||||||| |||||||| |||||||| || |||||||| ||||||||
|| || || || || || || || || || || || ||
|| || || || || || || || || || || || ||
|||||||| || |||||||| |||||||| || |||||||| |||||||| || |||||||| ||||||||