Pythonは、汎用プログラミング言語であり、コードが読みやすく、書きやすい特徴があります。
Python の強みは上記の様に簡単に記述できるといったものがありますが、C言語等とは異なりマシン後への変換まではしませんので実行速度は遅いです。ただし、実際は多くのライブラリでC言語等の資源を使い高速に動作する事も多いです。
Python ではコメントアウトするには以下の様に # を使います。
# コメント
~処理~
# コメント
~処理~
また、慣例として文字リテラルを使って複数行のコメントアウトを行っている場合もありますが、こちらは公式の方法ではなく、かつ文字リテラルであるため実行時にメモリに格納され多少の影響があります。
"""
コメント
コメント
コメント
"""
~処理~
"""
コメント
コメント
コメント
"""
他の言語ですと波括弧 {} を使ってグループを作るところをPythonではインデント(先頭のタブ、スペースの事)を使います。
一般的にはスペース4つもしくはタブ1つで一つのインデントになります。以下は例です。
def kansuu(a, b):
if a > b:
c = a + b
else:
c = a - b
return c
基本的な算術演算子、比較演算子、論理演算子をサポートしています。
10 + 5 # 足し算 (15)
10 > 5 # 比較演算子 (True)
not False # 論理演算子 (True)
Pythonは動的型付けの言語なので、変数に値を割り当てるとその型が決まります。
例えば、整数型ですと小数点以下は存在せず、ブール型ですと True か False の2値しか入れる事ができません。
x = 10 # 整数型
y = 3.14 # 浮動小数点型
name = "Python" # 文字列型
is_active = True # ブール型
データ型を確認するには type クラスを使用します。
x = 10
type(x) # <class 'int'>
データ型を変換する場合は以下の様にします。
x = 10
type(x) # <class 'int'>
y = float(x)
type(y) # <class 'float'>
もし、データ型を明示したい場合は以下の様にします。ただし結果の通りあくまで注釈なだけで実行前にチェック等は行いませんので以下の通り float とした変数 y のデータ型は内容から型が付けられて int になっています。
x: int = 10
y: float = 10
type(x) # <class 'int'>
type(y) # <class 'int'>
z: float = 10.0
type(z) # <class 'float'>
リストは複数のアイテムを格納できるデータ型です。リスト内のアイテムは変更可能です。
fruits = ["apple", "banana", "cherry"]
fruits.append("orange") # リストにアイテムを追加
print(fruits[1]) # リストの2番目のアイテムを表示
辞書はキーと値のペアを格納するデータ型です。キーは一意であり、値は変更可能です。
person = {"name": "Alice", "age": 25}
print(person["name"]) # "Alice"を表示
person["age"] = 26 # 値を更新
条件分岐を使うことで、プログラムが状況に応じて異なる動作をするように制御できます。
if a > b:
print("aはbより大きい")
elif a == b:
print("aとbは等しい")
else:
print("aはbより小さい")
ループを使うことで、繰り返しの処理を簡単に実行できます。
C言語等のfor文とは異なり、反復可能な変数の中身を一つずつ取り出して処理をするといったものです。
range(5) は range オブジェクトを作るものでリストに変換すると [0,1,2,3,4] になります。
for i in range(5):
print(i) # 0から4までの数値を表示
また、whileによるループもあります。上記と等価なwhileループは以下になります。
i = 0
while i < 5
print(i) # 0から4までの数値を表示
i+=1
関数は、特定のタスクを実行するためのコードの塊です。関数を定義することで、コードの再利用が可能になります。
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # "Hello, Alice!"を表示
また、よくある物としてmain関数を定義しファイルが直接実行された場合はmain関数を実行するといったものがあります。
下記では __name__
といった変数に直接実行された時は __main__
が入るといった事を利用しています。
def main():
1 + 1 == 3
if __name__ == "__main__":
main()
Pythonでは、ファイルの読み書きが簡単に行えます。
# 書き込み
file = open("example.txt", "w")
file.write("Hello, world!")
file.close()
# 読み込み
file = open("example.txt", "r")
content = file.read()
print(content) # "Hello, world!"を表示
file.close()
また、上記では明示的に close を行っていますが with キーワードを使う事で以下の様にすることが可能です。
ファイルの閉じ忘れによる問題は度々ありますので特に理由がなければ with キーワードを使った書き方をしましょう。
with open("example.txt", "w") as file:
file.write("Hello, world!")
with open("example.txt", "r") as file:
content = file.read()
print(content) # "Hello, world!"を表示
エラーハンドリングを使用すると、プログラムがクラッシュするのを防ぎ、エラーが発生したときに適切な対応が取れるようになります。
try:
result = 10 / 0
except ZeroDivisionError:
print("ゼロで割ることはできません。")
finally:
print("このメッセージは必ず表示されます。")
また、明示的にエラーを起こすには raise
を使います。
a = 1
b = 0
try:
if b == 0:
raise ZeroDivisionError("ゼロで割ることはできません。")
a / b
except ZeroDivisionError as e:
print(e)
finally:
print("このメッセージは必ず表示されます。")
Python には標準ライブラリが豊富に揃っており、モジュールをインポートすることで追加の機能を簡単に利用できます。
import math
print(math.sqrt(16)) # 4.0を表示
上記は math の中に sqrt といったものがあるので以下の様にすることで sqrt だけを読み込むことも可能です。
from math import sqrt
print(sqrt(16)) # 4.0を表示
また、以下の様に as
を使う事で別名(エイリアス)をつける事が可能です。一部のライブラリでは慣習的に省略した名前を使う事があります。
from math import sqrt as sq
print(sq(16)) # 4.0を表示
ここまで学んだ内容を使って、簡単なアプリケーションを作成してみましょう。
例: 数字当てゲーム
# 乱数を生成するためのモジュールを読み込む
import random
def guess_number():
# 範囲 [1, 10] の乱数を生成
number_to_guess = random.randint(1, 10)
guess = None
# guess と number_to_guess が異なる場合はループする
while guess != number_to_guess:
guess = int(input("1から10の間の数字を予想して入力してください: "))
if guess < number_to_guess:
print("もっと大きい数字です。")
elif guess > number_to_guess:
print("もっと小さい数字です。")
print("正解です!")
guess_number()
上記の説明では省きましたがC言語から入った人にとって以下の部分について馴染みがないかと思われます。
file = open("example.txt", "r")
content = file.read()
print(content) # "Hello, world!"を表示
file.close()
Python はオブジェクト指向プログラミング言語でもありますので上記では open によって ファイルオブジェクトが作成され、ファイルオブジェクトが持っているメソッド read や close を呼び出しています。
また、Python ではすべてオブジェクトですので例えば int 型の変数 i も以下のように複素数に関する real/imag メソッドを呼び出す事が出来ます。
i = 10
i.real # 10
i.imag # 0
オブジェクトが持つメソッドについて知るには dir()
もしくは help()
を使用します。
今回の課題では特に NumPy といった算術ライブラリの ndarray といったオブジェクトが頻出すると思われます。 ndarray には便利なメソッドが多くありますので自身で処理を実装せずに適宜メソッドを利用できるようになりましょう。