kurumi-bioの雑記帳

プログラミング、パソコン、ペット、 犬、お出かけ

ChatGPTでプログラミングを学ぼう 第5回 「Pythonの変数型(基本型 1)」

こんにちは、kurumi-bioです。

ChatGPTと会話しながらPythonを学んでいきます。

環境

前回の振り返り

前回は、Pythonの変数について、 変数名の命名規則、変数の型、変数の再代入などを学びました。 Pythonは変数の型が動的に変わってしまいますが、 型アノテーションで型を明示すると、静的型チェックツールでチェックが可能なことがわかりました。

kurumi-bio.hatenablog.com

学習内容

今回は、Pythonの変数の型について、基本型の生成と特徴を学習します。 リスト型、タプル型、セット型、辞書型の操作は次回以降で学習します。

Pythonの変数型

Pythonの変数型をChartGPTに聞いてみました。
前回、型アノテーションで宣言できる型を確認したときは、基本型、モジュール型、ユーザー定義型がありましたが、基本型のみの回答となりました。

◆テストコード

i=10
f=3.14
c=3+2j
s="Hello"
b=True
li=["apple","orange","banana"]
tu=("apple","orange","banana")
se={"apple","orange","banana"}
di={"name":"Alice","age":25,"gender":"gemale"}

print("i=", type(i))
print("f=", type(f))
print("c=", type(c))
print("s=", type(s))
print("b=", type(b))
print("li=", type(li))
print("tu=", type(tu))
print("se=", type(se))
print("di=", type(di))

◆実行結果

実行結果の説明 基本型を代入して、それぞれの型をtype関数で表示しました。

バイト型とバイト配列型

基本型にはバイト型とバイト配列型があったはずなので、ChatGPTに確認してみました。

◆テストコード

my_bytes=b'\x48\x65\x6c\x6c\x6f'
print(type(my_bytes))
print(my_bytes)

my_bytearray = bytearray(b'\x48\x65\x6c\x6c\x6f')
print(type(my_bytearray))
print(my_bytearray)

◆実行結果

実行結果の説明 バイト型とバイト配列型を作成して、値と型を表示しました。
作成して表示するだけなら差が無いのですが、イミュータブル(変更不可)とミュータブル(変更可能)の違いがあるので試してみます。

◆テストコード

my_bytes=b'hello'
print(type(my_bytes))
print(my_bytes)

my_bytes[0]=72

print(my_bytes)

◆実行結果

実行結果の説明 バイト型はイミュータブル(変更不可)なので、object does not support item assignment(オブジェクトは項目の割り当てをサポートしていません)のエラーが発生し、値を変更することができませんでした。

◆テストコード

my_bytearray = bytearray(b'hello')
print(type(my_bytearray))
print(my_bytearray)

my_bytearray[0]=72

print(my_bytearray)

◆実行結果

実行結果の説明 バイト配列型はミュータブル(変更可能)なので、先頭の文字をh(小文字)からH(大文字)に変更することができました。

リスト型

◆テストコード

# リストの作成
my_list = [1, 2, 3, 4, 5]

# リストの要素を取得
print(my_list[0])  # 1
print(my_list[3])  # 4

# リストの要素を変更
my_list[2] = 'three'
print(my_list)  # [1, 2, 'three', 4, 5]

# リストに要素を追加
my_list.append(6)
print(my_list)  # [1, 2, 'three', 4, 5, 6]

# リストから要素を削除
my_list.remove('three')
print(my_list)  # [1, 2, 4, 5, 6]

◆実行結果

実行結果の説明 位置での取得(0番目と3番目の取得)、要素の変更(3を'three')に変更、異なる方の格納(整数型と文字列型)、要素の追加(6番目に整数値6を追加)、要素を削除('three'を削除)が可能なことが確認できました。

タプル型

◆テストコード

# タプルの定義
my_tuple = (1, 2, 3, 'four', 'five')
# タプルの要素にアクセス
print("my_tuple[0]=", my_tuple[0])  # 1
print("my_tuple[3]=", my_tuple[3])  # 'four'

# タプルの要素の代入
x, y, z = (1, 2, 3)
print("x=", x)  # 1
print("y=", y)  # 2
print("z=", z)  # 3

my_tuple2 = (1, 'two', 3)
x2, y2, z2 = my_tuple2
print("x2=", x2)
print("y2=", y2)
print("z2=", z2)

◆実行結果

実行結果の説明 位置での取得(0番目と3番目の取得)、複数の変数に値を代入、が可能なことが確認できました。
要素の代入は、タプル型の各要素値を、それぞれ別の変数に代入することを指しているのだと思います。

セット型

◆テストコード

# セットの定義
my_set = {1, 2, 3, 3, 4, 5, 5, 5}

# セットの要素の列挙
for i in my_set:
    print(i)

◆実行結果

実行結果の説明 for文を使って要素を列挙可能なことが確認できました。

辞書型

◆テストコード

# 空の辞書を作成
empty_dict = {}

# キーと値のペアを持つ辞書を作成
my_dict = {'apple': 1, 'banana': 2, 'orange': 3}

# 要素の追加
my_dict['grape'] = 4

# 要素の取得
print(my_dict['banana'])  # 2

# キーの一覧を取得
print(my_dict.keys())  # dict_keys(['apple', 'banana', 'orange', 'grape'])

# 値の一覧を取得
print(my_dict.values())  # dict_values([1, 2, 3, 4])

# キーと値のペアを取得
print(my_dict.items())  # dict_items([('apple', 1), ('banana', 2), ('orange', 3), ('grape', 4)])

# キーの存在確認
print('orange' in my_dict)  # True
print('peach' in my_dict)  # False

# 要素の削除
del my_dict['orange']
print(my_dict)  # {'apple': 1, 'banana': 2, 'grape': 4}

◆実行結果

実行結果の説明 各操作ができることが確認できました。

相違点

リスト型、タプル型、セット型は、配列オブジェクトですが、 下記の点が異なります。

型名 type 記載 位置でアクセス 値の変更 値の重複
リスト型 list []
タプル型 tuple () ×
セット型 set {} × ×
辞書型 dict {} × ×

残課題

  • リスト型、タプル型、セット型、辞書型の操作
  • モジュール型とユーザー定義型
  • open関数の構文と使い方
  • 構文中の":"と";"の意味

最後までご覧いただきありがとうございます