アルゴリズムの問​​題を解決するための Python 3 コード フレームワーク

アルゴリズムの問​​題を解決するための Python 3 コード フレームワーク

序文

現在インターンシップをしており、仕事量はそれほど多くないので、空き時間を利用してPATのウェブサイトでPython 3を使った問題を練習し、Python 3の機能や関数型プログラミングの概念を活用することに注力しています。ほとんどの問題は、1行に複数の数値や文字列を読み込む、1行に一定数の文字列を出力するなど、入出力の形式が似ているため、繰り返しコードが多く生成されます。

Pythonコード

そこで、VS Code のコード スニペット機能を使用して、これらの入力と出力を処理するためのコード フレームワークを記述し、テスト関数を追加しました (関数を記述する前にテストを記述するのが正しい方法です)。コードは次のとおりです。

  1. データ入出力を備えたシンプルなコンソール プログラム  
  2. インポートシステム
  3. インポートio
  4.  
  5.  
  6. read_int() を定義します:
  7. 一連の数字を読んでください。」 「」  
  8. リストを返す(map( int , sys.stdin.readline().split()))
  9.  
  10.  
  11. test_read_int() を定義します:
  12. "" "read_int 関数をテストする" ""  
  13. test_file = io.StringIO( "1 2 3\n" )
  14. sys.stdin = テストファイル
  15. read_int() == [1, 2, 3] をアサートし、 「read_int エラー」  
  16.  
  17.  
  18. read_float() を定義します:
  19. "" "一連の浮動小数点数を読み取ります。" ""  
  20. リストを返す(map( float , sys.stdin.readline().split()))
  21.  
  22.  
  23. test_read_float() を定義します:
  24. "" "read_float 関数をテストする" ""  
  25. test_file = io.StringIO( "1 2 3\n" )
  26. sys.stdin = テストファイル
  27. read_float() == [1.0, 2.0, 3.0] をアサートすると、 「read_float エラー」が発生します。  
  28.  
  29.  
  30. read_word() を定義します:
  31. 文字列のシリーズを読みます。」 「」  
  32. リストを返す(map(str, sys.stdin.readline().split()))
  33.  
  34.  
  35. def test_read_word():
  36. "" "read_word 関数をテストする" ""  
  37. test_file = io.StringIO( "1 2 3\n" )
  38. sys.stdin = テストファイル
  39. read_word() == [ "1" , "2" , "3" ], "read_word エラー"をアサートする 
  40.  
  41.  
  42. def combine_with(seq, sep= ' ' , num=None):
  43. "" "リスト列挙型を文字と結合し、文字列オブジェクトを返します" ""  
  44. res = sep.join (リスト(マップ(str, seq)))
  45. num なしではない:
  46. res = str(seq[0])
  47. 範囲(1, len(seq))内の要素の場合:
  48. 解像度 += 間隔 + \
  49. str(seq[element]) 要素% num != 0 の場合、そうでない場合  '\n' + \
  50. str(seq[要素])
  51. 戻り
  52.  
  53.  
  54. test_combile_with() を定義します:
  55. "" "combile_with 関数をテストします。" ""  
  56. combine_with([1, 2, 3, 4, 5], '*' , 2) == "" "1*2 3*4 5" "" , "combine_with エラー。" とアサートします。  
  57.  
  58.  
  59. main() を定義します:
  60. メイン機能  
  61. 合格
  62.  
  63.  
  64. __name__ == '__main__'の場合:
  65. sys.exit( int (main()または0))

VS コード スニペット

VS Code に追加されたデフォルトのコード スニペットは、おおよそ次のように動作します。

ファイル->オプション->ユーザーコードスニペットでPythonを選択

「python.json」ファイルを次のように編集します。

  1. {
  2. /*
  3. // Python用のスニペットをここに配置します。各スニペットはスニペットで定義されます 接頭辞、本文   
  4. //説明プレフィックス  スニペットをトリガーすると、本文が展開されて挿入されます。可能な変数は次のとおりです。
  5. // $1、$2タブストップ、${id}${id:label}${1:label}は変数です同じ IDを持つ変数は接続されます。
  6. // 例:
  7. 「コンソールに印刷」 : {
  8. 「プレフィックス」 : 「ログ」
  9. "体" : [
  10. "console.log('$1');" ,
  11. 「$2」  
  12. ]、
  13. 「説明」 : 「コンソールにログ出力」  
  14. }
  15. */
  16. 「データ入出力を備えたシンプルなコンソール プログラム」 : {
  17. 「プレフィックス」 「シンプル」
  18. "body" : [ "\"\"\"データ入力と出力を備えたシンプルなコンソール プログラム。\"\"\"\nimport sys\n\ndef read_int():\n \"\"\"一連の数値を読み取ります。\"\"\"\n return list(map(int, sys.stdin.readline().split()))\n\n\ndef read_float():\n \"\"\"一連の浮動小数点数値を読み取ります。\"\"\"\n return list(map(float, sys.stdin.readline().split()))\n\n\ndef read_word():\n \"\"\"一連の文字列を読み取ります。\"\"\"\n return list(map(str, sys.stdin.readline().split()))\n\n\ndef combine_with(seq, sep=' ', num=None):\n \"\"\"リスト列挙型を文字と結合し、文字列オブジェクトを返します\"\"\"\n res = sep.join(list(map(str, seq)))\n if num is not None:\n res = str(seq[0])\n for element in range(1, len(seq)):\n res += sep + str(seq[element]) if element % num != 0 else '\\n' + str(seq[element])\n return res\n\n\ndef main():\n \"\"\"メイン関数。\"\"\"\n pass\n\n\nif __name__ == '__main__':\n sys.exit(int(main() or 0))\n"  
  19. ]、
  20. 「説明」 : 「データ入力と出力を備えたシンプルなコンソール プログラム」  
  21. }
  22. }

要約する

Python は、アルゴリズムの問​​題を解くなど、高いパフォーマンスが求められるシナリオには特に適していませんが、Python を使用すると、さまざまなキュー タイプや文字列処理条件などの一部のシミュレーション問題を解決する効率が大幅に向上します。さらに、cimport を使用すると、C 言語のデータ構造と Python の構文特性を使用できるため、ネイティブ C コードと同等の効率が得られます。

<<:  アリコロニーアルゴリズムの理論と実践ガイド

>>:  DiDiのグローバルDi-Techアルゴリズムコンテストが終了し、中国のプレイヤーが10万ドルの優勝賞金を獲得した。

ブログ    
ブログ    

推薦する

...

オープンソース!香港中文大学、MIT、復旦大学が初のRNA基礎モデルを提案

タンパク質分野とは異なり、RNA 分野の研究では十分な注釈付きデータが不足していることがよくあります...

アルゴリズム設計者が新たな人気者になる

Aisle50 の共同創設者であるクリストファー・シュタイナー氏は、新著の中で、デジタルが優位性を...

ロボットと人間:その組み合わせが産業オートメーションの様相を変える可能性

進化する産業オートメーションの世界では、人間と機械の境界を越えた革新的なパートナーシップが生まれてい...

クロード3の「自己認識」事件が爆発、マスクはじっとしていられず、OpenAIにはバックアッププランがあることが明らかに

クロード3は発売されてから24時間以上経ちますが、今でも人々の認知をリフレッシュさせています。量子物...

指紋と顔は本当に生体認証を表現できるのでしょうか?

今年初めから現在まで、ToFセンサーはApple、Samsung、GD、AMSなどのセンサー企業やス...

...

ボストン・ダイナミクスの二輪ロボット「ハンドル」がデビューします!物流ロボットOTTOと連携して商品を配送

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

北京大学の学部生がチップ研究で世界大会で優勝!筆頭著者はトップクラスのEDAカンファレンスで8本の論文を発表

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

戦争の太鼓はすでに鳴り響いています。人工知能に関して、あなたはどちらの陣営に属しますか?

[[240281]]人工知能が将来の技術の方向性であることは誰もが知っていますが、AIの学習に対す...

なんと6600個以上の星!この学習ロードマップはGithubで人気があります

あなたも、周りの同僚やオンライン情報で AI 人工知能や Python プログラミングについて話題に...

ロボットが人間のライフラインを守る、6つの大きなトレンドが無限の可能性を浮き彫りにする

最近、梅雨の到来により、わが国の多くの都市が洪水期に突入し、南部のほとんどの都市が激しい暴風雨、洪水...

責任あるAIの未来を探る

テクノロジーが進歩するにつれ、組織は倫理、透明性、説明責任のバランスを取りながら AI の可能性を活...

...