Есть большое количество способов это сделать:
def square_digits_v1(n):
return int(''.join(str(int(x) ** 2) for x in str(n)))
def square_digits_v2(n, t=str.maketrans({str(d): str(d ** 2) for d in range(10)})):
return int(str(n).translate(t))
def square_digits_v3(n): # import re
return int(re.sub('\d', lambda m: str(int(m.group(0)) ** 2), str(n)))
def square_digits_v4(n): # import numpy as np
return int(''.join((np.fromiter(str(n), int) ** 2).astype(str)))
def square_digits_v5(n): # Только вывод на печать
print(*[int(x) ** 2 for x in str(n)], sep='')
UPD Извращаться, так извращаться:
from decimal import Decimal
from io import StringIO
def square_digits_v6(n):
with StringIO() as buffer:
for digit in Decimal(n).as_tuple().digits:
print(digit ** 2, end='', file=buffer)
return int(buffer.getvalue())
as_int = lambda f: lambda x: int(f(x))
@as_int
def square_digits_v7(n):
return eval('f"{'+'**2}{'.join(f'{n}')+'**2}"')