
【Python入門】3章の演習プログラム
ここでは、これまで学んだPythonの基礎知識を実際に手を動かして確認するための演習プログラムを用意しました。各演習は、3章で解説した主要なトピックに基づいており、理解を深めるとともに、実践的なスキルを身につけることを目的としています。以下に、各トピックごとの演習内容とその解説を示します。ぜひ、コードを書きながら進めてみてください。

プログラムのダウンロード
「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。
Pythonの基本的なデータ型
演習内容: Pythonの基本データ型(整数、浮動小数点数、文字列、ブール値)を使用して、さまざまな変数を定義し、データ型を確認するプログラムを作成してください。
# 基本データ型の例
integer_num = 25
float_num = 3.14
string_text = "Hello, Python!"
bool_value = True
# データ型の確認
print(type(integer_num)) # 出力: <class 'int'>
print(type(float_num)) # 出力: <class 'float'>
print(type(string_text)) # 出力: <class 'str'>
print(type(bool_value)) # 出力: <class 'bool'>
出力結果
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>
解説: 各変数に異なるデータ型の値を割り当て、type()
関数を使用してデータ型を確認します。これにより、Pythonの基本データ型の理解を深めます。
文字列はシングルクオートまたはダブルクオートで囲む
演習内容: シングルクオートとダブルクオートを使って文字列を定義し、それぞれの文字列を表示するプログラムを作成してください。
# シングルクオートとダブルクオートの例
single_quoted = 'Hello, World!'
double_quoted = "Hello, Python!"
print(single_quoted) # 出力: Hello, World!
print(double_quoted) # 出力: Hello, Python!
出力結果
Hello, World!
Hello, Python!
解説: Pythonでは、シングルクオート('
)とダブルクオート("
)のどちらでも文字列を定義できます。用途に応じて使い分けることが可能です。
文字列リテラルの連結
演習内容: 複数の文字列リテラルを+
演算子で連結し、結果を表示するプログラムを作成してください。
# 文字列の連結例
greeting = "Hello, " + "Python!"
print(greeting) # 出力: Hello, Python!
出力結果
Hello, Python!
解説: +
演算子を使用して、複数の文字列を一つに連結します。これにより、動的に文字列を組み立てることができます。
複数行のテキストを扱いたい場合
演習内容: 三重引用符を使用して複数行にわたる文字列を定義し、その内容を表示するプログラムを作成してください。
# 複数行の文字列例
multi_line_text = """This is a multi-line
string in Python.
It spans several lines."""
print(multi_line_text)
出力結果
This is a multi-line
string in Python.
It spans several lines.
解説: 三重引用符('''
または """
)を使用することで、改行を含む複数行の文字列を簡単に定義できます。
パスの文字列リテラル
演習内容: Raw文字列を使用して、Windowsのファイルパスを定義し、表示するプログラムを作成してください。
# Raw文字列のパス例
file_path = r"C:\Users\Username\Documents\file.txt"
print(file_path) # 出力: C:\Users\Username\Documents\file.txt
出力結果
C:\Users\Username\Documents\file.txt
解説: Raw文字列(r'...'
)を使用すると、バックスラッシュ(\)をそのまま文字として扱うことができ、ファイルパスの記述が容易になります。
比較演算子を使った比較
演習内容: 異なる数値や文字列を比較し、結果を表示するプログラムを作成してください。
a = 10
b = 20
print(a < b) # 出力: True
print(a == b) # 出力: False
str1 = "apple"
str2 = "banana"
print(str1 == str2) # 出力: False
print(str1 < str2) # 出力: True
出力結果
True
False
False
True
解説: 比較演算子(==
, !=
, <
, >
, <=
, >=
)を使用して、数値や文字列の比較を行います。これにより、条件分岐やループ制御が可能になります。
ブール演算子を使った比較
演習内容: and
, or
, not
演算子を使用して、複数の条件を組み合わせた比較を行うプログラムを作成してください。
# ブール演算子の例
x = 5
y = 10
print(x > 0 and y > 0) # 出力: True
print(x > y or y > 0) # 出力: True
print(not (x > y)) # 出力: True
出力結果
True
True
True
解説: ブール演算子を使用することで、複数の条件を論理的に組み合わせて評価できます。これにより、複雑な条件判断が可能になります。
型を変換する方法
演習内容: 異なるデータ型間で値を変換し、結果を表示するプログラムを作成してください。
# 型変換の例
num_str = "123"
num_int = int(num_str)
num_float = float(num_str)
print(num_int, type(num_int)) # 出力: 123 <class 'int'>
print(num_float, type(num_float))# 出力: 123.0 <class 'float'>
bool_val = True
bool_to_int = int(bool_val)
bool_to_str = str(bool_val)
print(bool_to_int, type(bool_to_int)) # 出力: 1 <class 'int'>
print(bool_to_str, type(bool_to_str)) # 出力: True <class 'str'>
出力結果
123 <class 'int'>
123.0 <class 'float'>
1 <class 'int'>
True <class 'str'>
解説: int()
, float()
, str()
などの関数を使用して、異なるデータ型間で値を変換します。これにより、データの整合性を保ちながら柔軟に操作できます。
mathライブラリ
演習内容: math
ライブラリをインポートし、さまざまな数学的関数や定数を使用するプログラムを作成してください。
import math
# mathライブラリの例
print(math.pi) # 出力: 3.141592653589793
print(math.sqrt(16)) # 出力: 4.0
print(math.sin(math.pi/2)) # 出力: 1.0
print(math.factorial(5)) # 出力: 120
出力結果
3.141592653589793
4.0
1.0
120
解説: math
ライブラリを使用することで、数学的な関数(平方根、三角関数、階乗など)や定数(πなど)にアクセスできます。これにより、高度な数値計算が簡単に行えます。
変数と代入文
演習内容: 変数に値を代入し、それらの値を表示するプログラムを作成してください。
# 変数と代入文の例
message = "Hello, Python!"
count = 42
pi = 3.14159
print(message) # 出力: Hello, Python!
print(count) # 出力: 42
print(pi) # 出力: 3.14159
出力結果
Hello, Python!
42
3.14159
解説: 変数はデータを格納するための名前付きの場所です。=
演算子を使用して、変数に値を代入します。これにより、データを効率的に管理・操作できます。
変数は値のオブジェクトを参照している
演習内容: 変数がオブジェクトを参照していることを確認するプログラムを作成してください。
# 変数の参照例
a = [1, 2, 3]
b = a
b.append(4)
print(a) # 出力: [1, 2, 3, 4]
print(b) # 出力: [1, 2, 3, 4]
出力結果
[1, 2, 3, 4]
[1, 2, 3, 4]
解説: Pythonでは、変数は実際の値ではなく、その値を保持するオブジェクトへの参照です。上記の例では、a
とb
が同じリストオブジェクトを参照しているため、b
に追加した要素がa
にも反映されます。
変数と定数は名前で区別する
演習内容: 変数と定数を定義し、それぞれの命名規則に従ってプログラムを作成してください。
# 変数と定数の例
PI = 3.14159 # 定数
radius = 5 # 変数
area = PI * (radius ** 2)
print("Area of the circle:", area) # 出力: Area of the circle: 78.53975
出力結果
Area of the circle: 78.53975
解説: Pythonでは、定数は全て大文字で命名するのが一般的です。一方、変数は小文字またはキャメルケースで命名します。これにより、コードの可読性が向上します。
不要な変数の削除
演習内容: del
文を使用して不要な変数を削除し、削除後の変数の状態を確認するプログラムを作成してください。
# 変数の削除例
temp = "temporary data"
print(temp) # 出力: temporary data
del temp
# print(temp) # これはエラーになります
temporary data
出力結果
解説: del
文を使用して、不要になった変数を削除します。削除後にその変数を参照すると、NameError
が発生します。これにより、メモリの効率的な管理が可能になります。
数値を使った計算
演習内容: 基本的な算術演算を使用して、数値計算を行うプログラムを作成してください。
# 数値計算の例
a = 10
b = 3
print(a + b) # 出力: 13
print(a - b) # 出力: 7
print(a * b) # 出力: 30
print(a / b) # 出力: 3.3333333333333335
print(a // b) # 出力: 3
print(a % b) # 出力: 1
print(a ** b) # 出力: 1000
出力結果
13
7
30
3.3333333333333335
3
1
1000
解説: Pythonでは、加算(+
)、減算(-
)、乗算(*
)、除算(/
)、整数除算(//
)、剰余(%
)、べき乗(**
)などの基本的な算術演算がサポートされています。
演算子の優先順位
演習内容: 演算子の優先順位を理解するために、複雑な計算式を評価するプログラムを作成してください。
# 演算子の優先順位の例
result = 2 + 3 * 4
print(result) # 出力: 14
result_with_parentheses = (2 + 3) * 4
print(result_with_parentheses) # 出力: 20
出力結果
14
20
解説: 演算子には優先順位があり、計算の順序に影響を与えます。*
は+
よりも優先順位が高いため、2 + 3 * 4
は2 + (3 * 4)
として評価されます。括弧を使用することで、優先順位を明示的に指定できます。
代入演算子
演習内容: 代入演算子(+=
, -=
, *=
, /=
)を使用して、変数の値を更新するプログラムを作成してください。
# 代入演算子の例
count = 10
count += 5
print(count) # 出力: 15
count *= 2
print(count) # 出力: 30
count /= 3
print(count) # 出力: 10.0
出力結果
15
30
10.0
解説: 代入演算子を使用することで、変数の現在の値に対して算術演算を行い、その結果を再度変数に代入します。これにより、コードが簡潔になります。
文字列をつなげる演算子
演習内容: +
演算子を使用して、複数の文字列を連結し、結果を表示するプログラムを作成してください。
# 文字列の連結例
first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name
print(full_name) # 出力: John Doe
出力結果
John Doe
解説: +
演算子を使用して、複数の文字列を一つに連結します。これにより、動的に文字列を組み立てることができます。
ミュータブルとイミュータブル
演習内容: ミュータブル(変更可能)なリストとイミュータブル(変更不可能)な文字列を操作し、その違いを確認するプログラムを作成してください。
# ミュータブルとイミュータブルの例
# ミュータブルなリスト
fruits = ["apple", "banana", "cherry"]
fruits.append("date")
print(fruits) # 出力: ['apple', 'banana', 'cherry', 'date']
# イミュータブルな文字列
greeting = "Hello"
# greeting[0] = "h" # これはエラーになります
new_greeting = "h" + greeting[1:]
print(new_greeting) # 出力: hello
出力結果
['apple', 'banana', 'cherry', 'date']
hello
解説: リストはミュータブルであり、要素の追加や削除が可能です。一方、文字列はイミュータブルであり、直接変更することはできません。変更が必要な場合は、新しい文字列を作成します。
インデックスを使った文字の取り出し
演習内容: インデックスを使用して、文字列から特定の文字を取り出すプログラムを作成してください。
# インデックスを使った文字の取り出し例
text = "Python"
first_char = text[0]
last_char = text[-1]
print(first_char) # 出力: P
print(last_char) # 出力: n
出力結果
P
n
解説: インデックスを使用して、文字列の特定の位置にある文字を取得します。インデックスは0から始まり、負の値を使用して末尾から数えることもできます。
スライスで部分的に文字列を切り出す
演習内容: スライス構文を使用して、文字列の一部を抽出し、結果を表示するプログラムを作成してください。
# スライスを使った部分文字列の切り出し例
text = "DataScience"
first_four = text[:4]
last_six = text[4:]
print(first_four) # 出力: Data
print(last_six) # 出力: Science
出力結果
解説: スライス構文([開始位置:終了位置:ステップ]
)を使用して、文字列の一部を効率的に抽出します。開始位置や終了位置を省略することで、柔軟な範囲指定が可能です。
メソッドを使って文字列を操作する
演習内容: 文字列メソッド(upper()
, lower()
, replace()
, startswith()
, endswith()
)を使用して、文字列を変換・操作するプログラムを作成してください。
# メソッドを使った文字列操作の例
text = "hello, world!"
uppercase_text = text.upper()
print(uppercase_text) # 出力: HELLO, WORLD!
starts_with_hello = text.startswith("hello")
print(starts_with_hello) # 出力: True
replaced_text = text.replace("world", "Python")
print(replaced_text) # 出力: hello, Python!
出力結果
HELLO, WORLD!
True
hello, Python!
解説: 文字列メソッドを使用して、文字列を大文字・小文字に変換したり、特定の部分文字列を置換したり、接頭辞や接尾辞を確認したりします。これにより、文字列の操作が効率的に行えます。
メソッドの戻り値から別のメソッドを呼び出す方法
演習内容: メソッドチェーンを使用して、複数の文字列メソッドを連続して呼び出すプログラムを作成してください。
# メソッドチェーンの例
result = "Python Programming".lower().startswith("python")
print(result) # 出力: True
出力結果
True
解説: メソッドチェーンを使用することで、メソッドの戻り値に対してさらに別のメソッドを連続して呼び出します。これにより、コードが簡潔になり、複数の操作を一行で実行できます。
文字列の一部を置き換えるreplaceメソッド
演習内容: replace
メソッドを使用して、文字列内の特定部分を別の文字列に置換するプログラムを作成してください。また、置換回数を指定して部分的な置換も行ってみてください。
# `replace`メソッドの例
file = "image.jpg"
new_file = file.replace(".jpg", ".jpeg")
print(new_file) # 出力: image.jpeg
word = "anaconda"
all_replaced = word.replace("a", "A")
partial_replaced = word.replace("a", "A", 1)
print(all_replaced) # 出力: AnAcondA
print(partial_replaced) # 出力: Anaconda
出力結果
image.jpeg
AnAcondA
Anaconda
解説: replace
メソッドを使用して、文字列内の特定部分を他の文字列に置換します。第三引数に置換回数を指定することで、部分的な置換も可能です。
検索文字列を探すメソッド
演習内容: find()
, rfind()
, index()
, rindex()
, count()
メソッドを使用して、文字列内の特定部分文字列を検索するプログラムを作成してください。また、見つからなかった場合の動作も確認してください。
# 検索メソッドの例
sentence = "Guido van Rossum"
first_space = sentence.find(' ')
middle_name = sentence.find(' ') + 1
last_space = sentence.rfind(' ')
first_name = sentence[:first_space]
middle = sentence[middle_name:last_space]
last_name = sentence[last_space + 1:]
print(first_name) # 出力: Guido
print(middle) # 出力: van
print(last_name) # 出力: Rossum
count_i = "internationalization".count('i')
count_tion = "internationalization".count('tion')
print(count_i) # 出力: 3
print(count_tion) # 出力: 2
出力結果
Guido
van
Rossum
4
2
解説: 各検索メソッドを使用して、文字列内の特定部分文字列の位置や出現回数を取得します。find()
やrfind()
は見つからない場合に-1
を返し、index()
やrindex()
は例外を発生させます。count()
は出現回数を返します。
まとめ
3章では、Pythonの基礎から応用まで幅広いトピックを学びました。以下の表に各トピックの要点をまとめます。
項目 | 説明 |
---|---|
Pythonの基本的なデータ型 | 整数、浮動小数点数、文字列、ブール値などの基本データ型の理解。 |
floatは倍精度 | float 型が倍精度浮動小数点数であり、高精度な計算が可能であること。 |
文字列はシングルクオートまたはダブルクオートで囲む | シングルクオートとダブルクオートの使い分け方法。 |
文字列リテラルの連結 | プラス(+ )演算子を用いた文字列の連結方法。 |
複数行のテキストを扱いたい場合 | 三重引用符を使用した複数行文字列の定義方法。 |
パスの文字列リテラル | Raw文字列を用いたファイルパスの扱い方。 |
比較演算子を使った比較 | 比較演算子(== , != , < , > , <= , >= )を用いた値の比較。 |
ブール演算子を使った比較 | ブール演算子(and , or , not )を用いた複数条件の比較。 |
型を変換する方法 | int() , float() , str() を用いたデータ型の変換方法。 |
mathライブラリ | math ライブラリを使用した数学的関数や定数の利用方法。 |
変数と代入文 | 変数の宣言と代入方法。 |
変数は値のオブジェクトを参照している | 変数がオブジェクトを参照していることの理解。 |
変数と定数は名前で区別する | 変数と定数の命名規則と区別方法。 |
不要な変数の削除 | del 文を用いた不要な変数の削除方法。 |
仮想環境へのNumpyライブラリのインストール | 仮想環境の作成とnumpy ライブラリのインストール手順。 |
数値を使った計算 | 基本的な算術演算を用いた数値計算方法。 |
演算子の優先順位 | 演算子の優先順位と括弧を用いた計算の順序の制御。 |
代入演算子 | += , -= , *= , /= などの代入演算子を用いた変数の更新方法。 |
文字列をつなげる演算子 | プラス(+ )演算子を用いた文字列の連結方法。 |
ミュータブルとイミュータブル | オブジェクトが可変(ミュータブル)か不変(イミュータブル)かの違いとその影響。 |
インデックスを使った文字の取り出し | インデックスを用いて文字列から特定の文字を取得する方法。 |
スライスで部分的に文字列を切り出す | スライス構文を使用して文字列の一部を抽出する方法と応用例。 |
メソッドを使って文字列を操作する | 文字列メソッドを活用した文字列の変換・操作方法。 |
メソッドの戻り値から別のメソッドを呼び出す方法 | メソッドチェーンを用いて、複数のメソッドを連続して呼び出す方法。 |
文字列の一部を置き換えるreplaceメソッド | replace メソッドを使用して文字列内の特定部分を他の文字列に置換する方法と応用例。 |
検索文字列を探すメソッド | find() , rfind() , index() , rindex() , count() メソッドを用いた部分文字列の検索方法。 |
ポイント
- Pythonの基本データ型や文字列操作の基礎を理解し、効率的なプログラミング手法を習得しました。
- 文字列の連結、スライス、各種メソッドの活用方法を通じて、柔軟かつ効果的な文字列操作が可能になりました。
- メソッドチェーンを用いることで、コードを簡潔にし、複数の操作を一行で実行するテクニックを習得しました。
- 文字列検索メソッドを使いこなすことで、データ解析やテキスト処理の精度と効率を向上させることができました。