Python概要

  • インタプリタ言語(コンパイルを必要としない)
  • Webアプリ,データ処理など様々分野で利用

注意点

  • 説明ではPython3を対象とする(Python2系とPython3系はほぼ別物なので注意)

Hello World

print('Hello, World!')
  • print関数で文字列を出力
  • Pythonではセミコロンや中括弧は不要(インデントでブロックを表現)
  • Pythonのファイルは拡張子 .py をつける
    python hello.py
    

  • コンピュータ上ではデータが 01 の数字で表現されるため「何」を表しているか決めるため「型」の考え方がある
    • 01000001 は,型「整数」としてみると 65,型「文字」としてみると A,型「小数」(符号1ビット, 指数部3ビット,仮数部4ビット)としてみると 17.0

Pythonにおける型

  • 基本型
    • int: 整数値
    • float: 小数
    • bool: 論理値(True/False)
    • str: 文字列
  • 基本型以外も使うことができる
print(type(1))
print(type(1.0))
print(type(True))
print(type('hello'))
<class 'int'>
<class 'float'>
<class 'bool'>
<class 'str'>

解説

  • type関数は与えられた変数の型(厳密にはクラス)を返す
  • 「書き方」によって型が決まる
    • int: 1, -4 などの小数点なしの数値
    • float: 1.0, -4.0, 4e+2 などの小数点ありの数値もしくはeを使った指数表現
    • bool: True もしくは False
    • str: シングルもしくはダブルクオーテーションで囲まれた文字(どちらも同じ)

変数

  • データやプログラムの実行状態を記録する場所
    • 値(int, float, bool, str)を入れる「箱」
      • 十歩進んだら右に曲がる :arrow_right: 進んだ歩数を記録する必要がある

Pythonにおける変数

  • プログラミング言語の大原則「どの「型」の値が入った箱か区別する必要がある」
    • 整数の値が入った箱を小数と勘違いすると違う値になる
  • 動的型付け言語(プログラムを実行する時に型が決まる)のため型の指定が必要ない
    • 変数にはどんな「型」の値でも入る
    • 入っている値を正しく読める(「型」がわかっている)
a = 1
print(a, type(a))

a = 1.0
print(a, type(a))

a = True
print(a, type(a))

a = 'hello'
print(a, type(a))
1 <class 'int'>
1.0 <class 'float'>
True <class 'bool'>
hello <class 'str'>

解説

  • 変数 a に「値」が代入できている
  • 変数 a の「値」を参照(読み出し)できている
  • 変数 a の型を指定していない点に注意
  • 変数 a にいろんな型を代入できている点に注意

演算子

  • 四則演算(足し算 +,引き算 -,かけ算 *,割り算 /
    • int, float に対して適用可能(一応 str にも・・)
  • 特殊な演算(整数除算 //,剰余 %,べき乗 **
    • 整数除算と剰余は int に対して適用することが多い(floatに対しても適用できるけどfloatにはほとんど使わない)
  • 文字列連結 +
    • str の足し算 :arrow_right: 文字列をつなげる
a = 1/3
print(a)

a = 6/3
print(a) # 割り切れるけどfloatになることに注意

a = 10//3
print(a)

a = 'abc' + 'def'
print(a)
0.3333333333333333
2.0
3
abcdef
  • 比較演算子(==, !=, <, <=, >, >=
    • 値が同じか違うか(int, float, str)
    • 数値の大小比較(int, float)
    • 結果はbool型で返る
print(1 == 1)
print(1 != 1)
print('abc' == 'abc')
print(1 < 3)
print(1 > 3)
print(1 <= 3)
print(3 <= 3)
print(3 < 3)
True
False
True
True
False
True
True
False
  • 代入演算子(=, +=, -=, *=, /=
    • 基本動作:左辺に置かれた「変数」に値を代入する
    • =: 右辺の値をそのまま
    • +=, -=, *=, /=: 左辺に置かれた「変数」の値を変更(更新)する
      a += 5 # a = a + 5 と同じ
      a -= 5 # a = a - 5 と同じ
      a *= 5 # a = a * 5 と同じ
      a /= 5 # a = a / 5 と同じ
      
  • 論理演算子:論理値に対して「かつ」「または」「ではない」の演算を行う
    • 否定 not.例:not x == 1
    • 論理和 or.例:x == 1 or y == 1
    • 論理積 and.例:x == 1 and y == 1

型変換

  • 原則:同じ「型」の演算しかできない
  • int, float の四則演算は適切に変換(暗黙的に型が変換されている)
    1 + 1.0 # 結果は 2.0 (float型)になる
    
  • おおまかなルール
    • 表現力が大きいものにあらかじめ変換して演算する
  • 明示的に型を変換する
    • int, float, str は互いに変換可能
      • 関数 int(x): 文字列xを整数へ変換.変換できない文字列が与えられた時はエラー
      • 関数 float(x): 文字列xを浮動小数点へ変換.変換できない文字列が与えられた時はエラー
      • 関数 str(x): x を文字列へ変換
  • 変数 a = 'abc', b = 10 から文字列 'abc10' を作りたい
    a + b      # エラー
    a + str(b) # b を int から str に変えてから文字列の足し算(連結)
    
s = '1'
print(type(s))

a = int(s)
print(type(a))

a = float(s)
print(type(a))

a = 10
print(str(a))
<class 'str'>
<class 'int'>
<class 'float'>
<class 'str'>

制御文

  • 基本
    • 条件分岐: if文
    • 繰り返し: for文,while文
  • 「いま」の条件で処理するプログラムを変える
    • 「お腹がすいたらご飯を食べる.お腹がすいてなかったら遊ぶ」 :arrow_right: (いま)「お腹がすいていたら」->「ご飯を食べる」処理をする :arrow_right: (いま)「お腹がすいてなかったら」->「遊ぶ」処理をする
  • 「条件を満たすまでつづける」
    • 「壁にあたるまで前に進む」 :arrow_right: (いま)「壁に当たっている」->「止まる」 :arrow_right: (いま)「壁に当たっていない」->「一歩進む」

if文

  • ifの後に条件を記述
  • ifの最後にコロン:が必要(コロンは「いまからブロック(ひとまとまりの処理)が始まりますよ」と言う指示)
  • ブロック定義をインデント(字下げ)で行うことに注意
  • 二つ以上の分岐 if-elif-else を使う
if x == 1:
  print(x)
elif x == 2:
  print(x+5)
else:
  print(100)

Pythonのブロック定義に関する注意

  • コロン以降で字下げが開始されているところから同じ数の字下げが行われいるところまでが一つのブロック
if x == 1: # コロンがあるので次の行からブロックが始まることを期待
  処理1 # 字下げ(行頭に一つ以上の半角スペース)があるためブロック開始と認識
  処理2 # 同じ数の字下げなのでブロックが継続
    処理3 # 字下げの数が違う!(エラー)

while文

  • whileのあとに繰り返しを継続する条件を書く
  • whileの最後にコロン:が必要
  • ブロック定義をインデント(字下げ)で行う
x = 10
while x != 0:
  print(x)
  x -= 1
  • break: いまの繰り返し(ループ)を強制的に終了する
  • continue: 次のループにすすむ
x = 10
while x != 0:
  if x == 5:
    break
  print(x)
  x -= 1
x = 10
while x != 0:
  if x == 5:
    continue
  print(x)
  x -= 1

リスト(配列)

  • 複数のデータをまとめる
  • 例:「クラス5人のテストの得点の平均を計算する」 ```python score1 = 45 score2 = 100 score3 = 21 score4 = 89 score5 = 94

total = (score1 + score2 + score3 + score4 + score5) / 5 print(total)


```python
score = [45, 100, 21, 89, 94]

total = (score[0] + score[1] + score[2] + score[3] + score[4]) / 5
print(total)
  • カギ括弧で複数要素を一つの変数名で扱う
  • 「仕切り」のある箱
  • 各「仕切り」には番号がついている(0からスタート)
  • Pythonのリストの場合は各「仕切り」毎に型を持つ(違う型が混ざったリストを作ることができる)
    a = [1, 2.0, `abc`]
    print(a[0], type(a[0]))
    print(a[1], type(a[1]))
    print(a[2], type(a[2]))
    
  • Pythonのリストは可変長(配列の要素を後から追加・削除できる)

リストの長さを変えない例

a = [10, 20, 30] # カギ括弧でリストを定義
print(a[0]) # 最初の要素にアクセス
print(a[1]) # 二番目の要素にアクセス
a[0] = 100 # 最初の要素を変更
print(a)

リストの長さを変える例

a = [10, 20, 30] # リストを定義
a.append(100) # 要素を追加
print(a)
a.append(200) # 要素を追加
print(a)
a.append(300) # 要素を追加
print(a)
  • Pythonではカギ括弧でリストを表す
  • 最初から要素を入れても良いし,空のリスト [] を作ることもできる
  • 要素はどんな型でも良い.例えば a=[1, 10.0, True, 'abc']としても良い
  • リストの要素をリストにすることもできる.a = [[1,2], [3,4]]
  • リストに要素を追加する場合はappendメソッドを使う.書式はピリオド.を利用して
      リスト.append(追加要素)
    

    のように書く

for 文

  • リストのような集合要素に対して,各要素を頭から順番に変数に代入してブロック内部の処理を実行する
  • 書式
for 変数 in リスト:
  変数に対する処理ブロック

例:1から5までのループ

a = [10, 20, 30, 40, 50]
for x in a:
  print(x)
score = [45, 100, 21, 89, 94]

total = 0
for x in score:
  total += x
print(total)
  • Pythonのfor文は他の言語でforeachと呼ばれるもので「リストの各要素に何の処理をするか」と言う観点で記述する
  • for文とあわせて rangelen をよく使う
  • rangerange(start,stop)と書くと, start<=i<stop の範囲を表す
  • range(start,stop,step)と書くと,start<=i<stop の範囲をstartからstepずつ増加する値になる

例:rangeの使用

a = [10, 20, 30, 40, 50]
for i in range(5): # range(5)は[0,1,2,3,4]のリストを作る
  print(a[i])

例:rangeとlenの使用

a = [10, 20, 30, 40, 50]
for i in range(len(a)): # len(a)はリストaの長さを返す
  print(a[i])

関数

  • よく使う処理をひとまとめにする
  • ある与えられた入力に対する処理をして対応する出力を返す
    y = f(x)
    
  • 例:二次方程式 $ax^2+bx+c=0$ の実数解を返す関数
    • 入力値:係数 a, b, c
    • 出力値:実数解(二つの解,重解,解なし)
  • Pythonではdefを使って関数を定義する
  • 関数定義に際して,引数および戻り値の型は特に指定しない(動的型付け)
  • 関数の内部処理はブロックで記述する
  • 戻り値は return で指定する
def f(a, b, c):
  d = b**2 - 4*a*c
  if d > 0:
      x0 = (-b + d**0.5) / (2*a)
      x1 = (-b - d**0.5) / (2*a)
      return [x0, x1]
  elif d == 0:
      return -b / (2*a)
  else:
      return None

print(f(1, -3, 2))
print(f(1, -2, 1))
print(f(1, -1, 1))
  • Pythonのdefは引数および戻り値に型がない(なんでも受け取り,なんでも返せる)ため,二次関数の解を求める例では判別式 d の値によって異なる型を戻り値としている
  • 引数に対しても型指定がないので,a,b,cをint, floatのいずれで与えてもきちんと動作する
  • PythonにおけるNoneは特殊な値
  • **はべき乗の演算子.平方根は0.5乗

まとめ

  • Pythonは動的型付け言語であり、変数の型を明示的に指定する必要がない
  • 基本的な文法はシンプルで、インデントによるブロック定義が特徴
  • リストや関数などの基本的なデータ構造と制御文を理解することで、Pythonのプログラミングが可能になる