回答編集履歴

1

返信への補足。print関数の挙動の話。

2020/05/11 16:25

投稿

hope_mucci
hope_mucci

スコア4447

test CHANGED
@@ -29,3 +29,45 @@
29
29
  '''
30
30
 
31
31
  ```
32
+
33
+ # 追記
34
+
35
+ 返信への補足です。結論から言うと何ら問題ありません。出力時の表現方法が違うだけです。
36
+
37
+ まずは以下のコードを確認してください。
38
+
39
+ ```python3
40
+
41
+ ary = [Fraction(2,4),Fraction(2,3)]
42
+
43
+ print(ary)
44
+
45
+ # -> [Fraction(1, 2), Fraction(2, 3)]
46
+
47
+ print(ary[0],ary[1])
48
+
49
+ # -> 1/2 2/3
50
+
51
+ out = str(Fraction(2,4))
52
+
53
+ print(out)
54
+
55
+ # -> 1/2
56
+
57
+ out = repr(Fraction(2,4))
58
+
59
+ print(out)
60
+
61
+ # -> Fraction(1, 2)
62
+
63
+ ```
64
+
65
+ print関数は渡されたオブジェクトをstr関数で変換した結果を出力します。
66
+
67
+ print(Fraction(2,4))が"1/2"と出力されるのは、Fractionクラスがstr関数にかけられた際にどのように出力するかクラス内で定義してあるからです。
68
+
69
+ それに対し、配列(listクラス)を丸ごとstr関数で変換すると、個々の要素をrepr関数で変換した文字列を生成するようです。
70
+
71
+ repr関数で変換した結果が"Fraction(x, y)"となります。
72
+
73
+ str関数とrepr関数の違いについては質問の趣旨とは離れるのでご自分で調べてください。