どうも!リョクちゃです!
今回は、プログラミングの上達において練習問題を解くことって大事ですよね。
皆さんは、練習問題を解くとき、どのように解かれていますか?
「練習問題ごとに1つの.pyファイルを作って」解かれるのが、一般的ではないでしょうか?
ある時までは、筆者もそうでした。
これって、練習問題が多いと、後々の管理って大変なんですよ……。
練習問題を解いているときは、特に気にならないんですが、後日……
ファイル整理などしようとするときに、ファイル数が多いことで発狂してしまいますね。
※練習問題が決まったフォルダに入っていれば、フォルダごと削除してしまえばいいのですが
それも非効率ですよね。
そんな時に、どうしたらいいか?
1つのファイルで練習問題を管理すればいいじゃないか!
ということで、1つのファイルで練習問題を管理する方法を紹介していきます。
ちなみに前回はこちら
目次
1つのpyファイルで練習問題を管理
まず筆者の環境は、VSCodeをメインで使っています。
そのため、本記事はVSCodeを基に進めていきます。
以降は、練習問題を解いていくうえで、ファイルを作成し、
実際に手順を追って説明します。
今回、練習問題で使用させていただくサイトは、こちらになります。
ありがとうございます。
練習問題用にpyファイルを作成
それでは、VSCodeを起動します。
起動したら、メインで使用されているワークスペースもしくはサブのワークスペースに
練習問題用のフォルダをローカルの適当な場所に作成しておき、追加しておきます。
筆者の場合、Eドライブに”Practice”フォルダを作成し、
このフォルダをワークスペースに追加しています。
追加出来たら、Practiceに今回、対象となる練習問題用のファイルを新たに作成します。
今回は、「python_55.py」という名前のファイルを作成しました。
作成出来たら、pyファイルに練習問題を解くコードを書いていきます。
練習問題を効率的に解く
効率的にファイルを管理する上で、1つのファイルで行うといいました。
例えば、下図の問題を解くとき、皆さんなら、どうやってファイルに書いていきますか?
普通に解く
まずは、普通に解くため、書いていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# 1 変数 # xという変数に2を代入し,それを3倍した数を出力してください. # 期待する出力:6 x = 2 print( x * 3) # 2 swap # 変数aに100を代入し,変数bに200を代入します. # その後,両者の値を入れ替えて,aに200,bに100が代入されているようにしてください. # 出力としてはaとbを出力してください. # 出力形式は問いませんが,print(a,b)とすると,空白区切で出力できます # 期待する出力の一例:200 100 a = 100 b = 200 a, b = b, a print(a, b) # 3. 四則演算+α # 変数aに10を代入,変数bに2を代入し,aとbの和,差,積,商を出力してください. # 出力形式は問いません.また,商の値が小数か整数かは問いません. # 期待する出力の一例:12 8 20 5.0 a = 10 b = 2 print(a + b, a - b, a * b, a / b) |
このようになります。これを、一度にすべて実行すると、
print()の()の中が期待する出力として、出力されるのですが、
1つの問題を見たいとき、例えば、1.変数の期待する出力だけを見たいとき
この場合、2,3はコメントアウトしなくてはいけません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# 1 変数 # xという変数に2を代入し,それを3倍した数を出力してください. # 期待する出力:6 x = 2 print( x * 3) # 2 swap # 変数aに100を代入し,変数bに200を代入します. # その後,両者の値を入れ替えて,aに200,bに100が代入されているようにしてください. # 出力としてはaとbを出力してください. # 出力形式は問いませんが,print(a,b)とすると,空白区切で出力できます # 期待する出力の一例:200 100 # a = 100 # b = 200 # a, b = b, a # print(a, b) # 3. 四則演算+α # 変数aに10を代入,変数bに2を代入し,aとbの和,差,積,商を出力してください. # 出力形式は問いません.また,商の値が小数か整数かは問いません. # 期待する出力の一例:12 8 20 5.0 # a = 10 # b = 2 # print(a + b, a - b, a * b, a / b) |
これって、いちいちコメントアウトしないといけないので大変ですね。
練習問題に従うので、あまり気にはしませんが、汎用性も持たせたくなりませんか?
変数に直接値を代入するのではなく、
必要に応じて値を変えて出力がどうなるかも気になりますよね。
関数を駆使して解く
こんな時に汎用性を持たせた効率的に解く方法として、関数を使うことが挙げられます。
例えば、先ほどの問題を関数を駆使して、手を加えると、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# 1 変数 # xという変数に2を代入し,それを3倍した数を出力してください. # 期待する出力:6 def hensu(x, c): print(x * c) # 2 swap # 変数aに100を代入し,変数bに200を代入します. # その後,両者の値を入れ替えて,aに200,bに100が代入されているようにしてください. # 出力としてはaとbを出力してください. # 出力形式は問いませんが,print(a,b)とすると,空白区切で出力できます # 期待する出力の一例:200 100 def swap(a, b): a,b = b,a # 入れ替え print(a, b) # 3. 四則演算+α # 変数aに10を代入,変数bに2を代入し,aとbの和,差,積,商を出力してください. # 出力形式は問いません.また,商の値が小数か整数かは問いません. # 期待する出力の一例:12 8 20 5.0 def shisokuenzan(a, b): print(a + b, a - b, a * b, a / b) |
こんな風に、書き換えることができます。
どうでしょう。
関数に書き換えることで、関数を呼び出すときに好きな値でテストをすることが
できるようになります。
また、呼び出すだけで、ソースをコメントアウトすることはなくなります。
呼び出したい関数を変える時に場合によっては、コメントアウトするかもしれないですね。
では、1.変数の問題を呼びだしてみます。
1 2 3 4 5 6 |
################################################# #メイン処理 # ################################################# hensu(2, 3) # 出力:6 |
このようになります。この、メイン処理に練習問題を関数化し、呼び出すことで
好きな練習問題を呼び出せます。また同じ変数を使うことも可能です。
関数内で使う場合、変数の適用範囲が異なるため。
筆者的にはやみくもに練習問題のソースを書いては、コメントアウトをするのではなく
関数を使って、練習問題を解くようにするのが気に入っています。
関数化の場合に、Docstringを残す
ただ練習問題を関数化するのではなく、わかりやすいように説明を残しておきます。
VSCodeでは、拡張機能をインストールすることで、便利に使える機能が充実しています。
説明に関しては、Docstringを使います。
これは、関数などの仕様を説明するために定義に基づいて記述する記法になります。
Pythonでは、”””(トリプルクォート文字列)を関数内で打ち込むことで、
生成することができます。
また、これを便利に定義されたテンプレートを呼び出せる拡張機能が、
VSCodeではあります。
それが、「autoDocstring – Python Docstring Generator」になります。
これをインストールしておくことで、定義されたDocstringを呼び出すことができます。
使い方は、
関数内で、”””(トリプルクウォート)を打つと、「Generate Docstring」と出てくるので、
選択して、Enterキーを押します。
すると、以下のようにDocstringが生成されます。
練習問題用の関数では、
- summary ⇒ 問題文を載せておきます。
- Args ⇒ 引数の説明を載せておきます。
を載せておくことで、わかりやすく且つ練習問題の管理がしやすくなります。
このように記述することで、練習問題の整理ができ、1つ1つ用意するよりも
分かりやすくなるのではないかと思います。
全ての練習問題(3問)に対して、Docstringを整備すると以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
def hensu(x, c): """1 変数 xという変数に2を代入し,それを3倍した数を出力してください. 期待する出力:6 Args: x (int): 問題指定の変数x c (int): 問題指定の、掛けたい値 """ print(x * c) def swap(a, b): """2 swap 変数aに100を代入し,変数bに200を代入します. その後,両者の値を入れ替えて,aに200,bに100が代入されているようにしてください. 出力としてはaとbを出力してください. 出力形式は問いませんが,print(a,b)とすると,空白区切で出力できます 期待する出力の一例:200 100 Args: a (int): 変数a b (int): 変数b """ a,b = b,a # 入れ替え print(a, b) def shisokuenzan(a, b): """3. 四則演算+α 変数aに10を代入,変数bに2を代入し,aとbの和,差,積,商を出力してください. 出力形式は問いません.また,商の値が小数か整数かは問いません. 期待する出力の一例:12 8 20 5.0 Args: a (int): 変数a b (int): 変数b """ print(a + b, a - b, a * b, a / b) |
まとめ
練習問題を解く際に、1つ1つファイルを作成するのではなく、1つのファイルで
練習問題を関数化してしまうのが、後々効率的かなということで紹介しました。
少しでもご参考になれば、嬉しいです。
最後までお読みいただき、ありがとうございます。
・こちらの書籍を参考にPythonの理解を深めました。