Можно ли реализовать задачу другим способом?

Увеличьте шрифт, которым набрана строка.

Формат ввода

Вводится одна строка, состоящая только из латинских букв A, B, C.

Формат вывода

Выводятся 5 строк, которые представляют те же самые буквы, но составленные из звёздочек и пробелов, разделённые двумя пробелами, как показано в примере.

введите сюда описание изображения

у меня есть идея по решению , то есть "забабахать" словарь со всем алфавитом и в цикле из него печатать, но для каждой буквы составлять "шрифт " из звездочек будет немного тяжко, есть ли способы попроще для решения?

На примере 2х букв

f={'A':['  *  ',' * * ',' *** ','*  * ','*  * '],'B':['***  ','*  * ','***  ','*  * ','**** ']}
s='ABBA'
for i in range(5):
    for k in s:
        print(f.get(k)[i],end='')
    print()

нашел код с идеей про которую я писал в комментариях ниже, как можно этот код упростить?(имею ввиду последнюю строку с print, так как много не понятных функций)

string=['   ','  *',' * ',' **','*  ','* *','** ','***']
dic=['25755', '65656', '25452', '65556', '74647',
       '74644', '34553', '55755', '72227', '31152',
       '56465', '44447', '57775', '57755', '75557',
       '75744', '75577', '65655', '34216', '72222',
       '55557', '55552', '55575', '55255', '55522',
       '71247']
n=input()
for i in range(5):
    print('  '.join([string[int(dic[ord(k) - ord('A')][i])] for k in n]))

Ответы (3 шт):

Автор решения: CrazyElf

Можно сделать занесение символов в словарь чуть более удобным:

letters = {
    'A': '''
 *
* *
***
* *
* *
'''
}

print(letters['A'])

Дальше можно разбить элементы словаря по символу перевода строки \n и отбросить лишние пустые строки в начале и в конце.

Хорошо, вот вам полноценная работающая программа:

letters = 'ABC'

letters_picture = [
'''
 *
* *
***
* *
* *
''',
'''
**
* *
**
* *
**
''',
'''
 *
* *
*
* *
 *
'''
]

def draw_letters(text):
    for y in range(5):
        for letter in text:
            ind = letters.find(letter)
            #print(letter, ind, y)
            letter_line = letters_picture[ind].split('\n')[y+1]
            print(f'{letter_line:5}', end='')
        print()

draw_letters('ACABABCA')

Вывод:

 *    *    *   **    *   **    *    *   
* *  * *  * *  * *  * *  * *  * *  * *  
***  *    ***  **   ***  **   *    ***  
* *  * *  * *  * *  * *  * *  * *  * *  
* *   *   * *  **   * *  **    *   * * 
→ Ссылка
Автор решения: Zhihar

относительно полного кода, можно сделать так тогда:

решение без словаря, только списки (если не нравятся кортежи в letters, замените их списками () -> [])

letters = [
    (None,  '???|???|???|???|???'),
    ('A',   ' * |* *|***|* *|* *'),
    ('B',   '** |* *|** |* *|** '),
    ('C',   ' * |* *|*  |* *| * '),
]

def draw_letters(text):
    for line in range(5):
        for letter in text:
            images = list(filter(lambda obj: obj[0] == letter, letters))
            image = images[0] if len(images) else letters[0]
            letter_line = image[1].split('|')[line]
            print(f'{letter_line:5}', end='')
        print()

draw_letters('CARAMBA')

P.S.

кстати чтобы постоянно не делать split('|') можно просто делать срезы:

letter_line = image[1][line * 4: line * 4 + 3]

можно было бы убрать | и тогда делать line * 3, то разделитель нужен просто для визуального удобства

→ Ссылка
Автор решения: Danis

любую букву можно представить в виде числа, к примеру буква a это 11245. Код:

def f(string):
    string = (string
                    .replace("\n", "")
                    .replace(" ", "0")
                    .replace("*", "1"))
    return int(string, 2)

A = ''' * 
* *
***
* *
* *'''

print(f(A))

теперь его можно прервать его обратно:

def f(n):
    n = bin(n)[2:].rjust(15, "0")
    n = n.replace("0", " ").replace("1", "*")
    return "\n".join(n[i:i + 3] for i in range(0, 15, 3))

print(f(11245))

так проходим по всем буквам и превращаем их в число, и создаём словарь

dict_ = {
    "a": f(11245),
    "b": f(27566), 
    "c": f(11050) 
}
→ Ссылка