この講座では、プログラミングが全く初めての方でも安心してPythonの基本を学べるように、一緒に手を動かしながら進めていきます。 まずは、Pythonの基本的な「書き方」から学んでいきましょう。
Pythonの基本
まずは、Pythonの基本的な書き方をみていきましょう。お試しの処理として、print()関数を使って画面に文字を表示してみましょう。
これを実行すると「Hello, world!」と文字が表示されます。ポイントとしては、
- print(): 画面に文字や数字などを表示する命令です。
- "Hello, world!": ""(ダブルクォーテーション)で囲まれた部分は文字列と呼ばれ、文字の並びとして扱われます。
また、コメントアウトでメモを残すこともできます。
プログラムにメモや説明を書きたいときは、# を使ってコメントを書くことができます。#以降の文字はプログラムとして実行されません。
変数とデータ型を学ぶ
プログラミングの超基礎的な概念である変数。変数は、数値や文字などの値を入れられる領域でわかりやすくいうとデータを入れる箱です。 また、変数を使う時によく出てくる言葉もあるのでそれも覚えておきましょう。
- 宣言: こんな変数を使うよ!というアピールすること
- 初期化(定義): 宣言と同時に初期データを設定すること
- 代入: 変数の中身を更新すること
Pythonでは変数は以下のように宣言、初期化、代入します。
このように、JavaScriptの時と違いletやvarを付ける必要なく扱うことができます。扱えるデータの種類はJSの時とほぼ同じで、
といったように様々なデータを入れてもOKです。 ※Pythonでは、「太郎」といった文字列を扱う際はダブルクォーテーション(") でもシングルクォーテーション(') どちらでもOKです。 ※Pythonでは、「True」や「False」は基本大文字始まりで書きます。
さて、「変数はデータを入れておく箱」というイメージを持てたところで、入れるデータの型(種類)についても紹介します。変数に入れることができるデータは様々あり、主に以下のようなものがあります。
- 数値(int,float)
- 文字列(str)
- 論理(bool)
- None
先ほど出てきた、nameは文字列型、ageは数値型、isStudentは論理型です。
ひとつ注意点があります。JSではデータがないものをNullとなっていましたが、PythonではNullではなくNoneとなります。
また、リストというものを使うと複数のデータをまとめて管理することができます。
たくさんの名前をひとつの変数で管理したい場合、リストを使うと便利です。リストは [](角括弧)でデータを囲み、,(カンマ)で区切って書きます。
さらに、リストの個々のデータにアクセスするには、インデックスというものを使います。インデックスはいわば「場所」のようなもので「先頭から何番目か」を表す番号です。注意点として一番先頭は 0 から始まります。
いろいろな演算子を学ぶ
超基礎的な概念である演算子。算数的な計算で使う演算子(+や-とか)や、二つのデータを比較するのに使う比較演算子、「AかつB」のような数学の「集合、命題」の時に使った論理演算子をプログラミングでもよく使います。それぞれみていきましょう。
算数的な計算で使う演算子(算術演算子)は以下のように使います。
基本的な四則演算で使います。使い方は算数とほぼ同じです。他にも乗数や余りの計算もできますが今回は割愛します。
また、変数への代入の場合はa = a + 3をa += 3のように省略して書くことができます。
※JSで使うことのできたa++,a--はPythonでは使えないので気を付けてください。
比較演算子は、2つの値を比較して論理値(trueまたはfalse)を出す時に使います。
それぞれ解説します。まず==は、二つの値が等しいときはtrueになり、等しくないときはfalseになります。
二つの値を比較する>では、左側が右より大きければtrueになり、それ以外はfalseとなります。<を使った場合はその逆です。
似たようなもので>=は、左側が右以上(右の値を含む)ならtrue、それ以外はfalseとなります。<=を使った場合はその逆です。
例えば、x < 5の場合は「xは5より小さい(5未満)か」なのでfalseとなりますが、x <= 5は「xは5以下か」なのでtrueとなります。
※==と似たようなものでisがあります。これは二つのオブジェクトのインスタンスが同一かどうかをチェックします。この部分は難しいので別の講座で解説します。
論理演算子は、論理値を操作するために使います。
それぞれ解説します。AND条件にしたい(両方trueでないとtrueにならない)場合はandを使います。これによりAND条件の判定をすることができます。
OR条件にしたい(どちらかがtrueならtrueになる)場合はorを使います。NOT条件(論理値の逆転)をしたい場合は、その論理値の前にnotを置きます。似たようなもので比較演算子で「xとyが等しくないとき」としたいときは、not x == yとします。
この部分はイメージ的に英語の文法そのものととらえてOKです。
また、今回は変数のみで論理演算子を使いましたが、実際は比較したものに対して論理演算子を使用します。具体的にAND条件でいうと
このように「xが3以上かつ10未満か?」という複合した比較をする際に使用します。細かい使い方は次の制御構文の章で解説します。 これらの使い道としては、算術演算子は数値などのデータの四則演算に、比較演算子と論理演算子は変数などの中身によって処理を変えるために使います。
制御構文を学ぶ
超基礎的な概念、制御構文を解説します。制御構文は、プログラムの実行内容を制御するための構文です。Pythonでは、条件分岐(if文、match文)とループ(for文、while文)などがあります。
if文は、条件に基づいて異なるコードを実行するために使います。先ほどの変数xを使って、
このようにif文を書くことができます。
コロン(:)以下のインデントを一つ下げ、そこに実行したい処理を書くことで条件によって処理を出しわけることができます。
内容としては下の図のように、
・xが3以上、10未満なら、「3以上、10未満です」と出力する(水色)
・それ以外で5より大きい場合(実質的には10以上)なら、「5より大きいです」と出力する(濃い赤)
・それ以外なら「それ以外」と出力する(黄緑)
今回は「3以上、10未満です」が表示されますね。
試しに、if文の直前でxを違う値にして(違う値を代入)してみましょう。
こうすると「5より大きいです」と表示されるはずです。他にもいろいろとxに代入して試してみましょう。
このようにif(条件式(論理値でも可)): ~と書き、その論理値がtrueならそのコロン( : )以下の処理を実施します。elif(条件式): ~は、それ以外でかつ論理値がtrueならそのコロン( : )以下の処理を実施します。もちろん、elifは複数書くこともできます。最後のelse: ~は、全ての条件式に当てはまらなかったときに実施します。ざっくりですが、こんな書き方をすることもできます。
match文は、いろいろな条件をピッタリ合うものと比較し、一致した時だけ特定の操作をすることができます。これにより、多くの「もし〜の場合」といった複雑な条件分岐を簡単に書けるようになります。よく使うのは「たくさんの選択肢の中から選ぶ」時の処理とかで役立ちます。 match文は以下のような仕組みになっています。
このように「特定の対象」に対して合致したパターンでの処理のみを行うことができます。例として、
というように調べたい対象がどんなものか、case ~に一致すればその処理を、すべて一致しなければcase _での処理が実行されます。
※対象には、変数のほかにも条件式やオブジェクトを入れたり、リストを使ってマッチングすることができます。(詳しくは応用の講座で)
for文は、一定の回数だけループさせる時に使います。何回も繰り返し処理を実行したりする時に使います。例えば、「1~3の数字を出力して」は以下のように書くことができます。
では、「1~100の数字を出力して」だとちょっと面倒ですね。素直にconsole.log(1)からconsole.log(100)を書けばできますが大変です。そんな時に使うのがこの繰り返し(ループ)であるfor文です。for文でやった例は以下です。
たった2行で1~100の数字を出力できます。どうなっているか解説すると「用意された「1~100」の数字を頭から順に変数iに入れ、それをprint(i)する」ということを繰り返しています。もっと詳しくすると、for文の構造は、
となっていて今回の場合は、
range(1, 101)で1から100(101じゃない)までの整数の連続した値- for文内でのみ使える変数
iを定義 - 連続値の頭を
iへ代入 ~処理~の処理を実行- 次の
iへ更新
といったことをしています。このようにして繰り返し処理をしていきます。 並んでるデータには連続した値を指定すればよいので、文字列を入れると一文字ずつ処理することができます。他にも配列を指定すれば、配列の各要素ごとに処理することができます。
似たようなもので、while文というものがあります。こちらは条件がtrueの間、永遠にループさせる時に使います。先ほどの「1~100の数字を出力して」をwhile文で書くと以下のようになります。
これは、
- 変数
iを用意 - whileの条件(今回でいうと
i <= 100)を満たせば中の処理を実行 - while内の処理を実行
- whileの条件を満たしていれば上から再実行
ということをしています。forとは動作や状況は少し異なり、以下の違いがあります。
- while文内のみの変数を定義する場所は決まってない
- データの更新はwhile文内どこでもおける
そのため、以下のようにしても同じように「1~100の数字を出力して」ができます。
このように、繰り返しに関係するデータをいつでも変更できる自由度が高いのがwhileです。注意点としては、今回でいうi+=1のような繰り返しに関するデータの更新部分を書き忘れると、繰り返す条件i < 100が永遠にtrueのままになるため、処理が永遠に実行されてしまいます。無限ループといわれる現象です。
こうならないために、繰り返し文を書く際はちゃんと終わることを確認しながらやりましょう。
※無限ループを起こした場合、プログラムを切断・終了させて再度開けばOKです。
関数を学ぶ
関数(ファンクション) は、特定の処理をひとまとめにして名前をつけ、必要なときに何度でも呼び出して使うことができるものです。
・関数を使うメリット
- 再利用性: 同じ処理を何度も書く手間が省けます。
- 可読性: 処理に名前をつけることで、コードが何をしているのか分かりやすくなります。
- 保守性: 処理内容を変更したいときに、一箇所だけ直すだけでよくなります。
関数の書き方
Pythonの関数は以下のようにして書きます。
- def:これは「今から関数を定義しますよ!」というおまじないです。
- hello:これが関数の名前です。自由に名前をつけられますが、どんな処理をする関数なのか分かりやすい名前をつけましょう。
- ():関数の名前の後に続く丸括弧です。ここに引数(ひきすう) と呼ばれるデータを入れることがあります。なくてもOKです。
- ::このコロン(
:)よりインデントが下の場所に関数が実行する処理(処理ブロック)を書きます。もちろん複数行書くことも可能です。
引数って何?戻り値とは?
関数には、外部からデータを受け取ったり、処理結果を返したりする機能もあります。
- 引数(ひきすう): 関数に渡すデータのことです。丸括弧の中に書きます。
- 戻り値(もどりち): 関数が処理を終えた後、呼び出し元に返す(渡す)結果のことです。returnというキーワードを使います。
このようにして処理をまとめておいて汎用的に管理したい時に関数を使うと便利になります。 例えばカレーつくりという調理工程を、
のように関数を用意することで、
と実装することができます。
さらに、関数: 食材切るの処理を間違えて「微塵切り」と書いてしまったが本当は「ざく切り」だった時、この食材切る関数の中の処理だけ直せば
- 玉ねぎ
- にんじん
- ジャガイモ
- 肉
全てに適用される! というように関数を使うことでメンテナンスしやすい実装にすることができます。
まとめ
この講座で、Pythonの基礎を学ぶことができました。変数、データ型、演算子、制御構文、関数といった基本的な概念を理解することで、システムチックなプログラミングへの第一歩を踏み出すことができました。これからは、これらの知識を基により高度なPythonの機能や実践的なコーディングテクニックを学んでいきましょう。