【Python】「脱」初心者のための文法基礎

Python

コードの書き方

命令文の区切り

プログラムは複数の命令文で構成されています。この命令文の単位をステートメントと呼びます。
Pythonでは、ステートメントの区切りは「改行」か「 ; 」(セミコロン)を使います。

a = 1
b = 2

ans = a + b
ans

>>> 3

ステートメントの区切りに「 ; 」(セミコロン)を使うと、先ほどの4行のステートメントを2行で書くことも出来ます。

a = 1; b = 2; ans = a + b
ans

>>> 3

ステートメントの改行

下の例のように、1行のステートメントが長い場合、行を途中で折り返すことで、読み易くなります。

ans = 1+2+3+4+5+6+7+8+9+10
ans

>>> 55

改行したい行の末尾に、「 \ 」(バックスラッシュ)を入力します。

ans = 1+2+3+4+5 \
            +6+7+8+9+10
ans

>>> 55

\ 」(バックスラッシュ)を使うことで、長い文字列を改行して読み易く出来ました。

s = "aaaaaaaaaaaaaaaaaaaaaaaa" \
       "bbbbbbbbbbbbbbbbbbbbb"

print(s)

>>> aaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbb

また、「 ( ) 」(丸括弧)を使って書くことも出来ます。

s = ("aaaaaaaaaaaaaaaaaaaaaaaa"
       "bbbbbbbbbbbbbbbbbbbbb")

print(s)

>>> aaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbb

コメント

コメントはプログラムの注釈として利用したり、動作チェックのために一時的にコメントアウトして単純化する時に利用されます。ステートメントの上下、末尾に「 # 」(シャープ)を付けることで、その行はコメントとして認識されます。

#1から10の足し算
ans = 1+2+3+4+5 \
            +6+7+8+9+10 #バックスラッシュで改行
ans

>>> 55

ただし、例外として、ステートメントの末尾であっても、「 \ 」(バックスラッシュ)の後はコメントアウトするとエラーになります。

#1から10の足し算
ans = 1+2+3+4+5 \ #バックスラッシュで改行
            +6+7+8+9+10 
ans

>>> SyntaxError: unexpected character after line continuation character

複数行をコメントアウトしたい場合は、「 ‘ 」(シングルクォート)×3 または、「 ” 」(ダブルクォート)×3 で、コメントアウトしたい行を囲みます。

ans = 1
'''
この中はコメントとして認識されますので、ansは1になります。
ans = 1+2+3+4+5 \ 
            +6+7+8+9+10
'''
ans

>>> 1
ans = 1
"""
この中はコメントとして認識されますので、ansは1になります。
ans = 1+2+3+4+5 \ 
            +6+7+8+9+10
"""
ans

>>> 1

大文字と小文字の区別

Pythonでは大文字と小文字を区別しますので注意が必要です。

#aとAは別の変数
a = 1
A = 10

print(a)

>>> 1
#print関数:print()→○|PRINT()→×
a = 1
A = 10

PRINT(a)

>>> NameError: name 'PRINT' is not defined

値と演算子

値を表示する

Pythonで最もよく使うと言っても過言ではない、print関数について理解を深めていきましょう。

#print関数:print(引数)
print(10)

>>> 10
a = 10
print(a)

>>> 10

print関数の引数を式にすると、式の結果が出力されます。

print(1+2)

>>> 3
a = 1
b = 2

print(a+b)

>>> 3

print関数の複数行にすると、改行されて複数の結果が出力されます。

a = 1
b = 2

print(a)
print(b)

>>> 
1
2

print関数の引数を複数にすると、半角スペース区切りで複数の結果が出力されます。

a = 1
b = 2

print(a,b)

>>> 1 2

print関数の区切り文字、行末文字を指定することも出来ます。
print(値1, 値2, … , sep = “区切り文字”, end = “行末文字”)
print(値1, 値2, … , sep = ‘区切り文字’, end = ‘行末文字’)

a = 1
b = 2

print(a, b, sep = "、", end = "、3") #タブルクォーテーション

>>> 
1、2、3
a = 1
b = 2

print(a, b, sep = '、', end = '、3') #シングルクォーテーション

>>> 
1、2、3

数値

整数:実数のうち、小数点以下がない値で、0や負の値も含みます。

a = -1
b = 0
c = 1 #+1も同様

print(a + b + c) 

>>> 0

浮動小数点:小数点がある数値で、負の値も含みます。

a = -1.0
b = 0.2
c = 1.0

print(a + b + c) 

>>> 0.19999999999999996

整数部が0あるいは、小数点以下が0の時は、0は省略可能です。

a = -1.
b = .2
c = 1.

print(a + b + c) 

>>> 0.19999999999999996

浮動小数点と整数の計算は、浮動小数になります。

a = -1.0
b = 10
c = 1.0

print(a + b + c) 

>>> 10.0

小数点以下を丸めるにはround()を使います。(≠ 四捨五入)

print(round(1.2))
print(round(1.5)) #近い偶数に丸められる
print(round(1.7))

>>> 
1
2
2

round(数値, 桁)で、丸める桁数を指定することも出来ます。

#3桁で丸める
print(round(1.2345, 3)) 

>>> 1.234

abs(数値)で、数値の絶対値にすることが出来ます。

#絶対値にする
print(abs(−5)) 

>>> 5

max(数値1,数値2,…)で、最大値を抽出することが出来ます。

#最大値を抽出
print(max(1, 5, 3)) 

>>> 5

逆に、min(数値1,数値2,…)で、最小値を抽出することが出来ます。

#最小値を抽出
print(min(1, 5, 3)) 

>>> 1

pow(数値1,数値2)で、数値1の数値2乗を算出することが出来ます。

#2の3乗=2*2*2
print(pow(2, 3)) 

>>> 8

pow(数値1,数値2,数値3)で、数値1の数値2乗を数値3で割った余りを算出することが出来ます。

#2の3乗割る5の余り=2*2*2/5の余り
print(pow(2, 3,5)) 

>>> 3

divmod(数値1,数値2)で、数値1を数値2で割った結果(商、余り)を求める。

#8割る3の商と余りを算出
print(divmod(8, 3)) 

>>> (2, 2)

桁数が大きい時には、指数表記が便利です。

#2×10^4と同義
2e+4 

>>> 20000.0
#2×(10^-4)と同義
2e-4 

>>> 0.0002

数値演算子

演算演算子演算例
足し算+a + b
引き算a – b
掛け算*a * b
割り算/a / b
割り算の商//a // b
割り算の余り%a % b
累乗**a ** n
#足し算
print(1 + 1)

>>> 2
#引き算
print(2 - 1)

>>> 1
#掛け算
print(2 * 3)

>>> 6
#割り算
print(6 / 3)

>>> 2.0

整数同士の割り算では値が割り切れても出力は、float(浮動小数点型)になります。

#割り算のデータ型
print(6 / 3, type(6 / 3))

>>> 2.0 <class 'float'>

割り切れない数値の場合は、近似値を表示します。

#割り切れない割り算
print(10 / 3)

>>> 3.3333333333333335
  #近似値を表示
#割り算の商
print(10 // 3)

>>> 3
#割り算の余り
print(10 % 3)

>>> 1
#累乗(2の3乗)
print(2 ** 3)

>>> 8

数学と同様に「 ( ) 」(丸括弧)を付けることで、計算の優先順位を変更することも可能です。

#計算の優先順位
print(10 - 5 * 2)

>>> 0
#計算の優先順位
print((10 - 5) * 2)

>>> 10
#変数同士の足し算
x = 2
y = 3

print(x + y)

>>> 5
#小数点以下を丸める
pi = 3.141592

print(round(pi, 2))

>>> 3.14

数学の関数利用

import math

#sqrt(平方根)
x  = math.sqrt(16)
print(x)

>>> 4.0
import math

#log2(底が2のlog関数)
x  = math.log2(4)
print(x)

>>> 2.0

その他の数学関数を知りたい場合は、help関数を使用します。

print(help(math))

>>> Help on module math:

中略

FUNCTIONS
    
中略

    sin(x, /)
        Return the sine of x (measured in radians).
    
    sinh(x, /)
        Return the hyperbolic sine of x.
    
    sqrt(x, /)
        Return the square root of x.
    
    tan(x, /)
        Return the tangent of x (measured in radians).
    
    tanh(x, /)
        Return the hyperbolic tangent of x.

中略

DATA
    e = 2.718281828459045
    inf = inf
    nan = nan
    pi = 3.141592653589793
    tau = 6.283185307179586
​

文字列

文字列は、「 ” 」(ダブルクォート)または、「 ‘ 」(シングルクォート)で囲みます。

s = "Hello World"
print(s)

>>> Hello World
s = 'Hello World'
print(s)

>>> Hello World

「 ‘ 」(シングルクォート)を文字列の中に入れたい場合は、全体を「 ” 」(ダブルクォート)で囲みます。

s = "I can't fly"
print(s)

>>> I can't fly

「 ‘ 」(シングルクォート)を文字列の中に入れたい場合に、全体を「 ‘ 」(シングルクォート)で囲むとエラーになります。

s = 'I can't fly'
print(s)

>>> SyntaxError: invalid syntax

上記のエラーを解消するには、エスケープシーケンスの「 \ 」(バックスラッシュ)を利用します。(Windowsでは¥)

s = 'I can\'t fly'
print(s)

>>> I can't fly
s = 'Taro said "I can\'t fly"'
print(s)

>>> Taro said "I can't fly"

「 ” 」(ダブルクォート)、または「 ‘ 」(シングルクォート)を複数使用する際は注意が必要です。以下の例ではI canが「 ” 」(ダブルクォート)外のため、エラーになります。

s = "Taro said "I can\'t fly""
print(s)

>>> SyntaxError: invalid syntax

上記は、「 \ 」(バックスラッシュ)を使うことで解決出来ます。

s = "Taro said \"I can't fly\""
print(s)

>>> Taro said "I can't fly"

「 \n 」(バックスラッシュエヌ)は、改行になります。

s = "Taro said \n I can't fly"
print(s)

>>> Taro said 
      I can't fly

ただし、フォルダリンクなど、元々の文字列に「 \ 」(バックスラッシュ)が含まれている場合は、意図しない出力になる可能性がありますので注意が必要です。

s = "C:\next\file\name"
print(s)

>>> C:
  extile
  ame

上記は、「 ” 」(ダブルクォート)、または「 ‘ 」(シングルクォート)の囲み前に、raw dataの頭文字のrを付けます。

s = r"C:\next\file\name"
print(s)

>>> C:\next\file\name

「 \ 」(バックスラッシュ)を使えば、無意味な改行を減らして、コードを見やすくすることも出来ます。

変数内で改行する場合は、3個の「 ” 」(ダブルクォート)で変数を囲みます。出力結果を見ると、***** とtest1、test3と*****の間に、無意味な改行が入っています。

s = """
test1
test2
test3
"""
print("*********************")
print(s)
print("*********************")

>>> *********************

  test1
  test2
  test3

  *********************

無意味な改行をなくすには、変数の配置を調整することも出来ますが、同列配置が崩れてしまうため、混乱を招く可能性があります。

s = """test1
test2
test3"""

print("*********************")
print(s)
print("*********************")

>>> *********************
  test1
  test2
  test3
  *********************

そこで、「 \ 」(バックスラッシュ)を使うことで、配置を崩さずに改行をなくすことが出来ます。

s = """\
test1
test2
test3\
"""

print("*********************")
print(s)
print("*********************")

>>> *********************
  test1
  test2
  test3
  *********************
エスケープシーケンス説明
\n改行
\t水平タブ
\rキャリッジリターン
\”ダブルクォート
\’シングルクォート
\\バックスラッシュ

文字列演算子

数値の足し算、引き算などと同様に、文字列も演算することが出来ます。

演算演算子演算例説明
足し算+“a” + “b”文字列”a”と”b”の連結。文字列”ab”になる。
掛け算*“a” * n文字列”a”をn回繰り返す。n=2の場合、”aa”になる。
#足し算
print('Ta' + 'ro')

>>> Taro
#足し算
print("Ta" + "ro")

>>> Taro

ただし、数値と文字列を連結するとエラーになります。

#数値と文字列の足し算
print(1000 + "円")

>>> TypeError: unsupported operand type(s) for +: 'int' and 'str'

上記を解決するには、str関数を使い、数値を文字列にします。

#数値と文字列の足し算
print(str(100) + "円")

>>> 100円

str関数を使い、変数同士の演算も可能です。

#変数と文字列の足し算
rieki = 100
kosu = 10

print(str(rieki * kosu) + "円")

>>> 100円

足し算以外にも、半角スペース区切るという方法もあります。

print('Ta'  'ro')

>>> Taro
print("Ta"  "ro")

>>> Taro

半角スペース区切りでは、変数と文字列の連結は出来ません。

s = "Ta"

print(s "ro")

>>> SyntaxError: invalid syntax

足し算では、変数と文字列の連結は出来ます。

s = "Ta"

print(s + "ro")

>>> Taro

掛け算では、複数文字の繰り返しをすることが出来ます。

#掛け算
s = "Hello!"

print(s*2)

>>> Hello!Hello!
#掛け算と足し算の組み合わせ
s = "Hello!"

print(s*2+"Taro.")

>>> Hello!Hello!Taro.

文字列のメソッド

word = "My name is Taro."
is_start = word.startswith("My")
print(is_start)

>>> True
word = "My name is Taro."
is_start = word.startswith("I")
print(is_start)

>>> False
word = "My name is Taro."
is_start = word.find("Taro")
print(is_start)

>>> 11
  #11番目
word = "My name is Taro. Hi Taro."
is_start = word.count("Taro")
print(is_start)

>>> 2
  #2個
word = "My name is Taro. Hi Taro."
is_start = word.capitalize()
print(is_start)

>>> My name is taro. hi taro.
  #先頭のみ大文字でその他を小文字に変換
word = "My name is Taro. Hi Taro."
is_start = word.title()
print(is_start)

>>> My Name Is Taro. Hi Taro.
  #全ての単語の先頭を大文字に変換
word = "My name is Taro. Hi Taro."
is_start = word.upper()
print(is_start)

>>> MY NAME IS TARO. HI TARO.
  #全ての文字を大文字に変換
word = "My name is Taro. Hi Taro."
is_start = word.lower()
print(is_start)

>>> my name is taro. hi taro.
  #全ての文字を小文字に変換
word = "My name is Taro. Hi Taro."
is_start = word.replace("Taro", "JIro")
print(is_start)

>>> My name is JIro. Hi JIro.
  #指定した文字列を置換

文字列のインデックスとスライス

文字列から文字を取り出すには[ ]に取り出す文字位置を指定します。文字の位置は1文字目を0と数え、マイナスは後ろから数えます。位置を指す値は、インデックス番号と呼びます。

text = "python"
print(text[0]) #前から1番目

>>> p
text = "python"
print(text[5]) #前から6番目

>>> n
text = "python"
print(text[−1]) #後ろから1番目

>>> n

指定した文字が存在しない場合はエラーになります。

text = "python"
print(text[10]) #前から10番目

>>> IndexError: string index out of range

スライス(文字列の一部抽出)

[ ]は範囲を指定して文字例の一部を抽出することも出来ます。文字列[開始位置:終了位置]で表し、この操作をスライスと呼びます。

text = "python"
print(text[0:2]) #前から1番目〜2番目

>>> py
text = "python"
print(text[0:0+2]) #前から1番目〜2番目

>>> py

開始位置、終了位置は省略することも出来ます。

text = "python"
print(text[:2]) #前から2番目まで

>>> py
text = "python"
print(text[:-1]) #最後の文字以外

>>> pytho

終了位置の省略は、最後の文字の番号がわからない場合に活用できます。

text = "python"
print(text[2:6]) #前から3番目〜6番目まで

>>> thon
text = "python"
print(text[2:]) #前から3番目〜最後まで

>>> thon

開始位置と終了位置の両方を省略すると、全ての文字列を抽出します。

text = "python"
print(text[:]) #全ての文字列

>>> python
text = "python"
print(text[:]) #全ての文字列

>>> python

文字列[位置]に文字を代入して変更することは出来ません。これは、文字列が状態を変更出来ないイミュータブル(オブジェクトの属性)のためです。そのため、変更しようとするとエラーになります。

text = "python"
text[0] = "d"
print(text)

>>> TypeError: 'str' object does not support item assignment

上記を解決するためには、以下のように新たな変数ないしは、変数の上書きをする必要があります。

text = "python"
text = "d" + text[1:]
print(text)

>>> dython
text = "python"
text = "d" + text[1:]
print(text[:])

>>> dython

文字列の長さを調べるには、len( )を使います。

text = "python"
text = "d" + text[1:]
length = len(text)
print(length)

>>> 6

スライスは、指定する範囲が文字列の長さを超えた場合でも、エラーにはならずに、最後の文字まで抽出することが出来ます。

text = "python"
text = "d" + text[1:10]
print(text)

>>> dython

ステップ

ステップを使えば、文字列の中から一定の間隔で文字を抽出することが出来ます。文字列[開始位置:終了位置:ステップ]で指定します。

text = "123456789"
print(text[::1])  #最初の文字から0文字飛ばし

>>> 123456789
text = "123456789"
print(text[::2]) #最初の文字から1文字飛ばし

>>> 13579

ステップをマイナスで指定すると、後ろから取り出します。後ろから取り出す都合上、文字列の並びが逆になります。

text = "123456789"
print(text[::-1]) #最後の文字から0文字飛ばし

>>> 987654321
text = "123456789"
print(text[5::2]) #6番目から1文字飛ばし

>>> 68

論理値

比較演算子

変数の大小比較をする場合などに、比較演算子を使います。

演算演算子説明
a == b==a と b が等しい -> True
a != b!=a と b が等しくない -> True
a > b>a が b より大きい -> True
a >= b>=a が b 以上 -> True
a < b<a が b より小さい -> True
a <= b<=a が b 以下 -> True
a = 1; b = 1; c = 2
print(a ==b) 

>>> True
a = 1; b = 1; c = 2
print(a ==c) 

>>> False
a = 1; b = 1; c = 2
print(a !=c) 

>>> True
a = 1; b = 1; c = 2
print(a < c) 

>>> True
a = 1; b = 1; c = 2
print(a < b) 

>>> False
a = 1; b = 1; c = 2
print(a <= b) 

>>> True
a = 1; b = 1; c = 2
print(0 < a < 2) 

>>> True

論理演算子

演算演算子説明
a and band論理積:aかつbの両方がTrue -> True
a or bor論理和:aまたはbのどちらか一方でもTrue -> True
not anot否定:aがTrue -> False
True and True

>>> True
True and False

>>> False
False and False

>>> False
True or True

>>> True
True or False

>>> True
False or False

>>> False
not False

>>> True
not True

>>> False

論理演算子を使用することで、より複雑な論理式を立てることが出来ます。

a = 20
print( (a > 10) and (a < 30))

>>> True
a = 20
print( (a > 10) and (a > 30))

>>> False
a = 20
print( (a > 10) or (a > 30))

>>> True

ビット演算子

型変換

データの種類型の名称値の例
数値整数型(int型)0、1、-1、100
小数型(float型)0.1、1.0、3.14
文字列文字列型(string型)おはよう、太郎
論理値論理値型(bool型)True、False

最初に型について、簡単に復習しておきます。Pythonでは型を宣言せずに変数を使うことが可能でしたね。

num = 1
print(num)

>>> 1
name = 'Taro'
print(name)

>>> Taro

他の言語であれば以下のように書きます。

var int num = 1
print(num)

>>> 1
var str name = 'Taro'
print(name)

>>> Taro

Pythonの場合は、整数を指定すればint型、文字列を指定すればstr型と自動で判別してくれますので、型の指定は不要です。

ただし、Pythonでも型を宣言する機能はありますので参考までにご紹介します。(Python3.6以降)

num: int = 1
print(num)

>>> 1
name: str = 'Taro'
print(name)

>>> Taro

型を確認するには、type関数を用います。

num = 1
print(num, type(num))

>>> 1 <class 'int'>
name = 'Taro'
print(name, type(name))

>>> Taro <class 'str'>

その他、bool型では以下のようになります。

is_ok = True
print(is_ok, type(is_ok))

>>> True <class 'bool'>

続いて、型を混在させた時にどうなるかを見ていきましょう。

num = 1
name = 'Taro'
#この時点ではnumはint型

#str型のnameをint型のnumに代入
num = name

#numは何型になっているか?
print(num, type(num))

>>> Taro <class 'str'>
  #答え:str型

続いて、型変換について見ていきましょう。

name = '1'
#この時点ではnameはstr型

#str型のnameをint型に変換してnew_numに代入
new_num = int(name)

#new_numは何型になっているか?
print(new_num, type(new_num))

>>> 1 <class 'int'>
  #答え:int型

変数の型を指定した時の型変換について見ていきましょう。

name: str = '1'
#この時点ではnameはstr型

#str型のnameをint型に変換してnew_numに代入
new_num = int(name)

#new_numは何型になっているか?
print(new_num, type(new_num))

>>> 1 <class 'int'>
  #答え:int型

変数の型を指定したとしても、型変換により型は変わるため、型の指定をする必要はあまりないかもしれませんね。第3者に、「この変数はこの型で使うよ」と明示する効果はあるかもしれませんね。

変数

変数は値を一時的に保管する箱で、役割としては式を変数を使って書ける点です。
例えば、「100×2」では、この式が何を計算しているのかわかりませんが、「tanka×kosuu」と書くことで式に意味を与えることが出来ます。また、変数の値が予め決まっていなくても式が書けますし、条件分岐により値を変えるなどの処理も可能になります。

User_Idのように、先頭を大文字にする書き方をラクダのこぶになぞらえて、キャメルケースと呼び、user_idのように、先頭を小文字にする書き方をヘビになぞらえて、スネークケースと呼びます。

よくあるエラー

[使えない変数名]
変数名の1文字目には数字は使えません。また、+、-、/、%、&、[、(、{、#などの演算子や記号も使えません。
例)1one、1_one、i+love、i-love、i/love、i&you、[i]

#変数の先頭に数値
1num = 1
print(1num)

>>> SyntaxError: invalid syntax

[予約語]
Pythonの予約語も変数名には使えません。
例)and, as, assert, break, class, continue, def, elseif, else, except, False, finally, for, from, global, if, import, in, is, lamda, None, nonlocal, not, or, pass, raise, return, True, try, while, with, yield

#変数に予約語を使用
if = 1
print(if)

>>> SyntaxError: invalid syntax

複合代入演算子

変数の値を更新するために変数自身に演算を行うこと。

演算演算子説明
a += b+=aにbを足した値を代入(a = a + b)
a -= b-=aからbを引いた値を代入(a = a – b)
a *= b*=aにbを掛けた値を代入(a = a * b)
a /= b/=aをbで割った値を代入(a = a / b)
a //= b//=aをbで割った整数値を代入(a = a // b)
a %= b%=aをbで割った余りを代入(a = a % b)
a **= b**=aをb回掛け合わせた値を代入(a = a ** b)
age = 30
age += 1
age

>>> 31

ポイント
・変数を使うには、変数名 = 初期値 と記述
・変数を使って数値や文字列を扱う
・変数名の付け方にはルールがある
 ・アルファベットとアンダースコア( _ )を組み合わせて、任意の名称を設定可能
 ・数値を含めることは出来るが、数値から始めてはいけない
 ・予約語(if、for等)は使用してはいけない
・int()、float()、str()で、文字列と数値の変換が可能

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