Pythonの基礎を学ぼう!


はじめに

Pythonを学び始めるとき、基本的な概念をしっかりと理解することが非常に重要です。この記事では、Pythonプログラミングの基礎となる要素を順番に解説し、それぞれに対して実践的な演習問題を提供しました。Pythonの学習は、変数とデータ型から始まり、演算子、文字列操作、コントロールフロー、データ構造、関数、スコープ、モジュールとパッケージ、そしてエラー処理に関する知識を段階的に学習していくプロセスです。
段階が進むごとに高度な内容になってくるので諦めずにチュレンジして下さい!

Pythonでのプログラミング学習を始める際には、以下の点に注意してください
実践を通じて学ぶ:理論だけでなく、実際にコードを書きながら学ぶことが重要です。この記事で提供された演習問題を解くことから始めてください。
基礎から応用へ:基本的な概念をしっかりとマスターした後に、より複雑なトピックやプロジェクトに挑戦してください。
エラーを恐れない:プログラミングではエラーが発生するのが普通です。エラーメッセージを読み解き、問題を解決する過程で学びが深まります。

開発環境について

初心者が躓きやすい最初の壁に開発環境構築というものがあります。そこで本記事では、Replitを紹介します。Replitは、ブラウザ上で直接コードを書き、実行できるオンラインの開発環境を提供するウェブサービスです。特に初学者や、すぐにプロジェクトを始めたい開発者にとって、ローカル環境の複雑なセットアップを避けることができる便利なツールです。
使い方は以下の記事を参考↓


基礎の学習

Pythonの基礎 (1)変数とデータ型

変数
Pythonで変数を使用するとき、特別な宣言は必要ありません。変数に値を代入するだけで、その変数が作成されます。変数名は文字で始まり、文字、数字、アンダースコアを含むことができます。例えば、x = 5とすることで、xという名前の変数に整数の5を代入しています。

データ型
Pythonにはいくつかの基本的なデータ型があります
整数(int): 正または負の整数。例:5, -3
浮動小数点数(float): 小数点を含む数値。例:3.14, -0.001
文字列(str): テキストや文字の列。シングルクォート(')またはダブルクォート(")で囲みます。例:'こんにちは', "Python"
ブーリアン(bool): TrueまたはFalseのいずれかの値を持つデータ型。

演習問題
それでは、学習内容を確かめるための演習問題をいくつか解いてみましょう。

  1. 整数10、浮動小数点数5.5、文字列'Hello World'をそれぞれ異なる変数に代入してください。

  2. それぞれの変数のデータ型をtype()関数を使って確認し、どのようなデータ型が出力されるか予想してください。※type()関数は変数の方を返します

  3. 整数の変数と浮動小数点数の変数を足した結果を新しい変数に代入し、その結果の値とデータ型を確認してください。

解答例

# 1. 整数10、浮動小数点数5.5、文字列'Hello World'をそれぞれ異なる変数に代入
int_var = 10
float_var = 5.5
str_var = 'Hello World'
# 2. それぞれの変数のデータ型をtype()関数を使って確認
print(type(int_var))  # 出力: <class 'int'>
print(type(float_var)) # 出力: <class 'float'>
print(type(str_var))   # 出力: <class 'str'>
# 3. 整数の変数と浮動小数点数の変数を足した結果を新しい変数に代入し、その結果の値とデータ型を確認
result_var = int_var + float_var
print(result_var)  # 出力: 15.5
print(type(result_var))  # 出力: <class 'float'>
#整数と浮動小数点数を足すと、結果は浮動小数点数(float)になります。
#この場合、15.5という結果とそのデータ型がfloatであることが確認できます。

・print()関数は、指定された文字列や数値などのデータを標準出力(通常は画面)に表示します。
・#記号は、コメントを記述するために使用されます。コメントはプログラムの実行には影響せず、コードの説明や一時的にコードを無効化するために使われます。


Pythonの基礎 (2)演算子

算術演算子
Pythonでは、基本的な算術演算に以下の演算子を使用します
+ 加算
- 減算
* 乗算
/ 除算
// 切り捨て除算
% 剰余(モジュラス)
** べき乗

比較演算子
オブジェクト間の比較には以下の演算子が用いられます
== 等しい
!= 等しくない
> より大きい
< より小さい
>= 以上
<= 以下

論理演算子
論理値(ブーリアン)を操作するために、以下の演算子が使用されます
and 論理積(両方がTrueの場合のみTrue
or 論理和(どちらかがTrueの場合にTrue
not 論理否定(TrueならFalseFalseならTrue

演習問題
それでは、学習した内容を確かめるための演習問題を解いてみましょう。

  1. 82を使って、すべての算術演算子を少なくとも一度ずつ使った計算を書いてください。

  2. 変数a = 10b = 20を定義し、これらの変数を使って、すべての比較演算子の例を書いてください。

  3. TrueFalseを使って、すべての論理演算子の例を書いてください。

解答例

# 1. すべての算術演算子の使用例
# 加算
print(8 + 2)  # 出力: 10
# 減算
print(8 - 2)  # 出力: 6
# 乗算
print(8 * 2)  # 出力: 16
# 除算
print(8 / 2)  # 出力: 4.0
# 切り捨て除算
print(8 // 2)  # 出力: 4
# 剰余
print(8 % 2)  # 出力: 0 (8は2で割り切れるため)
# べき乗
print(8 ** 2)  # 出力: 64
# 2. すべての比較演算子の使用例
a = 10
b = 20

# 等しい
print(a == b)  # 出力: False
# 等しくない
print(a != b)  # 出力: True
# より大きい
print(a > b)  # 出力: False
# より小さい
print(a < b)  # 出力: True
# 以上
print(a >= b)  # 出力: False
# 以下
print(a <= b)  # 出力: True
# 3. すべての論理演算子の使用例
# and (論理積)
print(True and False)  # 出力: False
# or (論理和)
print(True or False)  # 出力: True
# not (論理否定)
print(not True)  # 出力: False

Pythonの基礎 (3)文字列操作

文字列の作成
Pythonでは、文字列をシングルクォート(')またはダブルクォート(")で囲んで作成します。三重クォート(''' または """)を使用すると、複数行にわたる文字列を作成することができます。

基本的な操作
連結: + を使って文字列を連結することができます。
繰り返し: * を使って、文字列を繰り返し表示させることができます。
インデックスアクセス: [] を使って、文字列の特定の位置の文字にアクセスすることができます。インデックスは0から始まります。
スライス: [] とコロン(:)を使って、文字列の部分文字列を取得することができます。

文字列メソッド
Pythonの文字列には、文字列を操作するための便利なメソッド(関数)が多数用意されています。いくつかの例を紹介します
upper(): 文字列を大文字に変換します。
lower(): 文字列を小文字に変換します。
strip(): 文字列の両端から空白を取り除きます。
split(): 文字列を指定した区切り文字で分割してリストを返します。
replace(): 文字列内の部分文字列を他の文字列で置き換えます。

演習問題
それでは、文字列操作に関する演習問題を解いてみましょう。

  1. "Hello, World!" という文字列を変数に代入し、全て大文字に変換してください。

  2. " Python programming " という文字列から両端の空白を取り除いてください。

  3. "apple, banana, cherry" という文字列をカンマとスペースで分割して、リストにしてください。※リストについては後ほど詳しく解説します。

  4. "Hello World" という文字列の"World""Python"に置き換えてください。

# 1. "Hello, World!" を全て大文字に変換
text = "Hello, World!"
upper_text = text.upper()
print(upper_text)  # 出力: HELLO, WORLD!
# 2. " Python programming " から両端の空白を取り除く
text = "   Python programming    "
stripped_text = text.strip()
print(stripped_text)  # 出力: Python programming
# 3. "apple, banana, cherry" をカンマとスペースで分割してリストにする
fruits = "apple, banana, cherry"
fruit_list = fruits.split(", ")
print(fruit_list)  # 出力: ['apple', 'banana', 'cherry']
# 4. "Hello World""World""Python" に置き換える
greeting = "Hello World"
new_greeting = greeting.replace("World", "Python")
print(new_greeting)  # 出力: Hello Python

Pythonの基礎 (4)コントロールフロー

条件分岐(if文)
条件分岐は、特定の条件に基づいて異なるコードブロックを実行するために使用されます。Pythonではif文を使ってこれを実現します。
基本的な構文は以下の通りです

if 条件式:
    # 条件式がTrueの場合に実行されるコード
elif 別の条件式:
    # 最初の条件式がFalseで、別の条件式がTrueの場合に実行されるコード
else:
    # すべての条件式がFalseの場合に実行されるコード

ループ処理(for文とwhile文)
ループ処理を使うと、同じコードブロックを繰り返し実行することができます。Pythonでは主にfor文とwhile文の2種類があります。

for文:事前に決められた回数だけループを実行します。

for 変数 in シーケンス:
    # シーケンスの各要素に対して実行されるコード

while文:条件がTrueの間、ループを実行し続けます。

while 条件式:
    # 条件式がTrueの間実行されるコード

シーケンスとは、Pythonにおいて、要素が順序付けられているデータ構造のことを指します。シーケンスの各要素には、0から始まるインデックスでアクセスできます。Pythonにはいくつかの組み込みシーケンス型があり、主なものには次のようなものがあります。

  1. リスト (List): 要素の追加、削除、変更が可能な、変更可能(mutable)なデータ構造です。リストは角括弧[]で囲み、カンマで要素を区切って定義します。例:[1, 2, 3]

  2. タプル (Tuple): 一度作成するとその内容を変更することができない、変更不可能(immutable)なデータ構造です。タプルは丸括弧()で囲み、カンマで要素を区切って定義します(ただし、要素が一つの場合は末尾にカンマが必要)。例:(1, 2, 3)

  3. 文字列 (String): 不変(immutable)な文字のシーケンスです。シングルクォート'またはダブルクォート"で囲んで定義します。例:"hello"

  4. レンジ (Range): 数値のシーケンスを表すのに使われ、主にforループでの繰り返しに使用されます。range()関数によって生成されます。例:range(0, 5)は、0から4までの数を生成します。

演習問題
それでは、学習した内容を確かめるための演習問題を解いてみましょう。

  1. 数値を一つ変数に代入し、その数値が正の数であれば"Positive"、0であれば"Zero"、負の数であれば"Negative"と表示するプログラムを書いてください。

  2. range()関数を使用して、0から4までの数値を出力するfor文を書いてください。

  3. 変数が10に達するまで、変数の値を1ずつ増やしながら数値を出力するwhile文を書いてください。

解答例

# 1. 数値の正負を判定する
number = 5  # ここで数値を変えてみてください。

if number > 0:
    print("Positive")
elif number == 0:
    print("Zero")
else:
    print("Negative")
# 2. range()関数を使用したfor文
for i in range(5):  # 0から4までの数値を出力
    print(i)
# 今回はrange = (0, 1, 2, 3, 4, 5) なので、iが0の時, iが1の時, ...と処理をしています。
# 3. while文を使用した数値の出力
number = 0  # 初期値

while number < 10:
    print(number)
    number += 1  # number1増やす

+=は、Pythonにおける代入演算子の一種で、「加算して代入」という操作を行います。具体的には、+=の左側にある変数 number に、右側にある値 1 を加算し、その結果を左側の変数に再代入します。
number = number + 1 と同じ意味です。


Pythonの基礎 (5)データ構造を扱う

Pythonには複数のビルトインデータ構造があり、それぞれ異なる用途と特性を持っています。ここでは、主にリスト、タプル、辞書、集合の4つのデータ構造について学びます。

リスト (List)
リストは、順序を持った変更可能なコレクションです。異なるデータ型の要素を含めることができます。

my_list = [1, "Hello", 3.14]

主な操作
・要素の追加、削除
・インデックスを使用したアクセス
・スライスによる部分リストの取得

タプル (Tuple)
タプルは、順序を持った変更不可能なコレクションです。一度作成すると、その内容を変更することはできません。

my_tuple = (1, "Hello", 3.14)

主な使用場面
・変更されるべきでないデータの格納
・ディクショナリのキーとしての使用

辞書 (Dictionary)
辞書は、キーと値のペアを持つコレクションです。各キーはユニークであり、一つの辞書内で同じキーが二度現れることはありません。

my_dict = {"name": "John", "age": 30}

主な操作
・キーを使用した値の追加、更新、削除
・キーを通じて値にアクセス

集合 (Set)
集合は、順序のないユニークな要素のコレクションです。重複する要素を持つことはできません。

my_set = {1, 2, 3, 4, 5}

主な使用場面
・重複要素の除去
・集合演算(和集合、交差、差分)

演習問題
それでは、データ構造に関する演習問題を解いてみましょう。

  1. リストに新しい要素を追加し、その後、任意の要素を削除するコードを書いてください。

  2. タプルの任意の要素にアクセスするコードを書いてください。

  3. 辞書に新しいキーと値のペアを追加し、その後、キーを使用して値にアクセスするコードを書いてください。

  4. 集合に新しい要素を追加し、重複する要素を含む別の集合との和集合と交差を計算するコードを書いてください。

演習問題で使用する以下のメソッドを参考にしてください。
list.append() : listの一番後ろに指定した要素を追加します
list.remove() : listの指定したインデックスの要素を削除します
set.add() : setの一番後ろに指定した要素を追加します
set.union() : 指定した二つ以上のsetの和集合を返します
set.intersection() : 指定した二つ以上のsetの積集合を返します

解答例

# 1. リストに新しい要素を追加し、その後、任意の要素を削除する
# リストの作成 
my_list = [1, 2, 3] 
print("元のリスト:", my_list) 
# 要素の追加 
my_list.append(4) 
print("要素を追加後:", my_list)
# 要素の削除 
my_list.remove(2)
# 2を削除 
print("要素を削除後:", my_list)
# 2. タプルの任意の要素にアクセスする
# タプルの作成
my_tuple = (1, "Hello", 3.14)
print("タプルの2番目の要素:", my_tuple[1])  # 出力: Hello
# 3. 辞書に新しいキーと値のペアを追加し、その後、キーを使用して値にアクセスする
# 辞書の作成
my_dict = {"name": "John", "age": 30}
print("元の辞書:", my_dict)
# 新しいキーと値のペアを追加
my_dict["email"] = "john@example.com"
print("新しいキーと値を追加後:", my_dict)
# キーを使用して値にアクセス
print("emailの値:", my_dict["email"])
# 4. 集合に新しい要素を追加し、重複する要素を含む別の集合との和集合と交差を計算する
# 集合の作成
my_set = {1, 2, 3}
print("元の集合:", my_set)
# 要素の追加
my_set.add(4)
print("要素を追加後:", my_set)
# 別の集合を作成
another_set = {3, 4, 5, 6}
# 和集合
union_set = my_set.union(another_set)
#union_set = my_set & another_set でも可能です。
print("和集合:", union_set) #出力: 和集合: {1, 2, 3, 4, 5, 6}
# 交差(積集合)
intersection_set = my_set.intersection(another_set)
#intersection_set = my_set | another_set でも可能です。
print("交差:", intersection_set) #出力: 交差: {3, 4}

Pythonの基礎 (6)関数の定義と使用

関数は、特定のタスクを実行するためのコードのブロックです。Pythonでは、defキーワードを使って関数を定義します。関数を使用することで、コードの再利用性を高め、プログラムの構造を整理することができます。
今まで使用してきたprint()は関数の代表例です。ではなぜ定義していないのに使えたのでしょうか?
それは、print()などの関数は汎用性が高いため、Pythonの標準ライブラリの一部としてすでに定義されているからです。

関数の定義
基本的な関数の定義は以下のようになります

def 
function_name(parameters): 
    # 関数が実行するコード 
return value

function_nameは関数の名前です。
parametersは関数が受け取る引数(パラメータ)です。複数ある場合はカンマで区切ります。引数が不要な場合は空にします。
returnは関数の実行結果を呼び出し元に返します。returnは省略可能です(その場合、関数はNoneを返します)。

関数の呼び出し
関数を定義した後、以下のようにして関数を呼び出すことができます:

result = function_name(arguments)

argumentsは関数に渡す引数です。定義時のパラメータと一致する必要があります。

演習問題
それでは、関数に関する演習問題を解いてみましょう。

  1. 二つの数を引数として受け取り、それらの和を返す関数を定義してください。

  2. 任意の文字列を引数として受け取り、その文字列の長さを返す関数を定義してください。 文字の長さは len() を使用すると取得できます。

  3. 与えられたリストの中で最大の数を返す関数を定義してください。リストの最大の数は max() を使うと取得できます。

解答例

# 1. 二つの数を引数として受け取り、それらの和を返す関数
def sum_two_numbers(num1, num2):
    return num1 + num2

# 関数の呼び出し例
result = sum_two_numbers(5, 3)
print(result)  # 出力: 8
# 2. 任意の文字列を引数として受け取り、その文字列の長さを返す関数
def string_length(s):
    return len(s)

# 関数の呼び出し例
length = string_length("Hello, World!")
print(length)  # 出力: 13
# 3. 与えられたリストの中で最大の数を返す関数
def max_in_list(a_list):
    return max(a_list)

# 関数の呼び出し例
max_value = max_in_list([1, 2, 3, 4, 5])
print(max_value)  # 出力: 5

Pythonの基礎 (7)スコープと名前空間

スコープは、変数がプログラムのどの部分からアクセス可能かを定義する範囲です。
Pythonでは主に以下の2種類のスコープがあります

  • ローカルスコープ:関数内で定義された変数は、その関数内でのみアクセス可能です。

  • グローバルスコープ:関数の外で定義された変数は、プログラム全体からアクセス可能です。

グローバル変数とローカル変数

  • グローバル変数:関数の外で定義され、プログラム全体でアクセスできる変数。

  • ローカル変数:関数の内部で定義され、その関数内部からのみアクセスできる変数。

globalキーワード

関数内からグローバル変数を変更するには、globalキーワードを使用します。

演習問題
それでは、スコープに関する演習問題を解いてみましょう。

  1. グローバル変数とローカル変数を持つプログラムを作成し、それぞれを出力してください。

  2. 関数内でglobalキーワードを使用してグローバル変数の値を変更し、関数呼び出し後にその変更が反映されていることを確認してください。

解答例

# 1. グローバル変数とローカル変数の例
global_var = "グローバル変数"

def my_function():
    local_var = "ローカル変数"
    print(local_var)  # ローカル変数の出力

my_function()
print(global_var)  # グローバル変数の出力

# local_varはこのスコープでは未定義なので、次の行はエラーを引き起こします。
# print(local_var)  # エラー: local_varは未定義
# 2. globalキーワードを使用したグローバル変数の変更
global_var = 10

def change_global_var():
    global global_var  # global_varをグローバル変数として使用
    global_var = 20  # グローバル変数の値を変更

print("関数呼び出し前のglobal_varの値:", global_var)  # 出力: 10
change_global_var()
print("関数呼び出し後のglobal_varの値:", global_var)  # 出力: 20

Pythonの基礎 (8)モジュールとパッケージ

モジュール
モジュールは、関数、変数、クラスなどを含むPythonのファイル(.pyファイル)です。モジュールを使用することで、コードを再利用しやすくし、プログラムをより整理された構造にすることができます。モジュールはimport文を使って他のPythonファイルに読み込むことができます。

import module_name

特定の関数やクラスだけをインポートすることもできます。

from module_name import function_name

パッケージ
パッケージは、モジュールの集まりで、Pythonのライブラリやフレームワークを構成します。パッケージはディレクトリの形式で、__init__.pyという特別なファイルを含んだディレクトリとして認識されます。パッケージを使うことで、プログラムの機能をモジュールに分割し、整理することができます。

パッケージのインポート

import package_name.module_name

または、

from package_name import module_name

演習問題
それでは、モジュールとパッケージに関する演習問題を解いてみましょう。

  1. 標準ライブラリのmathモジュールからsqrt関数をインポートし、16の平方根を計算してください。

  2. randomモジュールを使用して、0から10の間のランダムな整数を生成してください。

  3. 自分で簡単なモジュールを作成し(例えば、数学的な関数をいくつか定義したモジュール)、それを別のPythonファイルからインポートして使用してみてください。

解答例

# 1. mathモジュールからsqrt関数をインポートし、16の平方根を計算
from math import sqrt

# 16の平方根を計算して出力
print(sqrt(16))  # 出力: 4.0
# 2. randomモジュールを使用して、0から10の間のランダムな整数を生成
import random

# 0から10の間でランダムな整数を生成して出力
print(random.randint(0, 10))
# 3. 自分で簡単なモジュールを作成し、それを別のPythonファイルからインポートして使用
# 最初に、mymodule.pyという名前のPythonファイルを作成し、次のように記述します。
# mymodule.py
def print_message():
    print("This is my custom module!")
# 3の続き
# 次に、このmymodule.pyをインポートして使用する別のPythonファイル(例:main.py)を作成します。
# main.py
from mymodule import print_message

print_message()  # 出力: This is my custom module!

Pythonの基礎 (9)エラー処理と例外処理

プログラミング中には様々な理由でエラーが発生することがあります。これらのエラーを適切に処理することで、プログラムの安定性と信頼性を高めることができます。Pythonではtryexceptブロックを使用して例外処理を行います。

基本的な例外処理
例外処理の基本的な構文は以下の通りです。

try:
    # エラーが発生する可能性のあるコード
except エラーの種類:
    # エラー発生時に実行されるコード

tryブロック内には、エラーが発生する可能性のあるコードを記述します。もしtryブロック内で例外が発生した場合、Pythonはexceptブロック内のコードを実行します。

複数の例外を処理
複数の異なる例外を処理するには、複数のexceptブロックを使用します。

try:
    # エラーが発生する可能性のあるコード
except エラーの種類1:
    # エラー1発生時に実行されるコード
except エラーの種類2:
    # エラー2発生時に実行されるコード

その他のキーワード
else: tryブロックが例外を発生させずに正常に完了した場合に実行されるブロックです。
finally: 例外の発生有無に関わらず、最後に必ず実行されるブロックです。

エラーの種類
エラーの種類の名前はあらかじめ指定されているものを使用しなければなりません。
簡単な調べ方はエラーが発生した時の出力画面を見ることです。試しに以下のコードを実行してみて下さい。

find_error = 10 / 0

すると以下の内容が出力されます。

Traceback (most recent call last):
  File "file名", line 1, in <module>
    find_error = 10 / 0
ZeroDivisionError: division by zero

このZeroDivisionErrorがエラーの種類名になります。

もう一つの方法は、Pythonの公式ドキュメントを見ることです。このドキュメントには、組み込み例外についての詳細なリストと説明を提供しています。ここでは、ZeroDivisionErrorFileNotFoundErrorなど、Pythonで定義されている標準エラーとその使用例について学ぶことができます。公式ドキュメントを参照することは、特定のエラークラスがどのような状況で発生するかを理解するための最良の方法の一つです。
詳しくはこちら↓

演習問題
それでは、エラー・例外処理に関する演習問題を解いてみましょう。

  1. ゼロによる除算が行われた場合にZeroDivisionErrorを捕捉し、適切なエラーメッセージを表示するプログラムを書いてください。

  2. 存在しないファイルを開こうとした場合にFileNotFoundErrorを捕捉し、適切なエラーメッセージを表示するプログラムを書いてください。

  3. 任意のコードをtryブロックに記述し、例外が発生しなかった場合はelseブロックを、例外の有無に関わらずfinallyブロックをそれぞれ使用してメッセージを表示するプログラムを書いてください。

解答例

# 1. ゼロによる除算の例外処理
try:
    # ゼロによる除算を意図的に発生させる
    result = 10 / 0
except ZeroDivisionError:
    print("ゼロによる除算はできません。")
# 2. 存在しないファイルを開こうとした時の例外処理
try:
    # 存在しないファイルを開こうとする
    with open("nonexistent_file.txt", "r") as file:
        print(file.read())
except FileNotFoundError:
    print("指定されたファイルは存在しません。")
# 3. try, else, finallyを使用した例外処理
try:
    print("tryブロックが実行されました。")
    # ここに例外が発生する可能性のあるコードを記述
    # この例では例外は発生しない
except Exception as e:
#Exception as e: は、Pythonで例外が発生した際に、その例外を捕捉し、eという変数に代入しています。
    print(f"例外が発生しました: {e}")
else:
    # tryブロックが例外なしで正常に終了した場合に実行
    print("例外は発生しませんでした。")
finally:
    # 例外の有無に関わらず最後に必ず実行
    print("finallyブロックが実行されました。")

終わりに

いかがでしたか?pythonの基本はマスターできたでしょうか?
皆様の理解の手助けが出来ていたらとても嬉しいです。
よろしければ、この記事の評価を以下のフォームから送信をお願いします!

この記事が気に入ったらサポートをしてみませんか?