@mainseo4all
начинающий программист, черный пояс по seo

Python3 как возвести в степень каждую цифру натурального числа?

Решаю задачки на codewars, попалась такая которая сломала меня)
Суть в чем: нужна функция которая возводит в квадрат цифры натурального числа, каждую по очереди.
например 91 будет 811, поэтому 9 в квадрате будет 81, а 1 в квадрате будет 1.
Я уже второй день пытаюсь и тяму не хватает.
Кода нет еще, необходимо чтобы на входе было целое число и на выходе тоже в условиях задачи.
Как бы я не пытался использовать кортежи, списки, я утыкаюсь в то что число не может быть итерируемым объектом и никакого for in не получится. Помогите советом или примером. За ранее благодарю
def square_digits(num):
???
  • Вопрос задан
  • 149 просмотров
Решения вопроса 2
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
На скорую руку - простейшее решение, если я правильно понял суть задачи:
def square_digits(number):
    out = ''
    for im in str(number):
        out += str(int(im)**2)
    return int(out)

>>> square_digits(91)
811
Ответ написан
adugin
@adugin Куратор тега Python
Есть большое количество способов это сделать:
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}"')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы