Можно ли реализовать задачу другим способом?
Увеличьте шрифт, которым набрана строка.
Формат ввода
Вводится одна строка, состоящая только из латинских букв 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 шт):
Можно сделать занесение символов в словарь чуть более удобным:
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')
Вывод:
* * * ** * ** * *
* * * * * * * * * * * * * * * *
*** * *** ** *** ** * ***
* * * * * * * * * * * * * * * *
* * * * * ** * * ** * * *
относительно полного кода, можно сделать так тогда:
решение без словаря, только списки (если не нравятся кортежи в 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, то разделитель нужен просто для визуального удобства
любую букву можно представить в виде числа, к примеру буква 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)
}
