「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ロジックとプログラミングの演習 (ソリューション): アプローチと最適化

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

2024 年 8 月 22 日に公開
ブラウズ:160

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 を返します。次に、変数 result を空の文字列として初期化し、条件 num > 0 で while ループを作成します。変数 num_sqr を定義します。これは、受信した各桁の 2 乗です。 num % 10 を使用して、受信した数値の最後の桁を取得し、それを **2.

で 2 乗します。
  • num % 10 の使用は、数値の最後の桁を抽出する一般的な方法です。

  • 式 num = num // 10 は、数値の最後の桁を削除し、各桁を前に進めます。

これを解決するもう 1 つの方法は、数値を文字列に変換し、for ループでこの文字列をループすることです。

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

このコードはより最適であり、行数が少なく、トラバースが非常によく理解されており、0 を受け取るかどうかを評価する必要がありません。Python では、for ループを使用して文字列を 1 文字ずつトラバースすることができます。 。この機能を使用して、受信した数値をループし、str(num) を使用して文字列に変換します。変数 result を空の文字列として作成します。これには、数字を整数に変換して 2 に累乗し、すべて文字列に変換した結果である文字が連結されます。そして、結果を整数に変換して返します。

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

*より高度で「エレガントな」方法 * は、Generator Understanding と .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 つの文字列に結合されます (一重引用符間の文字列が空 '' であるため)。

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

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

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

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

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

リリースステートメント この記事は次の場所に転載されています: https://dev.to/jpinodev/ejercicios-de-logica-y-programacion-enfoques-y-optimizacion-aka?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>
  • バッファ: Node.js
    バッファ: Node.js
    Node.js のバッファーの簡単なガイド Node.js の A Buffer は、生のバイナリ データを処理するために使用されます。これは、ストリーム、ファイル、またはネットワーク データを操作するときに役立ちます。 バッファの作成方法 文字列から: co...
    プログラミング 2024 年 11 月 5 日に公開
  • Node.js でのバージョン管理をマスターする
    Node.js でのバージョン管理をマスターする
    開発者として、私たちは異なる Node.js バージョンを必要とするプロジェクトに頻繁に遭遇します。このシナリオは、Node.js プロジェクトに定期的に関与していない新人開発者と経験豊富な開発者の両方にとって落とし穴です。各プロジェクトに正しい Node.js バージョンが使用されていることを確認...
    プログラミング 2024 年 11 月 5 日に公開
  • トラブルシューティングのために Go バイナリに Git リビジョン情報を埋め込む方法
    トラブルシューティングのために Go バイナリに Git リビジョン情報を埋め込む方法
    Go バイナリでの Git リビジョンの決定コードをデプロイするとき、バイナリをビルド元の Git リビジョンに関連付けると便利です。トラブルシューティングの目的。ただし、リビジョン番号を使用してソース コードを直接更新することは、ソースが変更されるため現実的ではありません。解決策: ビルド フラグ...
    プログラミング 2024 年 11 月 5 日に公開
  • 一般的な HTML タグ: 視点
    一般的な HTML タグ: 視点
    HTML (HyperText Markup Language) は Web 開発の基礎を形成し、インターネット上のすべての Web ページの構造として機能します。 2024 年には、最も一般的な HTML タグとその高度な使用法を理解することで、開発者はより効率的でアクセスしやすく、視覚的に魅力的...
    プログラミング 2024 年 11 月 5 日に公開
  • CSSメディアクエリ
    CSSメディアクエリ
    Web サイトがさまざまなデバイス間でシームレスに機能することを保証することが、これまで以上に重要になっています。ユーザーがデスクトップ、ラップトップ、タブレット、スマートフォンから Web サイトにアクセスするようになったため、レスポンシブ デザインが必須となっています。レスポンシブ デザインの中...
    プログラミング 2024 年 11 月 5 日に公開
  • JavaScript でのホイスティングを理解する: 包括的なガイド
    JavaScript でのホイスティングを理解する: 包括的なガイド
    JavaScript でのホイスティング ホイストは、変数と関数の宣言が、含まれるスコープ (グローバル スコープまたは関数スコープ) の先頭に移動 (または「ホイスト」) される動作です。コードが実行されます。これは、コード内で実際に宣言される前に変数や関数を使用できることを意味...
    プログラミング 2024 年 11 月 5 日に公開
  • Stripe を単一製品の Django Python ショップに統合する
    Stripe を単一製品の Django Python ショップに統合する
    In the first part of this series, we created a Django online shop with htmx. In this second part, we'll handle orders using Stripe. What We'll...
    プログラミング 2024 年 11 月 5 日に公開
  • Laravel でキューに入れられたジョブをテストするためのヒント
    Laravel でキューに入れられたジョブをテストするためのヒント
    Laravel アプリケーションを使用する場合、コマンドが負荷の高いタスクを実行する必要があるシナリオに遭遇するのが一般的です。メインプロセスのブロックを避けるために、キューで処理できるジョブにタスクをオフロードすることを決定することもできます。 例を見てみましょう。コマンド app:import-...
    プログラミング 2024 年 11 月 5 日に公開
  • 人間レベルの自然言語理解 (NLU) システムを作成する方法
    人間レベルの自然言語理解 (NLU) システムを作成する方法
    Scope: Creating an NLU system that fully understands and processes human languages in a wide range of contexts, from conversations to literature. ...
    プログラミング 2024 年 11 月 5 日に公開
  • JSTL を使用して HashMap 内で ArrayList を反復するにはどうすればよいですか?
    JSTL を使用して HashMap 内で ArrayList を反復するにはどうすればよいですか?
    JSTL を使用した HashMap 内の ArrayList の反復Web 開発では、JSTL (JavaServer Pages Standard Tag Library) は、JSP での一般的なタスクを簡素化するためのタグのセットを提供します ( Javaサーバーページ)。そのようなタスクの...
    プログラミング 2024 年 11 月 5 日に公開
  • Encore.ts — ElysiaJS や Hono よりも高速
    Encore.ts — ElysiaJS や Hono よりも高速
    数か月前、私たちは TypeScript 用のオープンソース バックエンド フレームワークである Encore.ts をリリースしました。 すでに多くのフレームワークが存在するため、私たちが行った珍しい設計上の決定のいくつかと、それがどのようにして驚くべきパフォーマンス数値につながるのかを共有したい...
    プログラミング 2024 年 11 月 5 日に公開
  • + を使用した文字列連結が文字列リテラルで失敗するのはなぜですか?
    + を使用した文字列連結が文字列リテラルで失敗するのはなぜですか?
    文字列リテラルと文字列の連結C では、演算子を使用して文字列と文字列リテラルを連結できます。ただし、この機能には混乱を招く可能性のある制限があります。質問の中で、作成者は文字列リテラル「Hello」、「,world」、および「!」を連結しようとしています。 2つの異なる方法で。最初の例:const ...
    プログラミング 2024 年 11 月 5 日に公開
  • React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス
    React の再レンダリング: 最適なパフォーマンスのためのベスト プラクティス
    React の効率的なレンダリング メカニズムは、その人気の主な理由の 1 つです。ただし、アプリケーションが複雑になるにつれて、コンポーネントの再レンダリングの管理がパフォーマンスを最適化するために重要になります。 React のレンダリング動作を最適化し、不必要な再レンダリングを回避するためのベ...
    プログラミング 2024 年 11 月 5 日に公開
  • 条件付き列の作成を実現する方法: Pandas DataFrame で If-Elif-Else を探索する?
    条件付き列の作成を実現する方法: Pandas DataFrame で If-Elif-Else を探索する?
    条件付き列の作成: Pandas の If-Elif-Else指定された問題では、新しい列を DataFrame に追加することが求められます一連の条件付き基準に基づいて決定されます。課題は、コードの効率性と可読性を維持しながらこれらの条件を実装することにあります。関数アプリケーションを使用したソリ...
    プログラミング 2024 年 11 月 5 日に公開
  • 秋さんのご紹介です!
    秋さんのご紹介です!
    Qiu のリリースを発表できることを嬉しく思います。これは、生の SQL を再び楽しくするために設計された、実用的な SQL クエリ ランナーです。正直に言うと、ORM にはその役割がありますが、単純な SQL を書きたいだけの場合は、少し圧倒されてしまう可能性があります。私は生の SQL クエリ...
    プログラミング 2024 年 11 月 5 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3