Python独学ならTech-Joho TOP > Python問題集 > リストの要素の型
問題
下のプログラムを実行すると、my_listの各要素をprint関数によって表示する。
ただし、自作のクラスvecについては、そのフィールドの数値が表示されない。
class vec:
def __init__(self, x, y):
self.x = x
self.y = y
my_list = [1, "2", 3.0, vec(4, 5)]
for item in my_list:
print(item)
このプログラムを修正し、my_listの要素のクラス名と内容の数値を整数で表示するようにせよ。
vecの各フィールドはコンマ区切りで表示せよ。
実行結果の例
このように表示して下さい。
<class 'int'>: 1
<class 'str'>;: 2
<class 'int'>: 3
<class '__main__.vec'>: 4,5
回答例
これが一つの回答です。
class vec:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return str(self.x) + "," + str(self.y)
my_list = [1, "2", 3.0, vec(4, 5)]
for item in my_list:
if isinstance(item, float):
item = int(item)
print(str(type(item)) + ": " + str(item))
解説
まず、クラス名の取得にはtype()関数を使います。
その戻り値をstr型に変換します。
次に、float型の値をそのまま文字列として表示すると、小数点以下がついてしまいますので、int型に変換します。
float型の判定には、isinstance関数を使います。
最後に、独自の型、vecを文字列に変換したときの内容を自由に設定するために、 __str__関数を定義しています。
2つのフィールド、xとyを”,”で結合しています。
# type関数は変数の型を取得する
print(type(999.9)
# ininstance関数で第一引数が第二引数のインスタンスかどうかを判定できるprint(isinstance(1.9, float))
print(isinstance(2, float))
参考
type()について
Python3 reference type
isinstance()について
Python3 reference isinstance
__str__メソッドについて
Python3 reference object.__str__