sagantaf-佐賀んタフ-

なんでも自分の思ったこと、経験したことを書いて生きます。

ユーザ入力を数値に置き換えるときにint, float, Fraction のうち何に軍配があがるか。 in Python

Python お勉強中。

そんな中、

ばっと思いついたのでメモ。

 

以下の文字列がinput()で入力されたとして、それぞれをint, float, Fraction(分数)に変換してみる。

>>> s1 ="2"

>>> s2 = "2.3"

>>> s3 = "2/5"

 

まずはint(整数型)変換から。

>>> int(s1)

2

>>> int(s2)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: '2.3'

>>> int(s3)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: invalid literal for int() with base 10: '2/5'

 

見事に後ろ二つはエラーになってしまった。

1勝2敗!

 

さて次は、float(浮動小数点型)変換。

 

>>> float(s1)

2.0

>>> float(s2)

2.3

>>> float(s3)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: could not convert string to float: '2/5'

 

2勝1敗!

分数の形のものをよしなに小数へ変換はしてくれないみたい。

 

最後は分数(Fraction)変換。

 

>>> Fraction(s3)

Fraction(2, 5)

>>> Fraction(s1)

Fraction(2, 1)

>>> Fraction(s2)

Fraction(23, 10)

 

見事3勝!

小数も分数に変換してくれた!

 

 

ということでFractionに軍配が上がりました〜!

Fractionなら、整数っぽい文字列も、小数っぽい文字列も、分数っぽい文字列も全部、分数の形に変換してくれる。

 

つまり、とりあえずFractionに変換して、あとから希望の型に変換すればよいことになる。

↓こんな感じで。

>>> int(Fraction(s2))

2

>>> int(Fraction(s3))

0

>>> float(Fraction(s3))

0.4

 

一つ目は int(float(s2)) でも実現できる。

まあ、小数や分数を整数に変換したいときはあまりないかもだけど。。。

 

注意)Fractionを使うには事前にfractionsモジュールからFractionクラスをインポートしておく必要があり。

>>> from fractions import Fraction

 

 

複素数への変換はどうやるんだろう。。。

うまい方法が思いつかない。。。

ググってもでてこない。。。