【図解で詳解】Pythonコードの書き方の基本(ステートメント~変数・型まで)

スポンサーリンク
Pythonの基礎文法(コードの書き方) Python

【図解で詳解】Pythonコードの書き方の基本(ステートメント~変数・型まで)

Pythonの基礎文法を図を用いて分かりやすく解説していきます。

今回はPythonプログラミングを始めるにあたりまず知っておくべき、ステートメント(ブロックを構成する最小単位(行・ステップ))の書き方の作法と型の種類・変数・その他ついて解説します。

Pythonには他言語にはない、言語使用上の特殊な作法や違いがありますのでまずは本記事でしっかり基礎を固めましょう

ステートメント(ブロックを構成する最小単位(行・ステップ))の書き方の作法

型の種類・変数・その他ついて

より詳細を知りたい方はPythonプログラミングのチュートリアルと合わせて読み進めるとより理解がすすむと思われますので適宜以下のURLを参照してください。

Python公式ドキュメント

https://docs.python.org/3/tutorial/index.html
スポンサーリンク

1. ステートメント

Python_基本文法_コードの書き方

Pythonの機能ブロックを構成する最小構成単位をステートメントと呼びます。本節では、Pythonプログラミングでは重要な意味を持つインデント(字下げ)や区切り、改行、コメントについて解説していきます。

1.1 Pythonコードにおけるインデントの意味

Pythonでは、他のプログラミング言語とは異なり、インデント(字下げ)を使ってブロックを区切りをつけていくという特徴があります。

他言語の例でいえばCやJavaなどでは{, }; の間にステートメントを記述しますし、Pythonと同じスクリプト言語ではdo~end, begin~endといった予約語の中にステートメントを記述していきます。ブロックの終端文字があるので極端な例として図1の右側のようにまったくインデントなしで記述したとしても問題なく動作しますが、Pythonではエラーが発生してしまいます。

Rubyのインデントの挿入例
図1 Rubyのステートメントの書き方

ステートメントのインデントに関する基本仕様をまとめると以下のとおりとなります。

ステートメント (インデント) に関する基本ルール➀

基本ルール➀


➀文頭は揃えて記述する

先頭にスペース(インデント)を入れない、もしくは固定のインデント(半角スペース4個分)を常時挿入する

➁ステートメントの末尾には;(セミコロン)付けない

仕様を簡単に図示すると次のようになります。➀の文頭を揃えるではすべてのステートメントに対して文頭に「インデントを入れるのか」もしくは「入れるのか」を統一するためのコーディングルールを事前に決めておく必要があります。

➁は他言語で使われる文の末尾を示す;(セミコロン)はPythonでは不要です。

図2インデントに関する基本ルール➀

インデントの基本ルール➀
図2インデントに関する基本ルール➀

それでは、実例で確認してみましょう。まず文頭をインデントなしで揃える場合ですが、以下のとおり問題なく実行することができています。

# 文頭を揃える(インデントなし)場合

a = 10
b = 20
c = 30

ans = a + b + c
print(ans)  # >>60 正常に動作

次に、文頭にインデントを入れて高さを揃えた場合も、問題ありません。

    # 文頭を揃える(インデントあり)場合

    a = 10
    b = 20
    c = 30

    ans = a + b + c
    print(ans)  # >>60 正常に動作

次に文頭を揃えない場合の例も確認してみます。4行目のコード(b=2)の部分だけインデントを挿入して実行すると、「IndentationError」というエラーが表示されました。

# 文頭を揃えていない場合はエラーが発生する事例➀
    
a = 10
    b = 20 # ここに先頭にインデント
c = 30

ans = a + b + c

print(ans)  # >>IndentationError: unexpected indent


#-------------------------------------------------------
# File "<ipython-input-367-9f275dac7afc>", line 4
#  b=20
#IndentationError: unexpected indent
#-------------------------------------------------------

今度は、4行目のコード(b=2)の部分だけスペース2個分(他は4個分)にした場合です。こちらも同様に「IndentationError」というエラーが表示されました。

    # 文頭を揃えていない場合はエラーが発生する事例②

    a = 10
  b = 20  # 先頭を揃えない(スペース2個分)
    c = 40

    ans = a + b + c

    print(ans)  # >>IndentationError: unexpected indent

#-------------------------------------------------------
# File "<ipython-input-367-9f275dac7afc>", line 4
#  b=20
#IndentationError: unexpected indent
#-------------------------------------------------------

このように、Pythonでは{}やendなどの予約語を使うことなくコードをシンプルに記述することができる反面、インデント(字下げ)の関係を常に意識してコーディングする必要があります。


さて、インデントに関してはもう一つ重要な基本ルールがあります。

それは、各機能ブロックを構成する制御構文、関数・クラスの定義といった要素の中の区切りや宣言といった構文においてもインデントが重要な意味を持つというものです。

詳しくは、各種機能や定義の解説の際に解説をしますが、先に基本仕様をまとめます。

ステートメント (インデント) に関する基本ルール

基本ルール➁

次のような場所の:(コロン)以降にインデントを挿入し字下げする


➀制御構文

 if, while, for 条件式 :

➁関数の定義

 def 関数名() :

➂クラスの定義

 class クラス名() :

わかりずらいので図で示すと図3ようなイメージとなります。

条件分岐や繰り返しなどの制御構文、ユーザ定義関数やクラスの定義をする際には「各種定型構文+:(コロン)」の後には処理手順ステートメントを記述していきます。この処理手順ステートメントの適用範囲がインデントによりコンパイラで区別されます。逆にインデントを戻した時点で適用範囲外となりメイン(呼び出し)ブロックに戻るといったことになります。

インデントの基本ルール➁
図3 インデントに関する基本ルール➁

クラスや関数(メソッド)、条件分岐などは組み合わせてネスト構造にすることもできます。インデントをつかった機能分離の一例を示します。

インデントの基本ルール➂
図4 インデントの多重(ネスト)構造
# インデントの多重構造による機能の分離の具体例

class Sample:               # ➀Sampleクラスの定義
    def foo(self, flag):    # ➁インスタンスメソッドの定義
        if flag:            # ➂ifブロック
            print("Call")   # ➃ifブロックの内容

inst = Sample()     # インスタンスの生成
inst.foo(True)      # インスタンスメソッドの実行

# >>Call

図4と同じ構造のコードのList5について解説します。

➀でクラスを定義しています、その次に➁でクラスのオブジェクトであるメソッドを定義しています。➁はクラスの中で個別に定義できるメソッドブロックですからインデントをを挿入後に書きはじめます。

さらに➂ではメソッドの具体的な処理内容を記述していますが、if文句ですのでここでも基本ルール➁を適用し、インデントを挿入して書きはじめます。

(※クラスや関数、if文の構文は後程、詳細に説明していきます。)

1.2 ステートメントを区切る・改行する

Pythonでは1ステートメントは1行で記述するスタイルが普通ですが、区切り文字や改行文字を入れることで、1行に複数行のステートメントを技術したり、逆にステートメントを複数行に改行することができます。

まずは、文の区切りについて解説します。

区切り文字の説明
図5 区切り文字の説明図

区切り文字を使って1行に複数のステートメントを記述したコード例です。但し、可読性は多少低くなりがちですので、定型処理に限るなど適用範囲をなるべく狭めるのが肝要かと思います。実際に「;」で複数行を連結する書き方は現場ではあまり見かけない書き方です。

# 複数のステートメントを一行に記述

a=10; b=20; c=30; ans=a+b+c; print(ans)

# >>60 実行可能

文頭に不適切な空白、インデントを挿入した場合は1.1項同様にエラーが発生しますので注意が必要で、制御構文や関数などを一行でかくことはできません。

# 複数のステートメントを一行に記述

    a=10; b=20; c=30; ans=a+b+c; print(ans)

# エラー内容
#   a=10; b=20; c=30; ans=a+b+c; print(ans)
#   ^
# IndentationError: unexpected indent

#----------------------------------------------------------------------
# 制御構文などは1行で記述することはできない

a = 10 ; if True : ; b = 10

# エラー内容
# a = 10 ; if(True) : ; b = 10
#          ^
# SyntaxError: invalid syntax

次に、文の改行について解説します。

改行に関しては、Pythonではリストやタプルなど1行が長くなるデータ構造もあるので場合によっては適切に改行を入れることでコードの可読性が良くなることがありますので積極的に取り入れることをおすすめします。

改行文字の説明
図6改行文字の説明図

改行文字をつかって1つのステートメントを複数行に分けて記述したコード例です。なお、改行後の右側のスペースにはコメント(# …)を挿入することはできませんので注意してください。

#(1) ステートメントを複数行に改行する

ans = 'a ' + 'b ' + 'c ' \
        + 'd ' + 'f ' \
            + 'g'

print(ans) # >>a b c d f g  実行可能

#-------------------------------------------------------------
#(2) 改行途中でコメントを挿入

ans = 'a ' + 'b ' + 'c ' \  # コメントを挿入
        + 'd ' + 'f ' \
            + 'g'

print(ans)
#   ans = 'a ' + 'b ' + 'c ' \  # コメントを挿入
#                                         ^
# SyntaxError: unexpected character after line continuation character

1.3 コメントの書き方

コメントはプログラムの注釈・説明として利用するほか、動作チェックのための一時的な記述などを無効(コメントアウト)にする目的に用いられます。プログラムの可読性の確保、デバッグ、残しておきたいステートメントなどに積極的に記述するようにしましょう。

コメントの書き方
  • # コメント文字列(プログラムを含む)
  • “”” コメント文字列(プログラムを含む、複数行の記述が可能)“””

例1.次はステートメントのコメントアウトした例です。#以降の処理が無効化されます。また、ステートメントの途中以降をコメントにすることもできます。

# コメントの書き方の例1

x = 10
y = 20; print(x); print(y)

#x = 10                         #ステートメントをコメントアウト
#y = 20; print(x); print(y)     #複数のステートメントを一度にコメントアウトする

例2.次は#で一行ずつコメント化していくのではなく、一度に複数行を“””“””(ダブルクオーテーション3つ)の間に挟むことでコメント化することができます。

# コメントの書き方の例2

x = 10
y = 20

"""
この範囲はコメントとして
実行時には無視されます。
"""

print(x + y)

なお、補足ですが関数やメソッド、クラスの定義の冒頭で”””で括ったコメントを書くと、そのコメントはドキュメント用の文章(docstring)となります。詳細は割愛します。

2. 変数と定数

Python_基本文法_コードの書き方

2.1 Pythonにおける変数

プログラミング言語には静的型式変数動的型式変数という2タイプが存在しますが、Pythonでは後者の動的型式変数に分類されます。CやJavaなどは変数宣言をする際には, int x; double y;などと型名を付けますが、Pythonでは型宣言は不要で変数名 = 数値(整数, 浮動小数,文字列)と記述した時点で変数が定義されます。

ですので、変数に格納されている数値が何型の数値であるかはプログラマーが常に意識していなければなりません。

動的型式変数のイメージ図
図7 動的/静的型式変数

2.1.1 変数に使える(使えない)文字列

変数の定義

使える文字:

  • 半角英数, _(アンダースコア)
  • 平仮名、漢字などのマルチバイト文字

使えない文字:

  • 一文字目に数字
  • +, -, / , (, {, # などの演算子や記号を含めることはできません
  • Pythonの予約語(and, as, class, if・・・ )

使える変数の例です。変数は基本的に名詞を使って推測しやすい文字列にします。なお、変数の命名にはキャメルスネークやスネークケースなど有名な記法がありますが、Pythonでは後者を採用することが多いようです。

スネークケースとは”名詞_名詞”のように名詞の前後を_(アンダースコア)で挟む記法のことです。

# 使用可能な変数名の例

id = 10
name = "tanaka"

myName = 10     # キャメルスネーク
my_name = 10    # スネークケース(Pythonで頻繁に使われる形)

次は変数名として使えないパターンです。先頭が数字がくるもの、演算記号、予約語などな変数名として設定することはできません

# 使用できない変数名の例

1pin = "a"  # SyntaxError: invalid syntax  1文字目に数字を使っている
s&t = "a"   # SyntaxError: can't assign to operator  "&"論理演算記号を使っている
abc{ = "a"  # SyntaxError: invalid syntax   不正な記号を使っている

2.1.2 大文字と小文字の区別

Pythonでは変数の大文字と小文字は明確に区別しますので、それぞれ別々の変数として解釈されます。

# 変数名の大文字・小文字の区別

abc = "small word"
ABC = "big word"

print(abc)      # small word
print(ABC)      # big word

print(abc == ABC)   # False(等しくない)

2.3 定数

定数の定義

定数:pythonには定数はありませんが、代替手段はあります

Pythonには定数はありません。慣例的に大文字アルファベットで記述された変数を定数として扱うことが大半です。

PI = 3.14       #大文字で定数を表す
NUM = 1.732

その他のもう少し規制を強化した、疑似的な定数を作ることもできます。関数やクラスを使う手法で

す。ここでは基本的な文法の紹介にとどめます。

3. Pythonで使える型

Pythonで使える型としては、大きく数値型と文字列型の2つに分類されます。

型の種類
図8 Pythonで使える型の種類

3.1 数値型

2節の変数でも解説しましたが動的型式言語であるPythonでは数値を扱う際にその表現範囲を気にすることはありません。

int型やdouble型といった宣言なしに-10^10~10^10といった長大な数値から0.1^(-10)といった極小な数値も自由に使うことができます。また、Pythonが扱える数値型の特徴として複素数の表現が可能です。

数値型としてコード内で使うことができる数値の種類は「整数」「浮動小数点」「バイナリ(N進)」「複素数」があります。

数値型
図9 Pythonの数値
# <整数>

print(5)   # >>5
print(0)   # >>0
print(-5)  # >>-5

# 整数リテラルの長さには制限はない(メモリに格納出来うる範囲において)
print(7922816251426433759354395033)   # >>7922816251426433759354395033

# アンダースコアを使って数値をグループ化することで分かりやすくすることができる
print(100_000_000_000)  # >>100000000000

#-------------------------------------------------------------------------
# <浮動小数点>

print(0.08)   # >>0.08
print(98.5)   # >>98.5

# "0 ""表記の省略
print(.123)  # >>0.123     整数部の0を省略した場合
print(10.)   # >>10.0      小数点以下の0を省略した場合

print(1.23e+7) # >>12300000.0  小数点以下は追加される
print(9.7e-4)  # >>0.00097  eの定数に負数を使うと(1/10)の累乗と同義

#-------------------------------------------------------------------------
# <N進数>

#2進数(0b____)
print(0b0000)    # >>0
print(0b0101)    # >>5

#8進数(0o____)
print(0o010)     # >>8
print(0o777)     # >>511

#16進数(0x____)
print(0x10)      # >>16
print(0xFF)      # >>255

#---------------------------------------------------------------------------
# <虚数>

print(1j * 1j)      # >>(-1+0j) jの自乗は-1となる(定義そのもの)
print(2 + 3j)       # >>(2+3j) 実部+虚部
print(10j)          # >>10j 虚部のみ

imag_num = 10 + 20j
print(imag_num.real)       # >>10 複素数の実部
print(imag_num.imag)       # >>20 複素数の虚部

3.2 文字列型

Pythonで文字列を表現するには’~’(シングルクォート)もしくは”~” (ダブルクォート)で文字列を囲みます。また、複数行にまたがる文字列を表現するには’’’~‘’‘(シングルクォートを3つ)もしくは”””~“”“(ダブルクォート)で囲みます。

文字列型
図10 Pythonの文字列
# 文字列型の基本的な使い方

str1 = "Pythonの文字列型の解説_ダブルクォート"
print(str1) # >>Pythonの文字列型の解説_ダブルクォート

str2 = 'Pythonの文字列型の解説_シングルクォート'
print(str2) # >>Pythonの文字列型の解説_シングルクォート

str3 = 'Pythonの"文字列型"の解説'
print(str3) # >>Pythonの"文字列型"の解説

str4 = "Pythonの'文字列型'の解説"
print(str4) #  >>Pythonの'文字列型'の解説


#-------------------------------------------------------------------------
# 複数行の文字列

str5 = '''あいうえお
かきくけこ
さしすせそ
たちつてと
'''

str6 = """あいうえお
かきくけこ
さしすせそ
たちつてと
"""

print(str5)
print(str6)
# >>あいうえお
# >>かきくけこ
# >>さしすせそ
# >>たちつてと

#str6も同様

この単純そうに見える文字列型ですが実は非常に奥が深い型です。(Pythonに限らず)文字列型(Stringオブジェクト)に関連した組込みメソッドや関数といったものが多数存在します。これらの解説は別の機会に改めて解説したいと思います。

4. まとめ

いかがでしたでしょう?

今回はPythonコードの書き方としてまずは必ず知っておきたいステートメントの扱いや型・変数といった基本事項について解説してきました。ポイントをまとめると次のようになります。

➀. Pythonのステートメントはインデント(インデント)が各機能ブロックの境界を意味している。Ifやforといった制御構文の適用範囲の区切りもインデントで表現する。

➁. ステートメントには適宜、区切りや改行、コメントを自由に入れることができ可読性を高めることができる。

➂. Pythonは型宣言をすることなく値(数値や文字列)を指す(ラベリング)ことで始めて変数が定義される動的型式言語である。

コードの書き方を学んだあとはデータ構造<リスト>や制御構文といった次の記事に進まれるとよりPythonの理解が進むと思いますので参考にして下さい。

今回の記事を是非、お役立てくださいますと幸いです。

最後までお読みいただきありがとうございました。

タイトルとURLをコピーしました