コードゴルフは、特定の問題をできるだけ少ない文字で解決するプログラムを参加者に書くプログラミングコンテストです。言い換えれば、コードゴルフとは、きれいなコードを書くことです。コードゴルフはどのプログラミング言語でも実行できますが、Python はその簡潔な構文と強力な組み込み関数により、この課題に特に適しています。
この記事では、Python でゴルフをコーディングするためのいくつかのヒントと戦略を検討し、適用可能な例と出力を示します。
リスト内包表記を使用する
リスト内包表記は、簡潔で読みやすい方法でリストを作成するための Python の強力なツールです。コード ゴルフでは、リスト内包表記を長いループや条件文に置き換えることができます。たとえば、1 から 10 までのすべての偶数を含むリストを作成する次のコードについて考えてみましょう。
リーリー
このコードはリスト内包表記を使用すると 1 行に減らすことができます:
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
このコードは、for ループと append() メソッドの代わりにリスト内包表記を使用して、前の例と同じ 1 から 10 までの偶数のリストを生成します。リスト内包表記を使用すると、結果を達成するために必要なコードの量を大幅に削減できるため、コード ゴルフにおける強力なツールになります。
組み込み関数を使用する
Python には、一般的な操作を簡潔な方法で実行できる幅広い組み込み関数があります。コードゴルフをプレイするときは、これらの関数とその構文に慣れることが重要です。たとえば、1 から 10 までのすべての偶数の合計を計算する次のコードについて考えてみましょう。
リーリー
組み込みの sum() 関数を使用すると、このコードを 1 行に圧縮できます。
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
sum() とリスト内包表記を使用して 1 から 10 までの偶数のリストを生成し、その合計を出力として出力するのに必要なコードは少なくなります。
ショートカットを使用する
Python には、特定の操作に必要なコードの量を効果的に削減できるショートカットや省略形がいくつかあります。たとえば、リストに特定の値が存在するかどうかを検証する次のコードを見てみましょう。
リーリー
このコードは、functools モジュールの lambda 関数とreduce() 関数を使用して 1 行に圧縮できます。
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
このプログラムは、reduce() 関数と lambda 関数を使用して「Hello, World!」の母音の数を数え、最初の 8 つのフィボナッチ数を生成し、そのシーケンスを出力します。
Lambda関数を使用する
Python では、ラムダ関数は 1 行のコードで宣言できる名前のない関数です。 Lambda 関数は、単純な関数をすばやく定義する必要がある場合のコード圧縮に特に役立ちます。たとえば、各タプルの 2 番目の要素に基づいてタプルのリストを並べ替える次のコードについて考えてみましょう。
リーリー
ラムダ関数を使用して、このコードを 1 行に圧縮します:
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
ラムダ関数を使用すると、別の関数を定義することなく、簡潔で読みやすい方法で並べ替え基準を定義できます。
冗長なコードを避ける
コードゴルフをするときは、冗長なコードや繰り返しのコードを書かないようにすることが重要です。これには、不要な変数、ループ、または条件文が含まれる可能性があります。たとえば、文字列内の母音の数を数える次のコードについて考えてみましょう:
リーリー
count() 関数と str. lower() メソッドを使用すると、このコードを 1 行に圧縮できます。
Example
の中国語訳は次のとおりです:
Example
リーリー
###出力###
リーリー
count() 関数と str. lower() メソッドを使用すると、同じ操作をより簡潔で読みやすい方法で実行できます。
コード ゴルフの例
の中国語訳は次のとおりです:
コード ゴルフの例
これまで説明してきたテクニックと戦略のいくつかを実証するために、ゴルフの Python コードの例をいくつか見てみましょう。
例: FizzBuzz
FizzBuzz 問題は、1 から 100 までの数字を出力し、3 の倍数を「Fizz」に、5 の倍数を「Buzz」に置き換え、両方の倍数である 3 の倍数を「Buzz」に置き換える一般的なコーディングの課題です。複数の数字は「FizzBuzz」に置き換えられます。従来のループと条件メソッドを使用した FizzBuzz 問題の解決策は次のとおりです:
リーリー
リスト内包表記と文字列連結を使用すると、このコードは 1 行に圧縮できます:
リーリー
リスト内包表記と文字列連結を使用すると、FizzBuzz の問題を解決するために必要なコードの量を大幅に削減できます。
出力プログラムは、3 の倍数を「Fizz」に、5 の倍数を「Buzz」に、3 と 5 の倍数の両方の数値を「FizzBuzz」に置き換えます。他のすべての数値はそのまま出力されます。
###結論は###
要約すると、コード ゴルフは、タスクを達成するためにできるだけ少ない文字数でコードを記述する人気のプログラミング手法です。 Python では、リスト内包表記、ラムダ関数、sum() やsorted() などの組み込み関数の使用など、コード サイズを削減するために使用できる手法がいくつかあります。コード ゴルフは楽しくて勉強になる演習ですが、実際のアプリケーション用のコードを作成する場合は、コードの読みやすさと保守しやすさを常に最優先する必要があります。したがって、できるだけ短いコードを追求する誘惑に駆られるかもしれませんが、自分自身にとっても他の人にとっても、コードを明確で理解しやすいものにしておくことが重要です。
以上がPython でゴルフをコード化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。