ホームページ  >  記事  >  バックエンド開発  >  ロジックとプログラミングの演習 (ソリューション): アプローチと最適化

ロジックとプログラミングの演習 (ソリューション): アプローチと最適化

王林
王林オリジナル
2024-08-21 06:09:10474ブラウズ

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

この演習を考慮すると: (codewars.com より)

数値の各桁の 2 乗を返す関数を作成します。

たとえば、関数に入力すると、数値 7024904 を返す必要があります。7 の 2 乗は 49、0 の 2 乗は であるためです。 >0、2 の 2 乗は 4 です。関数がゼロを受け取った場合、0 を返さなければなりません。

この演習の根本的な課題は、整数を 1 桁ずつ調べて、結果を別の整数として返すことです。

プログラミングのあらゆるものと同様、この演習もさまざまな方法で解決できます。まず、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 を返します。次に、結果変数を空の文字列として初期化し、条件 num > で while ループを作成します。 0. 受信した各桁の 2 乗である変数 num_sqr を定義します。 num % 10 を使用して、受信した数値の最後の桁を取得し、**2 で 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 に累乗し、すべて文字列に変換した結果である文字が連結されます。そして、結果を整数に変換して返します。

  • ループ内で文字列を連結すると、数値が非常に大きい場合はパフォーマンス効率が低下する可能性がありますが、ほとんどのユースケースでは完全に許容されます。

*より高度で「エレガントな」方法 * は、Understanding Generators と .join motodo を使用しています。最初にコードを提示し、これらの用語について詳しく説明します。

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

この最初のコードは、概念を知らないとあまり読みにくくなります
それがそれを構成します。

str(num) の数字の式 str(int(digit)**2) は、数値 num の文字列表現の各数字を反復する _generator _(ジェネレーター式) です。
数字ごとに、整数 (int(digit)) に変換し、2 乗し (**2)、文字列 (str(...)) に変換し直します。次に、''.join(...) を使用して、シーケンス (この場合はジェネレーター) を取得し、すべての要素を 1 つの文字列に連結します。ここでは、すべての正方形の数字が区切り文字なしで 1 つの文字列に結合されます (一重引用符間の文字列が空 '' であるため)。

ご覧のとおり、演習を解くさまざまな方法は、言語の知識のレベルを示しています。テストに合格すればすべてのソリューションは正しいですが、一部のソリューションは他のソリューションよりも効率的で読みやすいものもあります。アプローチの選択は、状況とそれぞれのケースで何が優先されるかによって異なります。

  • 可読性: 他の開発者がコードを読んで保守する場合、これは非常に重要です。明確で理解しやすいコードにより、エラーの可能性が減り、保守が容易になります。 ?

  • 効率: 大量のデータを扱う場合、またはパフォーマンスが重要なアプリケーションで作業する場合に重要です。コードをより最適化すると、速度とリソース消費に大きな違いが生じます。 ?

  • シンプルさ: プロトタイプや教訓的な演習など、問題を迅速かつ直接的に解決することが優先される場合。多くの場合、単純さによってコードのデバッグとテストが容易になります。 ?

開発時には、これらの考慮事項の間のバランスを見つけて、プロジェクトまたはタスクの特定のニーズにソリューションを適応させることが重要です。

以上がロジックとプログラミングの演習 (ソリューション): アプローチと最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。