Python入門

Pythonはちょっとした処理をするのにも向いているプログラミング言語。基礎文法や環境構築は容易なので初学者や教育機関にもオススメ。

Python公式サイト https://www.python.org/


  1. Python3を使う
  2. Python3のインストール
  3. Pythonの実行方法
  4. 標準出力 Hello, World!
  5. 標準入力
  6. エラー
  7. コメント
  8. スペースと改行
  9. インデントに意味あり
  10. コマンドライン引数
  11. 関数
  12. オブジェクト
  13. 変数
  14. 文字列
  15. 数値
  16. None
  17. 真偽値
  18. モジュールとパッケージ
  19. ライブラリ
  20. 条件分岐
  21. 繰り返し
  22. コンテナ
  23. ランダム
  24. ファイル操作
  25. Pythonスクリプト例を探すなら

Python3を使う

Pythonはバージョン2系と3系があるが、ここではPython3を前提とする。Python2のサポートは2020年までなので、Python3で始めよう。

後方互換性なし

Python3は後方互換性がなく、Python2前提コードの一部はPython3ではエラーになったり動作が変わったりする。基礎文法の中でも特に遭遇しそうな変化は、


Python3のインストール

Ubuntu16.04にはPython3がインストール済み。CentOS7なら、

詳しく…


Pythonの実行方法

プログラミングの作業は、「コーディング(コードを書く)→実行(プログラムを動かす)してみる」の繰り返し。テキストエディタと端末を使う。

  1. 対話モードで、ちょっとしたコードを入力の都度、実行。

  2. テキストエディタでコーディング完成済みのスクリプトファイルを実行。基本的にこっち。

    python3 スクリプトファイル.py

詳しく…


標準出力 Hello, World!

端末画面に文字列を表示(標準出力)するには、print関数を使う。

print("Hello, world!")

上記は「Hello, world!」と出力。


標準入力

端末画面へ文字列をキーボード入力し(標準入力)、それをプログラム側で受け取るには、input関数を使う。改行するまでの1行の文字列を受け取れる。

入力 = input()
print(入力)

上記は入力行を受け取って、そのまま出力。


エラー

プログラムの文法を間違ったまま実行すると、エラー表示が出る。

prin("Hello, world!")

「print」とすべきところを「prin」にしてしまった場合、

Traceback (most recent call last):
  File "hello.py", line 1, in <module>
    prin("Hello, world!")
NameError: name 'prin' is not defined

エラーが発生した行数や理由が表示される。


コメント

ソースコードの中には、プログラムの実行に関係しないコメント(メモ)を残すことができる。コメントは#から行末まで。

# この行はコメント
print("こんにちは") #から行末まではコメント、その前は実行される

スペースと改行

文法と文法の間はスペースや改行が入る。スペースと改行は基本的にいくつでもいい。下記はどれもエラーにならない。

print('a')  
print (     'a' )
print( 
    'a'
   )

以下はエラー。

print('a') print('b') # 改行しなきゃダメ
  print('a') # 文の始まりのスペースはPythonでは「インデント」として意味を持つ

インデントに意味あり

Pythonではインデント(行頭のいくつかのスペース)の有無が文法として意味を持ち、条件分岐繰り返しなどで使う。不要な行でインデントするとエラーとなる。スペースの数は任意。

インデントしたら、必要な処理が終わるまでインデントは揃えて行う。その揃ったまとまりをブロックという。

条件分岐などの開始
  インデントによって、ブロック開始
  : (途中にさらなるインデントで「ブロック中にブロック」も有り得る)
  ここまでがブロック
インデントの終りがその処理の終了を意味する

コマンドライン引数

プログラムを実行する際、ファイル名の後方に文字列(コマンドライン引数)を付加することにより、実行者がプログラムに情報を渡すことができる。引数が複数ならスペースを空けて、

python3 ファイル.py "引数1" "引数2" …

そのコマンドライン引数はプログラム側ではリストになっていて、これにアクセスするにはまずsysモジュールimportする。リストはインデックス(0からスタート)を用いてアクセスするが、0番には「実行しているファイルパス」が格納されていて、コマンドライン引数は1から順番にsys.argv[1]sys.argv[2]…というようにして参照する。

# sysモジュールをimport
import sys
print(sys.argv[0]) # これはファイルパス
print(sys.argv[1]) # 最初の引数

関数

ある特定の処理を行うプログラムの部品を関数といい、関数名()のようにして呼び出す。ごく基本的な機能や汎用性のある関数は標準ライブラリや外部ライブラリから利用できるが、無い場合は自作する。

関数名()
関数名(引数)
関数名(引数1, 引数2)

関数の作成

def 関数名(引数1, 引数2, …):
  処理
  return 戻り値
# インデントの終わりまでが定義の範囲

詳しく…


オブジェクト

プログラム中で生成している文字列や数値など個々のデータをオブジェクトという。例えばprint('こんにちは')の「'こんにちは'」の部分は文字列オブジェクト。基本的なものは次のとおり。


変数

生成したオブジェクトを使い捨てにせず、後で再利用する場合には、そのオブジェクトに変数で名前を付けておく。これを「変数にオブジェクトを代入する」と表現する。

代入

変数名 = オブジェクト

変数名に使える文字(識別子)は日本語や英数字、記号は_(アンダースコア)だけだが、数字から始まる名前にはできない。他に「class」などの予約語(文法となっている単語)も使えない。

# 生成した数値オブジェクトをxという名前の変数に代入。
x = 10
# 変数を使うと何度も再利用できる
print(x*x) # 100

Pythonでは実行時にデータ型(文字列や数値などオブジェクトの種類)が決まるので、他言語のような変数の型の宣言はしない。


文字列

文字列は"'で囲んで生成する。

挨拶  = 'こんにちは'
print(挨拶) # こんにちは

詳しく…


数値

数値として処理する場合は"'で囲まない。

print("2 * 2") # 文字列の「2 * 2」
print(2 * 2) # 計算結果の4

四則演算

加減乗除に使う記号
記号 意味 例(答えは4)
+ 足し算 1+3
- 引き算 5-1
* 掛け算 1*4
/ 割り算 8/2
// 割り算して小数点以下切り捨て 9//2
% 余り 9%5
** 累乗 2**2
() 計算をまとめる (3+5)/2

Python3の割り算は、割り切れても「1.0」のように小数点以下が表示される。それを切り捨てるには//を使う。

print(8/2) # 4.0
print(9//2) # 4

数値から文字列へ変換

数値はそのままでは文字列と連結できないので、文字列と合わせて出力したいなら、str関数で文字列に変換する。

print('今年は' + str(2016) + '年') # 今年は2016年

その他、組み込み関数に数値関連の関数がいくつかある。


None

Noneは何も値がないことを意味する値(オブジェクト)。

変数 = None

真偽値

真偽値True(真)かFalse(偽)のどちらかの値。条件分岐繰り返しなど、条件によってプログラムの動作を変えるときに使う。下記は真偽値の判定が行われる条件式の例。

比較演算子
記号 条件式の例 意味
== a == b aとbは等しい
!= a != b aとbは等しくない
< a < b aはbより小さい
< a <= b aはb以下
> a > b aはbより大きい
> a >= b aはb以上

詳しく…


モジュールとパッケージ

関数をいくつか定義して他から利用できるようにしたファイルをモジュールという。あるモジュールが上位モジュール(パッケージ)に含まれていることがあり、さらにパッケージ自体も上位パッケージがありえる。

モジュールの使用 import文

import モジュール名
モジュール名.関数名(引数)
import math
print(math.sqrt(100)) # 10.0(100の平方根)

詳しく…


ライブラリ

他のプログラムから利用される前提で作られたプログラムをライブラリといい、Pythonに予め付属しているものを標準ライブラリという。外部ライブラリはpip3コマンドでインストールできる。

詳しく…


条件分岐

if文

条件によって処理をしたり、しなかったりするには、if文を使う。

if 条件式1:
  処理 # 条件式1がTrueなら実行し、if文から抜ける
elif 条件式2:
  処理 # 条件式2がTrueなら実行し、if文から抜ける
else:
  処理 # どの条件式もFalseなら実行

詳しく…


繰り返し

何か処理を繰り返すなら、while文やfor文を使う。

while文の例

羊 = 1
while 羊 < 4:
  print("羊が" + str(羊) + "匹…") # str()は数値を文字列に変換
  羊 = 羊 + 1
print("スヤスヤ…")

条件式「羊 < 4」がTrueの間、処理を繰り返すので、出力はこうなる。

羊が1匹…
羊が2匹…
羊が3匹…
スヤスヤ…

詳しく…


コンテナ

コンテナとは複数のオブジェクトを格納できるデータ構造の総称。

リスト

リストは順番に並んだオブジェクト。

リスト = ['Python', 'HTML', 'Java']

タプル

タプルは生成した後に変更ができないリスト。

タプル = ('Python', 'HTML', 'Java')

セット

セットは要素の重複がなく、要素の順序もない。

セット = set(リスト) # リストからセットを生成

辞書

辞書ユニークキー(重複なし)と(重複してもいい)のペアを要素として格納したもの。

辞書 = {'Python': 'パイソン', 'Java': 'ジャバ'}

詳しく…


ランダム

ランダムの利用ならrandomモジュール。ランダムな整数(乱数)ならrandint、リストから一つランダムに選ぶならchoice、リストの一部をランダムに得るならsampleメソッド、リストそのものをシャッフルするならshuffleメソッド。

import random

print(random.randint(1, 10)) # 1から10までの整数をランダムに返す

リスト = ['Python', 'HTML', 'Java']
print(random.choice(リスト)) # 戻りはランダムな要素
print(random.sample(リスト, 2)) # 戻りはランダムな要素2個のリスト

random.shuffle(リスト) # 戻り値ではなく、元のリストがシャッフル
print(リスト)

ファイル操作

ファイルを読み書きするために、まずopen関数でファイルオブジェクトを開く。引数1はファイルパス、引数2はモード。

ファイル = open('ファイル', 'r')
内容 = ファイル.read()
ファイル.close()
print(内容)

詳しく…


Pythonスクリプト例を探すなら

Python仮想環境pip3で外部ライブラリインストールした場合、仮想環境のlib/ディレクトリ以下にPythonスクリプトが入っている。

Linuxコマンドの実体ファイルもPythonで書かれていることがあり、コードの書き方などの参考になる。例えば/usr/bin/にあるコマンドファイルで探すなら、

file /usr/bin/* | egrep '[[:space:]]Python'

そのソースコードから文字列を検索したいなら、

file /usr/bin/* | egrep '[[:space:]]Python' | cut --delimiter=: --fields=1 | xargs egrep '文字列'