のべラボ.blog

Tech Blog | AWS や サーバーレスやコンテナ などなど

Python 3エンジニア認定 基礎試験の勉強記録:基本編

Python はこれまで長い間、独学で なんとなく コードを書いてきたんですが、体系的に学んで理解を深めたいと思い至りました。

ただ、目標設定をせずにプログラミング言語を学ぶと途中で飽きてしまいそうなので、Python 3エンジニア認定 基礎試験 の合格を目標することにしました。

このブログでは、あらためて Python を体系的に勉強してみて学べたことや、メモとして残しておきたいことなどを記載していきます。今回は 基本編 です。

Python というプログラミング言語の仕様の全てや、試験合格のコツを解説するのではなく、あくまで自分が気づけたことのメモであることはご了承ください!

なお、Python 3 エンジニア認定 基礎試験 の試験情報については下記を参照してください。

cbt.odyssey-com.co.jp


目次


Python プログラミングのスタイルガイド

Python では、プログラミングにおける推奨事項をまとめたスタイルガイド PEP (Python Enhancement Proposals) があります。この PEP の 8番目である通称 PEP 8 で最低限、覚えておこうと思ったものを列記します。

peps.python.org

  • インデント レベルごとに 4 つのスペースを使用する
  • インデントではタブよりもスペースの方がのぞましい
  • 1行の長さを最大79文字までに制限する
  • 関数や変数の名前は小文字にする。読みやすくするために必要に応じて単語をアンダースコアで区切る

PEP 8 を読んでみると、何より重視しているのは 可読性 であることがわかります。スタイルガイドでありながら、ガイドラインに従うと可読性を損なわれる場合は敢えてガイドラインに準拠しないことも検討すべしと記載されています。実プロジェクトではチームでルールを決めることもありますし、可読性の判断基準も人によって異なる場合があるので、特定のガイドラインだけでガチガチに縛らない、というのは重要なことですね。


除算演算子 / による演算結果

試験の練習問題でひっかかってしまったので、シンプルな例でメモしておきます。

result = 5 / 5
print(result)

上記のコードで、print 関数の実行結果はどうなるでしょう? 正解は、1.0 になります。つまり、除算の対象が整数同士であっても結果は浮動小数点型になります。 1 ではないので注意したいです。


文字列のスライス

次のサンプルコードをみてみましょう。

message = "Hello"

sliced_message1 = message[2:4]
print(sliced_message1)

sliced_message2 = message[-3:]
print(sliced_message2)

このサンプルのように、文字列をスライスする場合は、下図のように 0 から番号をつけた区切り線をいれる とわかりやすいです。

サンプルコードだと、sliced_message1 には、2 番の区切り線から 4 番の区切り線の間の文字が代入されるので、ll になります。 スライスする数字がマイナスの場合は、文字列の最後から 1文字目に -1 の区切り線とします。そうすると、sliced_message2 には、-3番の区切り線からすべての文字が代入されるので、llo になるわけです。

文字列のスライスにおいて、リストのインデックスのように 1 つ 1 つの文字に番号をつけて考えた場合だとどうでしょう? その場合、サンプルでは、H がインデックス 0で、e が インデックス 1となり、[2:4] の指定なら インデックス 2 の l を含んで インデックス 4 の o は含まないことになります。 よって、[2:4] なんだけど、対象になるのは 2 から 4 までではなく 2 から 3 までと覚える必要があります。 それよりも、上図のように番号をつけた区切り線をいれて、その番号で考えたほうがシンプルといえます。


format メソッド

文字列のフォーマット指定に使用できる format メソッドのパターンをメモしておきます。

num1 = 10
num2 = 20

# これは OK
print("num1は {0} です。num2は {1} です。".format(num1,num2))
print("num1は {} です。num2は {} です。".format(num1,num2))
print("num1は {val1} です。num2は {val2} です。".format(val1=num1,val2=num2))
print("num1は {num1} です。num2は {num2} です。".format(num1=num1,num2=num2))

# これは NG
print("num1は {num1} です。num2は {num2} です。".format(num1,num2))

上記のサンプルコードの 4 行目から 7行目はすべて num1は 10 です。num2は 20 です。 と表示されますが、 9 行目では KeyError になります。 { } (フォーマットフィールド) には、引数の変数名は、そのまま記述できないということですね。その点は f 文字列を使用したフォーマットとは違うので、ごっちゃにしないように注意したいです。

num1 = 10
num2 = 20

#  f 文字列を使ったフォーマット
print(f"num1は {num1} です。num2は {num2} です。")

やはり 体系的に学ぶ ことで、これまでは正確に理解できていなかったことを学べてよい刺激になりますね! 今回は基本編でしたが、次回も引き続き Python 3エンジニア認定 基礎試験の勉強記録を書く予定です!


/* -----codeの行番号----- */