«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Упражнения по логике и программированию (решения): подходы и оптимизация

Упражнения по логике и программированию (решения): подходы и оптимизация

Опубликовано 22 августа 2024 г.
Просматривать:376

Ejercicios de logica y programacion (oluciones): Enfoques y Optimización

Учитывая это упражнение: (с codewars.com)

Создайте функцию, которая возвращает квадрат каждой цифры числа.

Например, при вводе функции число 702 должно возвращать 4904, поскольку квадрат 7 — это 49, квадрат 0 — это ]0 и квадрат 2 равен 4. Если функция получает ноль, она должна вернуть 0.

Основная задача этого упражнения — пройти по цифре целого числа и вернуть результат в виде другого целого числа.

Как и все в программировании, это упражнение можно решить разными способами. Сначала давайте решим эту проблему, используя свойства манипулирования числами в Python, затем я объясню другой, более продвинутый способ?.

def square_digits(num):
    if num == 0:
        return 0
    result = ""
    while num > 0:
        num_sqr = (num % 10) ** 2 
        num = num // 10
        result = str(num_sqr)   result 
    return int(result)

В этом коде мы сначала оцениваем, получен ли 0, чтобы вернуть 0, как указано в операторе. Затем мы инициализируем переменную result как пустую строку, создаем цикл while с условием num > 0. Мы определяем переменную num_sqr, которая представляет собой квадрат каждой полученной цифры. Используя num % 10, мы получаем последнюю цифру полученного числа, а затем возводим ее в квадрат с **2.

  • Использование num % 10 — распространенный метод извлечения последней цифры числа.

  • Выражение num = num // 10 удаляет последнюю цифру числа, перемещаясь вперед по каждой цифре.

Другой способ решить эту проблему — преобразовать число в строку и выполнить цикл по этой строке с помощью цикла for:

def square_digits(num):
    result = ""
    for digit in str(num):
        result  = str(int(digit)**2)
    return int(result)

Этот код более оптимален, в нем меньше строк, и обход очень хорошо понятен, и нет необходимости оценивать, получает ли он 0. В Python можно перемещаться по строке посимвольно с помощью цикла for. . Мы используем эту функцию для перебора полученного числа, преобразуя его с помощью str(num) в строку. Мы создаем переменную result как пустую строку, к которой будет присоединен символ, который является результатом преобразования цифры в целое число и повышения до 2, и все это преобразуется в строку. Затем мы возвращаем результат, преобразованный в целое число.

  • Объединение строк внутри цикла может быть менее эффективным с точки зрения производительности для очень больших чисел, но вполне приемлемо для большинства случаев использования.

*Более продвинутый и «элегантный» способ * — использование генератора понимания и девиза .join. Сначала я представляю вам код, и мы разберем его, объясняя эти термины.

def square_digits(num):
    return int(''.join(str(int(digit)**2) for digit in str(num)))

Этот первый код не очень читабелен, если вы не знаете концепций
это компенсируется.

Выражение str(int(digit)**2) для цифры в str(num) представляет собой _generator _(Generator Expression), который перебирает каждую цифру в строковом представлении числа num.
Каждую цифру он преобразует в целое число (int(digit)), возводит в квадрат (**2), а затем преобразует обратно в строку (str(...)). Затем с помощью ''.join(...) вы берете последовательность (в данном случае генератор) и объединяете все элементы в одну строку. Здесь все квадратные цифры объединены в одну строку без разделителя (поскольку строка между одинарными кавычками пуста '').

Как мы видим, разные способы решения упражнения демонстрируют уровень владения языком. Все решения являются правильными, если они проходят тесты, но некоторые из них более эффективны и читабельны, чем другие. Выбор подхода зависит от контекста и того, что является приоритетом в каждом случае:

  • Читаемость: это очень важно, когда другие разработчики будут читать и поддерживать ваш код. Ясный, простой для понимания код снижает вероятность ошибок и упрощает его обслуживание. ?

  • Эффективность: важно при работе с большими объемами данных или в приложениях, где производительность имеет решающее значение. Более оптимизированный код может существенно повлиять на скорость и потребление ресурсов. ?

  • Простота: для случаев, когда приоритетом является быстрое и непосредственное решение проблемы, например, при создании прототипов или дидактических упражнений. Простота часто облегчает отладку и тестирование кода. ?

При разработке важно найти баланс между этими соображениями, адаптируя решение под конкретные нужды проекта или задачи.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/jpinodev/ejercicios-de-logica-y-programacion-enfoques-y-optimizacion-aka?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3