Pythonを学べ
なにせ簡単だからな。
この記事はPythonの基本構造と基礎を理解するための記事です。
特大ボリュームで作ってます。
概要
この記事のざっくり紹介
目的
- Pythonの初歩を学んでスキルアップを目指す。
- Pythonを使ってプログラミングに必要な思考を養う。
コース内容
1. Pythonとは
Pythonは1991年にグイド・ヴァン・ロッサムにより開発されたプログラミング言語である。
最初にリリースされたPythonの設計哲学は、ホワイトスペース(オフサイドルール)の顕著な使用によってコードの可読性を重視している。その言語構成とオブジェクト指向のアプローチは、プログラマが小規模なプロジェクトから大規模なプロジェクトまで、明確で論理的なコードを書くのを支援することを目的としている。
最近だとAIで活用されていたりする初心者向け言語です。
2. 環境構築
2.1 Pythonのインストール
Pythonのインストールは公式サイトからダウンロードできます。
Pythonは2.x系と3.x系がありますが、今回は3.x系を使います。
2.2 エディタのインストール
Pythonのコードを書くためにはエディタが必要です。
エディタはいくつかありますが、今回はVisual Studio Codeを使います。
2.3 Visual Studio Codeの設定
Visual Studio Codeを起動して、拡張機能をインストールします。
CTRL + Shift + X
で拡張機能の画面が開きます。
拡張機能は検索バーから以下のものをインストールしてください。
- Python
- Python for VSCode
2.4. Pythonファイルの作成
Visual Studio CodeでPythonのファイルを作成します。
CTRL + N
で新規ファイルを作成し、main.py
という名前で保存します。
3. プログラムの基本構造
3.1. 順次処理
Pythonのプログラムは上から順に実行されます。
greeting.py
を作成し、以下のコードを実行してみましょう。
print("Good Morning")
print("Good Afternoon")
print("Good Evening")
3.2. 変数
変数は値を格納するための箱のようなものです。
Pythonは参照型のため、正確には「値(オブジェクト)に名前や名札をつける」といった表現のほうが正しいです。
variable.py
を作成し、以下のコードを実行してみましょう。
name = "Taro"
print(name)
以下のように出力されます。
$ python variable.py
Taro
=
はミリデタ(区切り文字)と呼ばれ、右辺の値を左辺の変数に代入する特殊な記号です。
name = "Taro"
では、"Taro"
という文字列をname
と名付けています。
3.3. データ型
データ型は値の種類を表します。
Pythonには以下のようなデータ型があります。
- 数値
- 整数 (int)
- 浮動小数点数 (float)
- 複素数 (complex)
- 文字列 (str)
- ブール値 (bool)
- リスト (list)
- タプル (tuple)
- 辞書 (dict)
- 集合 (set)
Pythonは動的型付け言語なので、変数に代入された値によってデータ型が決まります。
値(オブジェクト)の型を調べるにはtype()
関数を使います。
3.3.1. 数値
数値は整数と浮動小数点数の2種類があります。
number.py
を作成し、以下のコードを実行してみましょう。
# 整数
num1 = 1
print(num1)
ptint(type(num1))
# 浮動小数点数
num2 = 1.0
print(num2)
print(type(num2))
以下のように出力されます。
$ python number.py
1
<class 'int'>
1.0
<class 'float'>
3.3.2. 文字列
文字列は"
もしくは'
で囲まれた文字のことです。
状況によっては三重クオートも使用します。
string.py
を作成し、以下のコードを実行してみましょう。
name = "Taro"
print(name)
print(type(name))
以下のように出力されます。
$ python string.py
Taro
<class 'str'>
3.3.3. ブール値
ブール値はTrue
もしくはFalse
の2種類の値を持ちます。
boolean.py
を作成し、以下のコードを実行してみましょう。
flag = True
print(flag)
print(type(flag))
以下のように出力されます。
$ python boolean.py
True
<class 'bool'>
3.3.4. リスト
リストは複数の値を格納することができます。
list.py
を作成し、以下のコードを実行してみましょう。
names = ["Taro", "Jiro", "Saburo"]
print(names)
print(type(names))
以下のように出力されます。
$ python list.py
['Taro', 'Jiro', 'Saburo']
<class 'list'>
3.3.5. タプル
タプルは複数の値を格納することができます。
リストとの違いは、タプルは変更できないという点です。
tuple.py
を作成し、以下のコードを実行してみましょう。
names = ("Taro", "Jiro", "Saburo")
print(names)
print(type(names))
以下のように出力されます。
$ python tuple.py
('Taro', 'Jiro', 'Saburo')
<class 'tuple'>
リストとの違いを確認するために、以下のコードを実行してみましょう。
names = ("Taro", "Jiro", "Saburo")
names[0] = "Shiro"
print(names)
以下のように出力されます。
$ python tuple.py
Traceback (most recent call last):
File "tuple.py", line 2, in <module>
names[0] = "Shiro"
TypeError: 'tuple' object does not support item assignment
これはタプルは変更できないというエラーです。
ではリストではどうなるか確認してみましょう。
names = ["Taro", "Jiro", "Saburo"]
names[0] = "Shiro"
print(names)
以下のように出力されます。
$ python list.py
['Shiro', 'Jiro', 'Saburo']
リストは変更できることがわかります。
リストやタプルは任意の場所に格納された値のみを取り出すことができます。
list.py
を作成し、以下のコードを実行してみましょう。
names = ["Taro", "Jiro", "Saburo"]
print(names[0])
print(names[1])
print(names[2])
以下のように出力されます。
$ python list.py
Taro
Jiro
Saburo
番号を指定して値を取り出すことをインデックスと呼びます。
インデックスは0から始まることに注意してください。
リストやタプルはlen()
関数で要素数を取得することができます。
names = ["Taro", "Jiro", "Saburo"]
print(len(names))
以下のように出力されます。
$ python list.py
3
リストとタプルの中にリストやタプルを入れることもできます。
これは多次元配列と呼ばれます。
multi_dimensional_array.py
を作成し、以下のコードを実行してみましょう。
names = [["Taro", "Jiro", "Saburo"], ["Shiro", "Goro", "Rokuro"]]
print(names)
print(type(names))
以下のように出力されます。
$ python multi_dimensional_array.py
[['Taro', 'Jiro', 'Saburo'], ['Shiro', 'Goro', 'Rokuro']]
<class 'list'>
多次元配列でもインデックスを使って値を取り出すことができます。
multi_dimensional_array_index.py
を作成し、以下のコードを実行してみましょう。
names = [["Taro", "Jiro", "Saburo"], ["Shiro", "Goro", "Rokuro"]]
print(names[0][0])
print(names[0][1])
print(names[0][2])
print(names[1][0])
print(names[1][1])
print(names[1][2])
以下のように出力されます。
$ python multi_dimensional_array_index.py
Taro
Jiro
Saburo
Shiro
Goro
Rokuro
また、インデックスは頭からではなく後ろからでも取得が可能です。
その際は-x
を使用します。
reverse_index.py
を作成し、以下のコードを実行してみましょう。
names = ["Taro", "Jiro", "Saburo"]
print(names[-1])
print(names[-2])
print(names[-3])
以下のように出力されます。
$ python reverse_index.py
Saburo
Jiro
Taro
3.3.6. 辞書
辞書はキーと値のペアを格納することができます。
3.3.7. 集合
集合は重複しない値を格納することができます。
3.4. 演算子
演算子は値を計算するための記号です。
Pythonには以下のような演算子があります。
- 算術演算子
-
+
加算 -
-
減算 -
*
乗算 -
/
除算 -
//
切り捨て除算 -
%
剰余 -
**
べき乗
-
- 比較演算子
-
==
等しい -
!=
等しくない -
>
より大きい -
<
より小さい -
>=
以上 -
<=
以下
-
- 論理演算子
-
and
かつ -
or
または -
not
でない
-
- 代入演算子
-
=
代入 -
+=
加算代入 -
-=
減算代入 -
*=
乗算代入 -
/=
除算代入 -
//=
切り捨て除算代入 -
%=
剰余代入 -
**=
べき乗代入
-
3.4.1. 算術演算子
算術演算子は数値を計算するための演算子です。
arithmetic.py
を作成し、以下のコードを実行してみましょう。
num1 = 1
num2 = 2
print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 / num2)
print(num1 // num2)
print(num1 % num2)
print(num1 ** num2)
以下のように出力されます。
$ python arithmetic.py
3
-1
2
0.5
0
1
1
3.4.2. 比較演算子
比較演算子は値を比較するための演算子です。
比較演算子は真偽値を返します。
comparison.py
を作成し、以下のコードを実行してみましょう。
num1 = 1
num2 = 2
print(num1 == num2)
print(num1 != num2)
print(num1 > num2)
print(num1 < num2)
print(num1 >= num2)
print(num1 <= num2)
以下のように出力されます。
$ python comparison.py
False
True
False
True
False
True
3.4.3. 論理演算子
論理演算子は真偽値を計算するための演算子です。
論理演算子は真偽値を返します。
logical.py
を作成し、以下のコードを実行してみましょう。
flag1 = True
flag2 = False
print(flag1 and flag2)
print(flag1 or flag2)
print(not flag1)
以下のように出力されます。
$ python logical.py
False
True
False
3.4.4. 代入演算子
代入演算子は値を代入するための演算子です。
計算した結果を代入したい場合に使います。
assignment.py
を作成し、以下のコードを実行してみましょう。
num = 1
num += 10
print(num)
num -= 1
print(num)
num *= 2
print(num)
num /= 2
print(num)
num //= 2
print(num)
num %= 2
print(num)
num **= 2
print(num)
以下のように出力されます。
$ python assignment.py
11
10
20
10.0
5.0
1.0
1.0
3.5. 条件分岐
3.5.1. if文
条件分岐は条件によって処理を分岐するための構文です。
if.py
を作成し、以下のコードを実行してみましょう。
num = 1
if num == 1:
print("num is 1")
以下のように出力されます。
$ python if.py
num is 1
if
の後に条件を書き、:
をつけます。
次の行からはインデントを揃えて処理を書きます。
インデントはスペース4つまたは2つで揃えます。
インデントを揃えないとエラーになるので注意してください。
3.5.2. else文
if
の後にelse
を書くと、条件がFalse
の場合に実行される処理を書くことができます。
if_else.py
を作成し、以下のコードを実行してみましょう。
num = 1
if num == 2:
print("num is 1")
else:
print("num is not 1")
以下のように出力されます。
$ python if_else.py
num is not 1
numの値を変えると出力が変わります。
3.5.3. elif文
if
の後にelif
を書くと、条件がFalse
の場合にさらに条件を書くことができます。
if_elif.py
を作成し、以下のコードを実行してみましょう。
num = 1
if num == 2:
print("num is 2")
elif num == 1:
print("num is 1")
else:
print("num is not 1")
以下のように出力されます。
$ python if_elif.py
num is 1
これもnumの値を変えると出力が変わります。
elif
は複数書くことができます。
if_elif_elif.py
を作成し、以下のコードを実行してみましょう。
num = 1
if num == 2:
print("num is 2")
elif num == 1:
print("num is 1")
elif num == 0:
print("num is 0")
else:
print("num is not 1")
以下のように出力されます。
$ python if_elif_elif.py
num is 1
3.5.4. case文
case
を使用して条件分岐を書くこともできます。
case.py
を作成し、以下のコードを実行してみましょう。
x = 1
match num:
case int(x) if sample > 0:
print("sample is integer and greater than 0")
case str(x) if sample == "hello":
print("sample is string and 'hello'")
case int(x):
print("sample is integer")
case str(x):
print("sample is string")
case _:
print("other!")
以下のように出力されます。
$ case.py
sample is integer
4. 関数
関数は処理をまとめて名前をつけたものです。
関数を使うことで、同じ処理を何度も書く必要がなくなります。
function.py
を作成し、以下のコードを実行してみましょう。
def hello():
print("Hello")
hello()
以下のように出力されます。
$ python function.py
Hello
4.1. 関数の定義
関数を定義するにはdef
を使います。
def 関数名():
処理
4.2. 関数の呼び出し
関数を呼び出すには関数名の後に()
をつけます。
関数名()
4.3. 引数
関数には引数を渡すことができます。
引数は関数の中で使う変数のようなものです。
argument.py
を作成し、以下のコードを実行してみましょう。
def hello(name):
print("Hello " + name)
hello("Taro")
以下のように出力されます。
$ python argument.py
Hello Taro
引数は複数渡すこともできます。
argument.py
を作成し、以下のコードを実行してみましょう。
def hello(name1, name2):
print("Hello " + name1 + " and " + name2)
hello("Taro", "Jiro")
以下のように出力されます。
$ python argument.py
Hello Taro and Jiro
4.4. 戻り値
関数は戻り値を返すことができます。
戻り値は関数の呼び出し元に返される値です。
return.py
を作成し、以下のコードを実行してみましょう。
def hello(name):
return "Hello " + name
print(hello("Taro"))
以下のように出力されます。
$ python return.py
Hello Taro
4.5. ラムダ式
ラムダ式は無名関数のことです。
lambda.py
を作成し、以下のコードを実行してみましょう。
hello = lambda name: print("Hello " + name)
hello("Taro")
以下のように出力されます。
$ python lambda.py
Hello Taro
ラムダ式は簡易的に関数を定義するために使われます。
推奨される状況は多くはありませんが、関数の引数に関数を渡すときに使われることがあります。
5. クラス
クラスはオブジェクト指向プログラミングの概念です。
クラスを使うことで、同じ構造のオブジェクトを作成することができます。
class.py
を作成し、以下のコードを実行してみましょう。
class Person:
def __init__(self, name):
self.name = name
def hello(self):
print("Hello " + self.name)
person = Person("Taro")
person.hello()
以下のように出力されます。
$ python class.py
Hello Taro
クラスは関数をたくさん定義する際の整理などによく使われます。
6. 例外処理
例外処理はエラーが発生したときに処理を実行するための構文です。
exception.py
を作成し、以下のコードを実行してみましょう。
try:
num = 1 / 0
except ZeroDivisionError:
print("ZeroDivisionError")
以下のように出力されます。
$ python exception.py
ZeroDivisionError
try
の中でエラーが発生すると、except
の中の処理が実行されます。
except
の後にエラーの種類を書きます。
エラーの種類は複数書くことができます。
exception.py
を作成し、以下のコードを実行してみましょう。
try:
num = 1 / a
except ZeroDivisionError:
print("ZeroDivisionError")
except TypeError:
print("TypeError")
以下のように出力されます。
$ python exception.py
TypeError
except
の後にエラーの種類を書かない場合は、全てのエラーに対応します。
try:
num = 1 / a
except:
print("Error")
以下のように出力されます。
$ python exception.py
Error
7. モジュール
モジュールはPythonの標準機能を拡張するための機能です。
モジュールを使うことで、標準機能にない機能を使うことができます。
module.py
を作成し、以下のコードを実行してみましょう。
import math
print(math.pi)
以下のように出力されます。
$ python module.py
3.141592653589793
import
を使ってモジュールを読み込みます。
math
モジュールは数学関数を提供しています。
math.pi
は円周率を表します。
モジュールを読み込むときにas
を使うと、モジュール名を変更することができます。
import math as m
print(m.pi)
モジュールの一部のみを読み込むこともできます。
from math import pi
print(pi)
モジュールの一部のみを読み込むときにas
を使うと、モジュール名を変更することができます。
from math import pi as p
print(p)
8. パッケージ
パッケージはモジュールをまとめたものです。
パッケージを使うことで、モジュールを階層的に管理することができます。
import package1.package2.module
package1.package2.module.hello()
9. ファイル操作
ファイル操作はファイルを読み書きするための機能です。
file.py
を作成し、以下のコードを実行してみましょう。
file = open("file.txt", "w")
file.write("Hello")
file.close()
open()
関数でファイルを開きます。
open()
関数の第一引数にファイル名を、第二引数にモードを指定します。
モードは以下のように指定します。
-
r
読み込み -
w
書き込み -
a
追記 -
r+
読み書き
write()
関数でファイルに書き込みます。
close()
関数でファイルを閉じます。
file.txt
を作成し、以下のコードを実行してみましょう。
file = open("file.txt", "r")
print(file.read())
file.close()
read()
関数でファイルを読み込みます。
$ python file.py
Hello
with文を使うと、close()
関数を書かなくてもファイルを閉じることができます。
with open("file.txt", "r") as file:
print(file.read())
With文を使うことで閉じ忘れによるエラーを防ぐことができます。
10. 実践
以下に練習用の課題を用意しました。
課題を解いてみましょう。
10.1. 簡単な計算
あなたの生年月日を四則計算してみましょう。
以下のようなコードを作成してください。
-
calculation.py
というファイルを作成する -
calculation.py
を実行すると、あなたの生年月日を四則計算した結果が出力される - 四則計算は以下のようなものを行う。
‐ 年 足す 月
‐ 月 引く 日
‐ 年 掛ける 日
‐ 年 割る 日
少し高度にやってみたい人は...
-
input()
関数を使うと、ユーザーからの入力を受け取ることができる
name = input("名前を入力してください: ")
print(name)
ヒント
この記事の内容を参考にしてみましょう。
答え
year = 2006
month = 6
day = 14
print(year + month)
print(month - day)
print(year * day)
print(year / day)
高度にやってみたい人は...
year = int(input("年を入力してください: "))
month = int(input("月を入力してください: "))
day = int(input("日を入力してください: "))
print(year + month)
print(month - day)
print(year * day)
print(year / day)
10.2. じゃんけん
じゃんけんを作ってみましょう。
以下のようなコードを作成してください。
-
janken.py
というファイルを作成する -
janken.py
を実行すると、じゃんけんができる - じゃんけんは以下のようなものを行う。
‐ ユーザーが手を入力する
‐ コンピューターが手をランダムに決める
‐ 勝敗を判定する
‐ 勝敗を出力する
random
モジュールを使うと、ランダムな値を取得することができる
import random
print(random.randint(0, 2))
このコードでは、0から2のランダムな値を取得できます。
ヒント
この記事の内容を参考にしてみましょう。
勝利条件を判定するときは、どの構文を使えばいいでしょうか?
答え
import random
user = int(input("0: グー, 1: チョキ, 2: パー: "))
computer = random.randint(0, 2)
if user == computer:
print("あいこ")
elif user == 0 and computer == 1:
print("勝ち")
elif user == 1 and computer == 2:
print("勝ち")
elif user == 2 and computer == 0:
print("勝ち")
else:
print("負け")
すべてのパターンを書くのは大変かつ冗長になってしまうので条件を精査して単純化してみましょう。
10.3. ファイル操作
ファイル操作をしてみましょう。
以下のようなコードを作成してください。
-
file.py
というファイルを作成する -
file.py
を実行すると、file.txt
というファイルが作成される -
file.txt
には以下のような内容が書き込まれる
‐ あなたの名前
‐ あなたの年齢
‐ あなたの身長
‐ あなたの体重
ヒント
この記事の内容を参考にしてみましょう。
ファイルを操作するときは、どの構文を使えばいいでしょうか?
答え
name = "Taro"
age = 15
height = 170.0
weight = 60.0
file = open("file.txt", "w")
file.write(name + "\n")
file.write(str(age) + "\n")
file.write(str(height) + "\n")
file.write(str(weight) + "\n")
file.close()
inputを使用すると、ユーザーからの入力を受け取ることができます。
name = input("名前を入力してください: ")
age = int(input("年齢を入力してください: "))
height = float(input("身長を入力してください: "))
weight = float(input("体重を入力してください: "))
file = open("file.txt", "w")
file.write(name + "\n")
file.write(str(age) + "\n")
file.write(str(height) + "\n")
file.write(str(weight) + "\n")
file.close()