初心者でもできるPython入門 – はじめての学習まとめ

いろいろな分野で活用されているPythonをはじめよう!

Pythonとは

Pythonはオブジェクト指向のプログラミング言語で、様々な分野で活用されています。プログラムのコードがシンプルで覚えやすいプログラミング言語として知られています。最近ではIoTや機械学習(AI)、ディープラーニングといった分野でもPythonを使う人が増えてきています。ライブラリが充実しているのも魅力で、多くのライブラリは無料で利用でき、ソフトウェアを効率よく開発できます。

Pythonのバージョン

Pythonは現在(2017年時点)はバージョン3が最新版なのですが、バージョン2から3に上がる段階で後方互換性が無くなってしまいました。つまり、Python2のコーディングルールに従って書かれたプログラムはPython3で動かないことがあります。逆に、Python3のコーティングルールに従って書かれたプログラムはPython2で動かないことがあります。どちらのバージョンを学習すべきかということですが、Python3を優先的に学習したほうがいいかと思います。というのは、Python2のサポートは2020年までとされているので、数年のうちにPython2で書いたプログラムもPython3で動作するように変更する必要があります。Python3を学習してからPython2の違いを学んで変更できるようにしたほうが良いでしょう。

Pythonの動作環境

使用しているパソコンがWindowsの場合は、Pythonをインストールする必要があります。macOSの場合はPython2.xがすでにインストールされていると思います。バージョンの確認は以下のコマンドで行います。

$ python --version

Pythonも他の言語と同じく、動作確認サイトを使えばサイト内に直接プログラムを記述して動作確認できます。この場合はパソコンにPythonをインストールしなくとも動作確認ができます。動作確認サイトとしてはcodinggroundやideoneなどのサイトでPythonが使えますが、Pythonの場合は「Jupyter Notebook」が利用できる「tmpnb 」サイトをおすすめします。「Jypter Notebook」はプログラムを実行し、実行結果を記録しながら学習できるツールです。簡単に記録も確認できるので、学習結果も振り返ることができるのでおすすめのツールです。後ほどJypter Notebookの使い方を簡単に説明します。尚、ここではよりPythonに馴染めるようにPythonのインストール方法も紹介します。すでにPythonを実行できる状態にある人はインストールをスキップして「Pythonの実行」へ読み進めてください。

Pythonのインストール

まずは本家サイトで配布されているPythonのインストールを紹介します。本家サイトからダウンロード します。Python2かPython3を選んでダウンロードします。

Windowsの場合はexeファイルを実行、macOSの場合はpkgファイルを実行してインストールします。特に設定することもなく指示に従って進めるとインストールが完了します。

Python on Windows

本家のWindows版Python3はインストールはじめの画面でPATH環境変数を設定するため「Add Python 3.6 to PATH」にチェックを入れてインストールを始めます。

Python2はPATH環境変数を自分で設定する必要があるのでインストール後に設定しましょう。(デフォルト:”C:\Python27″)

インストールが完了したらコマンドプロンプトで確認しましょう。

C:¥Users¥hogehoge>python --version

尚、WindowsではPython2とPython3の2つをインストールすると別々の場所にインストールするのですが、同じコマンド名が重なってしまいます。以下でコマンドの場所を見てみると、

>where python
C:¥Python27¥python.exe
C:¥Users¥hogehoge¥AppData¥Local¥Programs¥Python¥Python36-32¥python.exe

といった感じで2つのPathが同時に表示されます。この場合はシンボリックリンクで”python2″や”python3″など違うコマンド名でそれぞれのコマンドを実行するようにすればいいでしょう。

Python on Mac

本家のMac版はPython2とPython3はそれぞれ違う場所にインストールされ、コマンド名も異なります。Python3はコマンド名”python3″とインストールされます。インストール完了したら以下でコマンドの場所を見てみると、

$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
$ which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

といった感じでそれぞれのコマンドの場所を見ることができます。実行したいバージョンごとにコメンド名を変えて実行します。

MacでHomebrewを使ったインストール

HomebrewはmacOS用のパッケージ管理システムです。いろいろなコマンドラインツールを簡単にインストール管理できるシステムです。Ubuntuの”apt-get”と同じようなものです。HomebrewをインストールするにはXcodeのCommand Line Toolsが必要です。現在はApp StoreからXcodeをインストールすると自動的にCommand Line Toolsもインストールされます。

Command Line Toolsがインストールされていれば以下のコマンドでPATHを表示します。

$ xcode-select --print-path

以下のように表示されると思います。

/Applications/Xcode.app/Contents/Developer

もしCommand Line Toolsがインストールされていなければ、以下のコマンドを使ってインストールします。

$ xcode-select --install

XcodeとCommand Line Toolsをインストールしたら、Homebrewのサイト へ行き画面にあるスクリプトをターミナルに貼り付けて実行します。するとHomebrewがインストールされます。

インストールには数分かかります。完了したら以下のコマンドでHomebrewに問題がないかチェックしてください。

$ brew doctor

もしWarningなど出た場合は解消しておくことをおすすめします。ちなみに本家のPythonをインストールしているとHomebrewはWarningを出します。これはどのPythonがインストールされているのか混乱するよという警告です。本家のPythonが入っている場合は、Homebrewではインストールしないかもしくは、Homebrewを使ってインストールする場合は本家のPythonは入れないようにしましょう。

Homebrewを使ってPython2をインストールするには以下のようにコマンドを実行します。

$ brew install python

Python3をインストールするには「python3」を指定して上記コマンドを実行します。HomebrewでPython2をインストールすると、コマンド名は「python2」とインストールされます。以下のコマンドで場所を確認しましょう。

$ which python2

“/usr/local/bin”となっていればHomebrewでインストールしたPython2が実行されます。

インターネットでPythonについて検索すると「Anaconda」や「pyenv, virtualenv, venv」といった言葉をよく目にします。Pythonは目的によって様々なライブラリが使用されます。「Anaconda」は複数のライブラリが同梱された便利なパッケージです。これによってライブラリ1つ1つを手動でインストールする必要がなくなります。「pyenv, virtualenv, venv」は使用するPython環境の切替を容易にするものと思ってください。様々あるライブラリとPython2とPython3の環境が混在しているとうまく動作しないなど、1つのシステムで複数のPython環境を使う必要のある場合に便利なツールです。Mac/LinuxでPythonを使っていくと利用する機会もでてくると思いますが、Pythonを学習する目的には必須ではありません。また、Windowsにおいては公式のインストールを行えば、ほとんどの場合でそのパッケージが他の環境に影響することなく使えるかと思いますので、環境切替ツールを使う機会はほとんどないかと思います。

Jupyter Notebookの使い方

Jupyter NotebookはAnacondaをインストールするとすぐに使えます。pipを使って個別にインストールすることもできます。pipでインストールするには以下のコマンドを入力します。

pipを最新のものに更新してからJupyterをインストールします。

$ pip install --upgrade pip
$ pip install jupyter

インストールしたらコマンドを入力するとデフォルトブラウザが起動してJupyter Nootbookの画面が表示されます。

$ jupyter nootbook

最初に表示した画面を出発点にいろいろな操作をします。

Jupyter Notebook上で作成したPythonプログラムと実行結果はNotebookファイルに保存されます。Pythonプログラムを作成し実行するには、まずNotebook(拡張子.ipynbファイル)を作成します。画面右上の「新規ファイル作成メニュー」から「Pyhon3」を選択して新規Notebookを作成します。

するとPythonコードを入力する画面が表示されます。Pythonコードはセル(Cell)と呼ばれる入力フォーム入力します。

試しにprint関数を入力してみましょう。以下のコードを入力してみてください。

print("Hello World")

入力したコードを実行させるには、「Shift + Return」キーを押すか画面上部のツールバーにある実行ボタンを押して実行します。

するとセルのすぐ下に実行結果が表示されます。

ここで書いたPythonコードと実行結果はこのNotebookに保存されます。新規で作成した時にはUntitledとなっているので名前を付けて保存してください。またNotebookを終了する時は、Fileメニューにある「Close and Halt」を選択します。これを選択せずにブラウザを終了してしまうとシステムの裏でPythonが実行中となってしまうので気をつけてください。

Pythonの実行

Pythonは他のスクリプト言語と同じくインタプリタ上で実行するプログラムです。Pythonプログラムもコードをファイルにして実行できます。例えば、sample.pyというファイルにコードを記述して、

$ python sample.py

とコマンドを入力することで実行できます。また、Pythonはインタラクティブシェル(対話型シェル)という機能があり、プログラムをファイルに書き込まなくともキーボードで入力することで実行できます。”python”をターミナルやコマンドプロンプトで入力すると”>>>”が画面に表示されてPythonプログラム入力モードになります。

例)Macで実行
$ python
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 12:01:12)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

上記のように「python sample.py」と入力してプログラム実行する他に、スクリプトファイル名をコマンドのように直接入力してプログラム実行する方法もあります。これは「Shebang(シバン)」といって、ファイルの先頭に「#!/usr/bin/env python」のように記述することで直接実行することができるようになります。例えば上記の場合sample.pyファイルの先頭に記述することで、「./sample.py」と入力して実行することができます。以下に説明はありますがPythonの行コメントは先頭に「#」と記述します。ですが、シバンは通常のコメントではなく意味のあるコメントとなります。この場合は「”/usr/bin/evn python”を使ってこのファイルを実行する」という意味になります。

また、意味のあるコメントとしてはもう1つ「# coding: utf-8」というものがあります。これはファイルがUTF-8で記述されていると宣言するためのコメント行となります。シバンと同じくファイルの先頭、もしくはシバンに続いて2行目に記述します。「# coding:」に続いて文字コードを記述します。例えばファイルがShift JISで記述されていると「# coding: shift_jis」と記述します。ですが、Pythonのデフォルト文字コードはUTF-8とされているので、基本的にはUTF-8でファイルを作成します。特にプログラムで日本語を使う場合はこのコメントを記述します。

print(“こんにちは”)

“こんにちは”を表示するプログラムですが、ファイルに「# coding: utf-8」がなく実行するとエラーとなります。

記述方法と特徴

Pythonは他のプログラム言語よりも予約語が少なくシンプルに作られている特徴があります。予約語とはプログラミング言語が独自に持っている単語のことで、”if”や”for”のようにプログラムの基本機能として使う単語で、これらは変数名や関数名のような識別子としては使えません。予約語が少ないということは、覚えるべき独自の単語が少ないということになります。記述方法もシンプルなだけに、プログラミング言語をはじめて学習するのがPythonの場合は違和感がないのですが、他のプログラミング言語を学習した後にPythonを学習すると少し戸惑うこともあるかもしれません。変数や条件文などの基本的なものの考え方は同じですが、プログラムの記述方法が少し異なります。例えば、変数は変数宣言や型宣言はいりません。各行の実行文の最後に”;”を記述する必要がありません。各種条件文の実行文が複数あっても”{}”で括る必要はありません。条件文の場合、これだとどこからどこまでが条件文の処理なのか分からないと思われる方もいるかと思います。Pythonはこれらをインデントで識別します。例えばif文の場合、

if a == b:
  実行文1
  実行文2
次の処理
・・・

といったように、if文の条件に当てはまる処理はif文内でインデントされた実行文1,2となります。Pythonではインデントはプログラミングの重要な要素となります。また正しいPythonのインデントはスペース(空白文字)4文字と決められています。

各種プログラミング言語を記述する際に、インデントを使ってプログラムが読みやすいように整形します。特に関数や条件文ではインデントを下げて見やすく記述します。インデントする時は2種類の文字(タブ文字と空白文字)のどちらかを使います。どちらの文字を使うかや、空白文字のいくつ分をインデントとするかのルールは製品やサービスの開発会社により決められていることが多いです。趣味など個人的にプログラムを書く場合は自分のわかりやすい方法を選択すれば良いかと思います。この件について何がベストかは、C言語が普及されて以来ずっと議論されています。

Pythonプログラム

まずはインタラクティブシェルを使ってPythonを実行しながらプログラムを見ていきたいと思います。

print関数を使って文字列を表示してみましょう。インタラクティブシェルに以下のように記述して”Hello World”を表示させてみてください。

>>> print("Hello World")

リターンキーを押すと下にHello Worldが表示されたと思います。文字列はダブルクォーテーション(“)もしくはシングルクォーテーション(‘)のどちらかで囲みます。Pythonではどちらで囲んでも違いはありません。

変数

変数を使って文字列を表示してみましょう。まずは変数に”Hello World”を代入します。

>>> val = "Hello World"

その後、変数を使ってprint関数を記述します。

>>> print(val)

リターンキーを押すと下にHello Worldが表示されたと思います。

Pythonの変数はデータ型を指定した宣言をせず、変数は入力した値によって型が決まります。クォーテーションマークで囲んだ値を入力すると文字列になり、整数を入力すると整数、少数を入力すると浮動小数点数、真偽値を入力するとBool型といったようになります。

クォーテーションマークを3つ並べて(“””もしくは”’)文字列を囲むと、改行も含めて定義することができます。例えば、

val = “””今日はよく晴れていますが

明日は雨が降るようなので

傘を持って出かけましょう。”””

また、こういった性質のためこれはコメントとして使われることが多いです。Pythonプログラムをファイルに記述するときは、プログラムの説明にこういったコメントを記述することが多いです。

”’これは複数行の

コメントです。”’

そして、Pythonも他の言語と同様に行コメントも記述することができます。「#」が記述されればその行の「#」以降はコメントとなります。

# これは行コメントです。

変数に整数を入力して表示してみましょう。

>>> val = 8
>>> print(val)

リターンキーを押すと下に8が表示されたと思います。表示された8を見るとわかりませんが、8をクォーテーションマークで囲むと文字列になります。(val = "8"

四則演算をしてみましょう。変数に数値を計算した結果を入力してprint関数で表示させます。

>>> val = 1+2+3+4
>>> print(val)

実行した結果は10が表示されたと思います。以下の計算も結果は10になります。

>>> val = (2*3)+(4*1)
>>> print(val)

Pythonで使える基本的な演算子は他のプログラミング言語と同じですが、Pythonにはインクリメント(++)とデクリメント(–)演算子がありません。

文字列も足し算をして連結することができます。

>>> str_1 = "He"
>>> str_2 = "llo"
>>> aisatsu = str_1 + str_2
>>> print(aisatsu)

print関数を実行するとHelloが表示されたと思います。また、複合演算子を使うこともできます。

>>> aisatsu += " World"
>>> print(aisatsu)

実行するとHello Worldが表示されたと思います。

Pythonは変数が同じ型であれば問題なく演算できますが、型が異なるとエラーになります。例えば、以下のように書くとエラーになります。

>>> val = 100
>>> cm = "センチ"
>>> len = val + cm
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

「100センチ」という文字列を変数に代入したいときは連結する変数を文字列型に合わせる必要があります。

>>> val = "100"
>>> cm = "センチ"
>>> len = val + cm
>>> print(len)

これで「100センチ」と表示されたかと思います。

上記で説明したようにPythonの変数は入力した値によって型が決まりますが、その変数がどのような型なのかを明確に意識してプログラミングしましょう。

プログラミングしていると数値で扱っているものを文字として表示したいとか、またはその逆をしたいときもあるかと思います。そのような時は、違う変数の型を変換することで型を合わせることができます。例えば、「100センチ」と表示したいが、100は数値でセンチは文字列として扱っている場合はその状態のまま変数同士を足し算するとエラーになるので型を変換します。

>>> val = 100
>>> str_val = str(val)
>>> cm = "センチ"
>>> len = str_val + cm
>>> print(len)

こうすることで「100センチ」と表示されます。

文字列を数値に変換するには、int()やfloat()を使います。

>>> int("100")
>>> float("3.14")

演算子

変数に格納されている値を計算したり、期待通りの値かどうかを評価したり、または文字列を連結したり、関数の結果を評価するときに使われます。

加減算

“+”, “-“

乗算

“*”

除算

“/”

剰余算

“%”

等号

“==”

不等号

“!=”

比較

“>=”, “<=”, “>”, “<“

論理積

“and”

論理和

“or”

否定

“not”

用例と説明

【加減算、乗算、除算】

足し算”+”、引き算”-“、掛け算”*”、割り算”/”を行うときの演算子です。

a = 4 + 3 // aの結果は7です。
hello = "Hello" + " World" // helloに"Hello World"が代入されます。

【剰余算】

割り算したときの余りを求める演算子”%”です。

a = 7 % 3 // aの結果は1(ture)です。
b = i % 3 // この例は、bの結果が0の場合はiは3で割り切れる値なので、iは3の倍数であることがわかります。

【インクリメント、デクリメント】

※Pythonにはインクリメントとデクリメントはありません。

【等号、不等号、比較】

値を比較するときの演算子です。同じかどうか比較する場合は”==”、同じではないことを比較する場合は”!=”、大きさを比較する場合は”>=”, “<=”, “>”, “<“を使います。条件文とともに使います。

if x == y: // xとyが等しければ実行します。
if x != y: // xとyが等しくなければ実行します。

比較の判定は「真偽値」で行います。つまり「x == y」が成立するときは「真(true)」、そうでなければ「偽(false)」という値となります。これはどのプログラミング言語でも必ず登場するので知っておきましょう。関数の戻り値として型定義されていることも多く、プログラミング言語によっては「boolean型」として明確に型定義をします。例えば、isActive(引数)といった関数があるとして、この関数では(引数)で渡されたものが有効かどうか?を判定する処理を行い、戻り値として真(true)か偽(false)を返します。関数ではこうやって利用されることが多いです。

if x >= y: // xがy以上であれば実行します。
if x < y: // xがyより小さいときに"Hello World"を表示します。
  print("Hello World")

【論理積、論理和、否定】

これは条件をより簡潔に表現するのに使う演算子です。なので条件文とともに使われます。「〜かつ〜」であることを判定する場合は論理積” && “、「〜もしくは〜」であることを判定する場合は論理和”||”、「〜でない」ことを判定する場合は否定”!”を使います。

if x == 7 and y == 3: // xが7で、かつyが3であるときに実行します。
if x != 5) or y == 10: // xが5でないか、もしくはyが10のときに実行します。
if func() != 0: // func処理の結果がtrue(正)の場合に実行します。

true(真)とfalse(偽)は真偽値といって、ここでは処理結果が”1″ならばtrue(真)、”0″ならばfalse(偽)と理解しておくといいでしょう。上記の例の場合だと、「func処理結果が”0″以外ならば実行する」ということになります。「func処理結果がfalseである」ことを評価するには、if (func() == 0)と記述します。

Pythonでは以下のようなを真偽値として評価したときにtrue(真)となります。

  • 0以外の数値
  • 長さのある文字列
  • 要素を持つリストやタプル
  • 要素を持つディクショナリ

これら以外はfalse(偽)となります。

リスト

Pythonの配列であるリスト型を定義してみましょう。リストは角括弧([~])を使って定義します。角括弧の中に要素をカンマ(,)区切りで並べていきます。

[要素0, 要素1, 要素2, ・・・]

例えば色のリストを作成すると、

>>> color = ["white", "black", "red", "blue", "yellow"]

といった記述になります。

リストは他言語の配列と同じくインデックスが振られています。インデックスは0から始まります。上記のリストの場合は0~4のインデックスが割り振られています。リストの要素はインデックスを指定して取り出すことができます。

>>> pic = color[0]

この場合picに”white”が代入されます。

>>> pic = color[0] + " and " + color[4]
>>> print(pic)

こうすると”white and yellow”と表示されると思います。

リストは足し算して連結することができます。

>>> color2 = ["green", "brown", "purple", "pink"]
>>> total_color = color + color2
>>> print(total_color)

これで連結されたリストが表示されたかと思います。

リスト要素は置き換えることができます。colorリストの”yellow”を”gray”に置き換えてみましょう。

>>> color[4] = "gray"
>>> pic = color[0] + " and " + color[4]
>>> print(pic)

“white and gray”が表示されたかと思います。

リスト要素は削除することもできます。最初の要素である”white”を削除してみましょう。

>>> del color[0]

これで要素が削除されました。要素が削除されるとリストの要素が減り短くなります。それに合わせてインデックスも変わります。color[0]削除前のcolor[1]は”black”でしたが、削除後はcolor[0]は”black”になります。

>>> pic = color[0] + " and " + color[3]
>>> print(pic)

最初の要素を削除したので、これは”black and gray”と表示されたかと思います。

次にスライスを使って指定した複数要素を取り出してみましょう。スライスは角括弧の中にコロン(:)で区切ってインデックスを記述します。

リスト名[最初のインデックス:最後のインデックス+1]

例えば、color[1:3]と記述するとcolorリストの要素1から要素2までを取り出します。すこしややこしいのですが、取り出したい複数要素の最後を指定するときは「最後のインデックス+1 」で記述します。

>>> slice = color[1:3]
>>> print(slice)

この場合は[‘red’, ‘blue’]が表示されたかと思います。スライスした時はコピーが変数に代入されるので、もとのリストには影響しません。この場合colorリストは[‘black’, ‘red’, ‘blue’, ‘gray’]のままです。print(color)で確認してみてください。

またスライスは左右のインデックス記述を省略できます。

>>> slice = color[:2]
>>> print(slice)

この場合は[‘black’, ‘red’]が表示されたかと思います。

>>> slice = color[1:]
>>> print(slice)

この場合は[‘red’, ‘blue’, ‘gray’]が表示されたかと思います。

タプル

タプルはリストにとても似ています。タプルもリストと同じように、複数の要素を持ちインデックスを使って要素にアクセスできます。リストとの違いは「要素の変更ができない」ということだけです。

(要素0, 要素1, 要素2, ・・・)

例えば都道府県のタプルを作成すると、

>>> prefectures = ("Tokyo", "Osaka", "Kyoto", "Nagoya", "Fukuoka", "Hokkaido")

要素の取り出し方はリストと同じようにインデックスを指定します。

>>> trip = prefectures[0]
>>> print(trip)

Tokyoと表示されたかと思います。

タプルは要素の変更ができないので、置き換えや削除を行おうとするとエラーになります。

>>> del prefectures[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object
doesn't support item deletion

タプルはリストと同じく連結することはできます。

>>> shikoku = ("Tokushima", "Ehime", "Kochi", "Kagawa")
>>> prefectures += shikoku
>>> print(prefectures)

この場合(‘Tokyo’, ‘Osaka’, ‘Kyoto’, ‘Nagoya’, ‘Fukuoka’, ‘Hokkaido’, ‘Tokushima’, ‘Ehime’, ‘Kochi’, ‘Kagawa’)と表示されたかと思います。

ディクショナリ

リストやタプルでは要素にアクセスする際はcolor[0]のように整数のインデックスを使っていました。ディクショナリでは「キー」と呼ばれる識別子を使って要素にアクセスします。キーとはラベル名と考えてください。要素にアクセスする際にラベル名でアクセスできるわけです。書き方は以下になります。

{キー1:要素1, キー2:要素2, ・・・}

例えばくまモンのプロフィールをディクショナリで作成すると、

>>> kumamon = {'名前':'くまモン', '性別':'男の子', '出身地':'熊本県', '誕生日':'3月12日', '性格':'やんちゃで好奇心いっぱい'}

要素の取り出し方はインデックスではなく、キーを指定します。

>>> name = kumamon['名前']
>>> print(name)

「くまモン」と表示されたかと思います。

要素の変更もキーを指定します。

>>> kumamon['性格'] = 'やさしくて明るい'
>>> print(kumamon['性格'])

変更された内容が表示されたかと思います。

ディクショナリに要素を追加するときは、そのディクショナリに存在しないキーを使って要素を代入します。代入するだけで新しいキーと要素が追加されます。

>>> kumamon['お仕事'] = '公務員'
>>> print(kumamon)

これでkumamonディクショナリに「’お仕事’:’公務員’」が追加されたかと思います。

要素を削除するにはdel文を使います。削除したい要素のキーを指定します。

>>> del kumamon['性別']
>>> print(kumamon)

性別のキーと要素がディクショナリから削除されているかと思います。

条件文

Pythonの条件文にはif文があります。

if文

Pythonも他の言語と同じく条件に従って処理の内容を分ける条件分岐はif文で行います。if文は条件式がTrue(真)であれば以下のブロックを処理します。if文の書式は以下です。

if 条件式:
    条件によって実行するブロック

for文やwhile文と同じくif文の最後にコロン(:)を記述し、条件によって実行するブロックはif文より一段右にインデントします。

>>> val = 5
>>> if val > len([1,2,3,4]):
...     print("Hello!")
...

このコードを実行するとHello!と表示されたかと思います。

条件式は文字列を比較することもできます。

>>> if "ABC" == "ABC":
...     print("これはTrueです")
...

Pythonは大文字と小文字を区別します。以下はFalseとなります。

>>> if "ABC" == "abc":
...     print("これはTrueです")
... else:
...     print("これはFalseです")
...

この結果は「これはFalseです」と表示します。

elifを使うと複数の条件式を処理することもできます。

>>> if "ABC" == "abc":
...     print("これはTrueです")
... elif "あいう" == "あいう":
...     print("この漢字比較はTrueです")
... else:
...     print("これはFalseです")
...

この結果は「この漢字比較はTrueです」と表示します。また、in演算子を使って特定の文字列が含まれるかどうかを調べることもできます。

>>> if "def" in "ABCDEFGHIJKLMN":
...     print("文字列は含まれてません")
... elif "おかき" in "あいうえおかきくけこ"
...     print("文字列は含まれています")
...

この結果は「文字列は含まれています」と表示します。

繰り返し文

Pythonの繰り返し文にはfor文とwhile文があります。

for文

Pythonでリストやタプルのような複数の要素のあるデータ型をシーケンスといいます。シーケンスの要素を処理するときはよく繰り返し処理が利用されます。Pythonでも他のプログラミング言語と同じくfor文による繰り返し処理ができます。for文の書式は以下です。

for 繰り返し変数 in シーケンス:
    繰り返し処理するブロック

繰り返し変数とシーケンスの間に「in」を記述し、for文の行最後にコロン(:)を記述します。繰り返し処理する内容をfor文より一段右にインデントして繰り返し処理するコードを記述します。このようにインデントされた部分をブロックといいます。

Pythonではインデントを要求する場所では、直前に必ずコロン(:)を書くようになっています。後述するif文やwhile文も行の最後にコロンを記述し、その後の行に条件を満たした場合に処理をするブロックを一段右にインデントして記述します。

for文はシーケンスの要素を繰り返し変数に代入し、繰り返し処理するブロックのコードを実行します。

>>> color = ["white", "black", "red", "blue"]
>>> for val in color:
...    print(val)
...

リターンキーで実行すると、

white
black
red
blue

と表示されたかと思います。この場合はシーケンスの要素数だけ繰り返し処理を行います。繰り返し回数を指定して処理をしたい場合もあるかと思います。その場合は以下のように記述します。

>>> for num in range(5):
...    print(num)
...

リターンキーで実行すると、

0
1
2
3
4

と表示されたかと思います。この場合はrange()関数で指定された回数だけ繰り返し処理が実行されます。繰り返し変数numにはrange()関数で0から始まり5回実行して4で終わる数値を代入します。またrange()関数の引数で繰り返す範囲を特定することもできます。

>>> for num in range(2, 5):
...    print(num)
...

この場合の実行結果は、

2
3
4

と表示されます。range(2, 5)は2から4までを繰り返すことを指定しています。

while文

for文以外にwhile文でも繰り返し処理を書くことができます。for文との違いは繰り返し変数とシーケンスを定義しないところです。その代わりにwhile文は条件式を記述します。この条件式がTrue(真)である間は繰り返し処理を実行します。while文の書式は以下です。

while 条件式:
    繰り返し処理するブロック

for文と同じくwhile文の最後にコロン (:)を記述し、繰り返し処理するブロックはwhile文より一段右にインデントします。

>>> cnt = 1
>>> while cnt <= 5:
...     print(cnt)
...     cnt = cnt+1
...

この場合の実行結果は、

1
2
3
4
5

と表示されたかと思います。

 

それでは、これまでの条件分やprint関数を使ってFizzBuzz問題のプログラムを作ってみましょう。プログラムの行数が増えるのでJupyter Notebookを使うか、エディタで書いてみましょう。

FizzBuzz問題プログラム

FizzBuzzは海外の言葉遊びで、スタートして1から順に数字を発言していくのですが、3で割り切れる場合はFizz、5で割り切れる場合はBuzz、両方で割り切れる場合はFizzBuzzと発言します。これをプログラミングしてみましょう。Jupyter Notebookに書く場合は「https://tmpnb.org/ 」サイトにアクセスして準備しましょう。もしくはパソコンで実行する場合はエディタで書いてファイルにします。この場合は例えば、「python fizzbuzz.py」といったようなコマンド実行になります。

プログラム全体の動作を以下のようにします。

  • 1から順に100までカウントする
  • 数える数字を1行ずつ画面に表示する
  • 3で割り切れる数字のときは画面に「Fizz」を表示する
  • 5で割り切れる数字のときは画面に「Buzz」を表示する
  • 3と5で割り切れる数字のときは画面に「FizzBuzz」を表示する

for文を使って繰り返し処理を行うプログラムを考えてみましょう。数える数値を代入する変数を指定し、繰り返す回数をrenge()関数を使って指定します。

for count in range(1,101):

countという名前の変数にrange()関数で指定した、1から101まで数えた数字を順に代入します。range()関数は、引数を2つ渡すと特定の範囲を繰り返します。この場合は、1から101です。引数が1つだと0から繰り返します。例えば、range(100)にすると0から100繰り返します。FIzzBuzz問題は1から数えるのでrange(1,101)で100を数えてるのです。

次にそれぞれの表示条件を考えます。

3で割り切れるときは「Fizz」、5で割り切れるときは「Buzz」、両方で割り切れるときは「FizzBuzz」、それ以外は数字を表示するようにプログラムを追加します。

まずは3で割り切れるときの処理を追加します。以下の条件文を追加してみましょう。

for count in range(1,101):
    if count%3 == 0:

Pythonは中括弧({})を使わないので、インデントを忘れないようにしましょう。

「%」は割り切れると「0」、余りが発生すると「1」を返す演算子です。3で割り切れるかどうかを「==」で評価しています。3で割り切れる時は「Fizz」と表示されるようにします。それ以外は数字が表示されるようにします。

for count in range(1,101):
    if count%3 == 0:
        print("Fizz")
    else:
        print(count)

これで3の倍数のときには「Fizz」と表示されたでしょうか。次に、5で割り切れるときは「Buzz」と表示するプログラムを追加してみましょう。以下のプログラムを条件文に追加します。

elif count%5 == 0:

「elif」を使って条件を追加します。

for count in range(1,101):
    if count%3 == 0:
        print("Fizz")
    elif count%5 == 0:
        print("Buzz")
    else:
        print(count)

最後に両方で割り切れるときには「FizzBuzz」と表示するプログラムを追加します。両方で割り切れることを評価するために「and」演算子を使います。

if count%3 == 0 and count%5 == 0:

3で割り切れる場合と5で割り切れる場合はどちらも条件が重なりませんが、両方で割り切れるかどうかを評価する場合は条件が重なります。例えば、以下のようにプログラムを追加すると「FizzBuzz」は表示されません。

for count in range(1,101):
    if count%3 == 0:
        print("Fizz")
    elif count%5 == 0:
        print("Buzz")
    elif count%3 == 0 and count%5 == 0:
        print("FizzBuzz")

条件が重なっているので、これだと「(count % 3 === 0)」もしくは「(count % 5 === 0)」に条件が先に当てはまるので、「(count % 3 === 0 && count % 5 === 0)」の評価まで到達しません。

なので、「(count % 3 === 0 && count % 5 === 0)」の評価を最初にすることで期待通りの動作をします。

for count in range(1,101):
    if count%3 == 0 and count%5 == 0:
        print("FizzBuzz")
    elif count%3 == 0:
        print("Fizz")
    elif count%5 == 0:
        print("Buzz")

いかがでしたか?プログラムはパズルを組み立てたり、なぞなぞを解いたりするのに感覚的に似ていませんか?「はじめてのプログラミング」記事で少し触れましたが、パズルやなぞなぞが好きな人はプログラミングの習得が比較的速いかも知れません。プログラミングは試行錯誤したあとに完成させることで達成感があります。これをきっかけにPythonを学習してみよう!