Python文法チュートリアル

山科和史

  • このチュートリアルではプログラミング言語Pythonの基本的な文法とプログラムの実行方法を紹介します。
  • Pythonのご経験がある方はこのチュートリアルは必要ありませんがお持ちのPCにPythonを実行できる環境構築をお願い致します。
  • LED-Camp4にておいて特に重要な事項については*が付いておりますので優先的にご参照ください。
  • もしお時間に余裕がある場合は*の付いていない事項や練習課題に取り組んでみましょう。

Contents

各項目からこの一覧に戻れるようになっています。

Pythonを始める準備*

下記に示すのは一般的なPythonの実行環境の一覧です。

  • 事前学習テキストの「MDDチュートリアル」はPCにPython環境がないとできませんので環境構築をお願い致します。

PC環境

Python実行環境 動作OS インストール方法(参考Webサイト)
Python (おすすめ) Windows windows環境へのpythonインストール
OS X MacのOSではPythonがプリインストールされています(MacのTerminalで実行する)
Ubuntu sudo apt-get isntall python
Cygwin Windows Cygwinのインストール方法&設定方法

Web Python実行サービス
これらのサービスは実行する前に言語を選ぶ必要があります。
その際は,Python2もしくはPython2.7以上(Python3は不可)を選択してください。

  • piza.IO(おすすめ。Github,Twitter,Facebookのアカウントを持っているとログインが簡単です。)
  • ideone
  • codepad
  • Wandbox

Contentsに戻る

Pythonのプログラムを実行してみよう*

Pythonのプログラムを記述するためのファイル拡張子は.pyです。

#hello.py
print "Hello LED-Camp!"

例えば上に示すようなHello LED-Camp!と出力するための簡単なプログラムhello.pyを実行してみましょう。

python hello.py
Hello LED-Camp!

出力結果にはHello LED-Camp!と出力されました。Pythonではこのようにpython プログラム名というように実行します。
なお,この方法はPCにPythonの実行環境がある場合の方法です。Webサービスをお使いの場合は.pyのファイルを作成する必要はありません。
Webブラウザ上に表示されるエディタ上にコードを記述するか,コピー&ペーストしてください。

Contentsに戻る

Pythonの文法

Pythonの基本的な文法を紹介します。また、コード例中の# ==== result ====は実行した際の出力結果です。
# ==== result ====がある例では、そのまま実行していただければ基本的には実行できるかと思います。

インデントとコメントアウト*

Pythonにおけるインデントはほかの言語と比べ,比較的重要な役目があり,C言語やJavaなどの{ }と同じ働きをします。つまり,ブロック構造をインデントで表現します。これがPythonにおける特長の1つです。 例えばC言語で以下のようなif文の構造があるとします。

// C
if (A < B){
    printf("A is smaller than B\n");
    B = B + 1;
}
else if ( A > B ){
    printf("A is larger than B\n");
    A = A + 1;
}
else{
    printf("A and B are equal \n");
}

これをPythonにおいて表現すると,以下のようになります。

# Python
if A < B:
    print "A is smaller than B"
    B = B + 1
elif A > B:
    print "A is larger than B"
    A = A + 1
else:
    print "A and B are equal"

このように例えばif文でしたら,条件文の下に同じレベルのインデントで処理を書くとブロック構造ができます。この際,スペースとタブの混在にすると実行エラーとなってしまいますのでご注意ください。
また,お気づきかと思いますが,コメントアウトはPythonでは文頭に#をつけるとコメントになります。

Contentsに戻る

変数宣言と標準出力*

Pythonでは明確な変数宣言は必要ありません。なお,リストなどの機能を使うときは,初期化として宣言する場合もあります(後で説明します)。
それゆえに,変数に任意の値(文字含む)を代入するとインタプリタが自動的に型を認識してくれます。

string = "Hello World"
num_a = 100
num_b = 10.21

またPythonにおける標準出力関数はprint文を用います。printという記述のあと,ダブルコーテーションで囲むとそれが文字列として出力されます。
また,先ほどの変数を指定しても,各要素の中身が表示可能です。

print "Hello World"
# ==== result ====
# Hello World

string = "Hello World"
num_a = 100
num_b = 10.21

print string
print num_a
print num_b
# ==== result ====
# Hello World
# 100
# 10.21

また,C言語のprintf関数と同じようにフォーマットを指定して,変数と文字列を交えて出力することもできます。

led = "LED-Camp"
times = 4

print "%s has been held %d times."%(led, times)
# ==== result ====
# LED-Camp has been held 4 times.

また,文字列として宣言した数字を数値へ変換することも可能であり,その逆も可能です。

number = 100
string = "100"

# string => integer number
int(string)

# integer number => string
str(number)

Contentsに戻る

数値演算*

Pythonでもほかの言語と同様,数値演算をすることが可能です。

x = 20
y = 5

print x + y # 加算
print x - y # 減算
print x * y # 乗算
print x / y # 除算

# ==== result ====
# 25
# 15
# 100
# 4

Contentsに戻る

条件分岐文(if, elif, else)*

Pythonにおける条件分岐文はifelifelseを用いて構成します。この際,条件文の後にコロン:をつけるのを忘れないでください。

A = 10
B = 20

if A < B:
    print "A is smaller than B"
elif A > B:
    print "A is larger than B"
else:
    print "A and B are equal"

# ==== result ====
# A is smaller than B

なお、Pythonにおける論理演算子が少し特殊です。例えばC言語において以下のような条件分岐構造があった場合、

if ( A < B && A < 0 ){
    //processing
}
else if( A == 0 || B == 0 ){
    //processing
}

Pythonで記述すると以下のようになります。

if A < B and A < 0:
    # processing
elif A == 0 or B == 0:
    # processing

Contentsに戻る

繰り返し文

Pythonにおける繰り返し文は,for文とwhile文を使います。
for文ではrange関数を使うのが便利です。

# range(start_index, cycle)
# : 第1引数にはループインデックスの開始番号、第2引数には繰り返し回数を指定
# 以下のように記述することによって、インデックス変数となる。
for i in range(0, 5):
    print "i = ", i
# ==== result ====
# i =  0
# i =  1
# i =  2
# i =  3
# i =  4

i = 0
while i < 5:
    print "i = ", i
    i = i + 1
# ==== result ====
# i =  0
# i =  1
# i =  2
# i =  3
# i =  4

Contentsに戻る

リスト

リストを使用する場合、「最初に初期化する値はないけどリストとして使いたい」という場合、変数の後に= []という風に記述すると任意のリスト宣言となります。リストは、C言語でいう配列と似たものです。リストに任意の要素を追加したい場合、append関数を使用します。

list_x = []
# 5回のループでそれぞれiの値をlist_xに追加しています。
for i in range(0, 5):
    # append() : 配列へ追加したい要素を引数として指定する
    list_x.append(i)

# 以下のように記述すると、list_xの中にあるすべての要素に対して処理を行うfor文となります。
# これはin演算子の特徴であり、inの後にある対象オブジェクトの1要素がelemという変数に代入されていきます。
for elem in list_x:
    print elem
# ==== result ====
# 0
# 1
# 2
# 3
# 4

もちろん、最初の初期化も可能です。またappend関数以外にもリストで使用する関数を紹介します。

list_x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# insert() : インデックスを指定して挿入
list_x.insert(2,10)
print "list_x.insert(2,10) : ", list_x

# remove() : リスト中に指定した引数の値があったら削除
list_x.remove(3)
print "list_x.remove(3) : ", list_x

# pop() : リストの末尾を削除。引数を指定すると、そのインデックスの要素が削除される。
list_x.pop()
print "list_x.pop() : ", list_x

# index() : 引数で指定した値のインデックスを取得
print "list_x.index(10) : ", list_x.index(10)

# インデックスを指定しての値の変更
list_x[1] = 100
print "list_x[1] = 100 : ", list_x

# len() リストのd長さを取得
print "list_x length : ", len(list_x)

# ==== result ====
# list_x.insert(2,10) :  [0, 1, 10, 2, 3, 4, 5, 6, 7, 8, 9]
# list_x.remove(3) :  [0, 1, 10, 2, 4, 5, 6, 7, 8, 9]
# list_x.pop() :  [0, 1, 10, 2, 4, 5, 6, 7, 8]
# list_x.index(10) :  2
# list_x[1] = 100 :  [0, 100, 10, 2, 4, 5, 6, 7, 8]
# list_x length :  9

Contentsに戻る

関数

Pythonにおいて関数宣言をする際はdefを使用します。defの後に関数名、また( )の中には引数を指定します。
( )の後にコロン:をつけるのを忘れないでください。

# 引数なしの関数
def print_hello():
    print "hello"

# 引数ありの関数
# 戻り値はreturnで返す
def add( A, B ):
    return A + B

# 関数に与える引数は以下のようにすることで初期化できる
def print_info(name = "no name", age = 0, height = 100, weight = 50):
    print "name: %s age: %d height: %d weight: %d"%(name, age, height, weight)

# 各関数の実行
print_hello()

print add(100,300)

# 引数なし
print_info()
# 引数あり
print_info("taro", 20, 170, 60)

# ==== result ====
# hello
# 400
# name: no name age: 0 height: 100 weight: 50
# name: taro age: 20 height: 170 weight: 60

Contentsに戻る

クラス

Pythonのクラス宣言は関数宣言と似ています。書式としてはclass クラス名(継承するクラス"省略可"):という風に宣言します。
以下に実際の例を示します。 __init__はPythonにおいてクラスを定義する際、多くの場合定義する関数です。
この関数ではクラスの各メンバ変数の初期化を行う.つまり、コンストラクタのような働きをします。
また、 それぞれのメンバ関数、__init__の引数にあるselfはクラスのインスタンスを表しているため各メンバ関数に必ず必要な引数です。

class Person:
    def __init__(self, name = None, age = 0, height = 100, weight = 50):
        # メンバ変数の初期化
        # メンバ変数にする場合は必ずselfをつける
        # selfがついている変数スコープはクラス内すべてにわたる
        # selfをつけない場合の変数スコープはその関数内に留まる
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
        self.classname = None
        self.bmi = 0

    def print_info(self):
        print "name: %s age: %d height: %d weight: %d"%(self.name, self.age, self.height, self.weight)

    def set_class(self, classname):
        self.classname = classname
        return self.classname

    def calc_bmi(self):
        height = self.height/100.0
        weight = self.weight
        self.bmi = weight / (height*height)
        return self.bmi

# クラスのオブジェクトを宣言
person = Person("taro", 20, 170, 60)

# 各メンバ関数の実行
person.print_info()
print person.set_class("1-B")
print person.calc_bmi()

Contentsに戻る

練習課題

下記のプログラムにおいてどんな出力がされるか考えてみましょう。

# -*- coding: utf-8 -*-

height = 160
weight = 50

name = "Hanako"

bmi = weight / ((height / 100.0) * (height / 100.0))

print "name : ", name
print "height : ", height
print "weight : ", weight
print "bmi : ", int(bmi)

if bmi <= 18:
    result = "やせすぎ"
elif 18 < bmi and bmi <= 20:
    result = "やせ型"
elif 20 < bmi and bmi <= 25:
    result = "普通"
elif 25 < bmi and bmi <= 30:
    result = "肥満ぎみ"
elif 30 < bmi:
    result = "肥満"

print "あなたは ", result, " です"

Contentsに戻る

Reference

Contentsに戻る

お問合せ・質問

led-camp4-sanka_at_swest.toppers.jp
_at_を@に変えてください。

Contentsに戻る