数値への変換
合計を出したいのに 12080 になる
金額を文字列で持っていると、足し算ができません。"120" + "80" は 200 ではなく 12080 です。計算するには、文字列を数値に直す必要があります。
そのための命令が int です。数字だけでできた文字列を渡すと、整数として読み取った値が返ります。
Python
print(int("1200"))
print(int(" 120 "))
print(int("-50"))1200 120 -50 になります。前後に空白があっても無視してくれるので、人がキーボードから打ち込んだ値でもそのまま通ります。マイナスも読めます。
元の文字列は変わらない
int は元の値を書き換えるのではなく、新しい値を作って返す 命令です。
Python
text = "1200"
number = int(text)このあとも text は "1200" という文字列のままで、number に数値の 1200 が入っています。2 つの変数が別々に存在しています。呼びっぱなしにすると何も起きないので、必ず変数で受け取るか、そのまま返してください。
数として読めないと止まる
数字以外が混じった文字列を渡すと ValueError になります。
Python
int("1200円")
int("1.5")
int("")3 つとも ValueError で、メッセージは invalid literal for int と出ます。「整数として読めない字が入っている」という意味です。単位ごと渡してしまう int("1200円") が、いちばん多い失敗です。
小数点があると整数としては読めないので int("1.5") も止まります。小数を扱いたいときは float("1.5") を使います。ちなみに int(1.5) のように 数値 を渡した場合は変換でき、四捨五入ではなく切り捨てで 1 になります。おこづかい帳は円単位の整数しか扱わないので、当面は int だけで足ります。
ValueErrorは「型は合っているが中身が想定外」というエラーです。intにstrを渡すこと自体は正しく、中身が数字でなかったから怒られています。
やってみよう
関数 to_price を実装してください。引数は金額の文字列 price_text の 1 つで、それを整数に変換して返します。
to_price("1200") は 1200、to_price("0") は 0、to_price("-50") は -50 です。前後に空白の付いた " 120 " も、そのまま渡して構いません。
戻り値はクオートの付かない数値です。書けたら、返ってきた値に + 800 をしてみてください。文字列のままだったころとの違いがはっきりします。
要件
- 関数名は to_price で、引数は price_text の1つ
- int を使って文字列を整数に変換する
- 戻り値はクオートの付かない整数にする
- print ではなく return で返す
入出力例
to_price("1200") → 1200
to_price("98") → 98
to_price("0") → 0
to_price(" 120 ") → 120
to_price("-50") → -50