この記事の目的
この記事では、細かいこと・特定の製品に閉じたことは一旦抜きにして、未経験者がエンジニアとして働いていくうえで必要な最低限度のプログラミング能力を最速で身に着けることを目指しています。
特定の技術に特化した解説はしません。
使用言語はPythonです。もしも他の言語や特定の技術について調べている方は、別の記事を探しに行くことをお勧めします。
記事を書いている人
都内でエンジニアとして10年ほど働いている人です。
仕事の中で未経験者に教える機会があったので、せっかくだから再利用できるように記事にしています。
学習ロードマップ
学習は以下のような流れで進めていく想定です。第3回である今回は『3.思い浮かべた処理をPythonでひとりで書けるようになる』について解説していきます。
第2回はこちら。
注意事項
最近はAIを使ったプログラミングが当たり前になりつつありますが、あなた自身がプログラミングできるようになることを目的としている場合、練習問題の中でAIは使わないでください。
Pythonの書き方についてざっくり解説
前回のプログラミング的思考の解説の中で、大きく3つの事実を紹介しました。
- 処理は入れ子構造である
- 条件によって分岐する処理がある
- 何度もくり返し現れる処理がある
なんのことだか分からない場合は第2回を復習してください。
これらのパターンは、そのままPythonのコードにすることができます。すべての基本となる記法なので、ここはもう暗記してください。
入れ子構造の処理=関数
プログラムの中で、処理のまとまりのことを一般的に関数と呼びます。英語ならFunction、あるいはメソッド(Method) などと呼ぶこともあります。全部同じものだと考えて問題はありません。ここでは関数と呼ぶことにします。
処理の構造を思い出してください。
処理は開始状態から完了状態まで、何らかの状態を変化させます。これはPythonでは以下のように書くことができます。
def 処理(開始状態):
完了状態 = 開始状態に何らかの操作を加えて変化させたもの
return 完了状態
簡単な例を書きます。開始状態と完了状態はなんらかの整数で、開始状態を2倍した整数を完了状態とするような関数を以下に例示します。
def get_double_number(x: int) -> int:
"""入力された整数を2倍にして返す
Args:
x (int): 入力された整数
Returns
int: 入力値を2倍にした整数
"""
y = x * 2
return y
このコードは図にするとこんな感じです。思っていたよりも簡単ですか?
ところで今の例の関数は入れ子構造になっていません。入れ子構造ということは、以下のように処理の中で別の処理をするということです。
これはこんな感じで書くことができます。
def 親処理(開始状態):
途中状態 = 子処理A(開始状態)
完了状態 = 子処理B(途中経過)
return 完了状態
def 子処理A(開始状態):
完了状態 = 開始状態に何らかの操作を加えて変化させたもの
return 完了状態
def 子処理B(開始状態):
完了状態 = 開始状態に何らかの操作を加えて変化させたもの
return 完了状態
条件分岐 = if文
早速ですが具体例から入ります。
def is_x_positive(x: int) -> None:
"""xが正の数か負の数かを判定して結果を画面に表示する
Args:
x (int): 判定する整数
Returns:
None
"""
if x > 0: # xが0より大きい場合
print("x is a positive number!")
elif x < 0: # 上の条件に当てはまらず、xが0より小さい場合(省略可)
print("x is a negative number!")
else: # 上のいずれの条件にも当てはまらなかった場合
print("x equals zero!")
xと0を不等号で比較した結果によって分岐させています。このような条件分岐を書くための文をif文と呼びます。上にある条件から順番に評価されることに注意してください。
これは以下のような条件分岐を表しています。
くり返し処理 = for文, while文
くり返し処理が輝く代表的な場面といえば、多くの値に対して同じ処理を行いたいような場面です。くり返し処理は短いプログラムでたくさんの処理を実行できて便利な反面、注意しないと無限ループを引き起こす可能性があります。無限ループを避けるために必要なのは停止条件です。
まずは比較的安全なfor文から見ていきましょう。for文は主にくり返したい回数が事前に決まっている場合に適している書き方です。
Pythonにおけるfor文は次のように書きます。
for 値 in リスト:
値に関する処理
# 具体例
for x in [0, 1, 2, 3, 4]: # 値のリストの任意の要素をxとして
print(x) # xの値を画面に出力
# 上記はこんな風にも書ける
for x in range(5):
print(x)
図で表すとこうなります。
for文ではリストの要素をひとつひとつ順番に処理していくことができます。リストの長さが無限大であることはまれなので無限ループの可能性は比較的低いですが、それでも注意は必要なことには変わりありません。
次はwhile文です。while文はいつ終わるかが不明だが、条件を満たしている限りはずっとくり返したい場合に適している書き方となります。「条件を満たしている限りは」というのが厄介で、よく無限ループの原因になるので、停止条件が誤っていないかは慎重に検証しましょう。
while文の書き方は以下の通りです。
while 条件:
処理
# 具体例
while x > 0: # xが0よりも大きい間
x = x - 1 # xの値を1ずつ小さくしていく
# 以下の例は無限ループする
while x > 0: # xが0よりも大きい間
x = x + 1 # xの値を1ずつ大きくしていく
図で表すとこうなります。
その他覚えておきたい書き方
この辺ももうおまじないとして覚えてください。
-
Pythonプログラムの入り口
プログラムを実行した際に一番最初に実行される場所です。厳密には違いますが、正確な説明はここでは割愛します。興味があれば調べてみてください。if __name__ == "__main__": 関数を呼ぶなどの処理
このおまじないは、多くの場合ファイルの一番下に書かれます。
-
画面出力
画面に何かを表示したい場合、もっとも簡単なのはprint文を使うことです。print("何か出力したい内容")
練習問題
次の数列のルールに従って、次に来る数を答える関数を作成してください。
また作成した関数を使って、以下の数列の続きを10個分画面に表示させてください。
2 → 4 → 8 → 16 → ?
ヒント:
- Pythonを実行するための環境は、Paizaを使うと楽です。
- 書き始める際には、以下のテンプレートを使用してみてください。
def main(): # ここに処理を書く # ここから下はおまじない if __name__ == "__main__": main()
次回予告
第4回では、複数人で開発するために知っておくべきGitについて解説します。
https://qiita.com/sho-gun/items/b6143d94d7983cbc773a