文字列を int に変換する
このレッスンで分かること
int(値)は文字列やfloatを整数に変換する組み込み関数です- 小数表記の文字列は
int('3.14')でValueError、int(float('3.14'))の 2 段階変換が必要です- 最小例は
def sum_strings(a, b): return int(a) + int(b)
文字列を int に変換する とは
数字の文字列を int に変換して計算する方法を学びます。本レッスンでは、文字列を int に変換する の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
なぜ型変換が必要か
Python で扱う値には必ず 型 があり、型が違うと使える演算も変わります。たとえば '10' + 5 を計算しようとすると TypeError になります。'10' は str、5 は int で、両者は足し算の対象として違うものとみなされるからです。こうした不一致を解消するために用意されているのが int float str bool などの 組み込み関数 です。これらは 値を別の型に変換 する役目を持ちます。型を変換することを キャスト (cast) または 型変換 と呼びます。
Python
int('10') # 10
int('-3') # -3
int(' 42 ') # 42
int(3.9) # 3 (小数点以下は切り捨て)
int('10') + 5は15になります。文字列'10'をintに変換することで、int同士の足し算として成立します。
文法のおさらい
int(value) は次のパターンを受け付けます。
- 数字だけの文字列 (例
'42') - 先頭の符号付き文字列 (例
'-3''+7') - 前後に空白がある文字列 (例
' 10 ') - 整数や
float値 (int(3.9)は3、int(-1.7)は-1)
一方、次のような値はエラーになります。
int('3.14')小数表記の文字列は不可int('abc')数字でない文字列は不可int('')空文字列は不可
| 入力 | 結果 | 備考 |
|---|---|---|
'42' | 42 | 標準的なケース |
'-3' | -3 | 符号付きも OK |
' 10 ' | 10 | 前後空白は無視 |
3.9 | 3 | 切り捨て (四捨五入ではない) |
-1.7 | -1 | ゼロ方向への切り捨て |
'3.14' | ValueError | 小数文字列は不可 |
'abc' | ValueError | 数字以外は不可 |
None | TypeError | 型不一致 |
小数表記の文字列を整数にしたいときは、いったん
float('3.14')に通してからint(...)で囲むという 2 段階変換が必要です。
動きを追ってみる
次は、文字列で渡された 2 つの数値を整数に変換して足す例です。
Python
a = '12'
b = '34'
total = int(a) + int(b)
return totalint(a) は 12、int(b) は 34 で、足し算の結果 46 が total に入ります。a b は文字列のままなので、計算するたびに int で囲むのを忘れないでください。
図を箇条書きで言い換えると、次のとおりです。
a = '12'をint(a)で12に変換b = '34'をint(b)で34に変換int(a) + int(b)で46total = 46を返す
暗黙の型変換はしない
他の言語では '10' + 5 が '105' や 15 に勝手になる場合があります。Python は 暗黙の型変換 をほとんど行わない設計なので、開発者が int str を明示する必要があります。これは一見不便ですが、意図しない値の混入を防ぐ という大きなメリットがあります。
Python
price = '1000'
qty = 3
total = int(price) * qty
return totalフォームから受け取った値は str で渡ってくることが多いので、計算前に int float で変換する習慣をつけましょう。
文字列の前後に空白が混じる可能性があるなら、
int(value.strip())のようにstripを併用すると安心です。
よくある間違い
型変換でつまずきやすいポイントを 3 つ紹介します。
- 小数文字列をそのまま
intに渡すint('3.14')はValueErrorになります。int(float('3.14'))で 2 段階に変換します。 intを変数名にする 関数intを上書きしてしまうと、以降int(...)の呼び出しがエラーになります。int = 10のような書き方はやめましょう。Noneをintに渡すint(None)はTypeErrorです。値がNoneでないかチェックしてから変換します。
基数を指定する変換
int 関数には実は 2 番目の引数 base があり、int('1010', 2) のように書くと 2 進数の文字列 を 10 進数の整数に変換できます。int('ff', 16) なら 255 になります。データを扱うときに 16 進数の色コードや 2 進数のフラグを取り回す機会があるので、覚えておくと便利です。
Python
int('1010', 2) # 10
int('ff', 16) # 255
int('77', 8) # 63第 2 引数は
2から36まで指定できますが、よく使うのは281016の 4 種類です。
ここまでの要点
int(値) で型変換、小数文字列は不可なので int(float(値)) の 2 段階。Python は暗黙の変換を行わないので、フォーム入力など str で来る値は必ず明示的に変換する。
やってみよう
2 つの数字文字列 a b を受け取り、整数に変換して合計を返す関数 sum_strings を実装してください。手順は次のとおりです。
def sum_strings(a, b):で関数を定義するint(a) + int(b)をreturnする- 必要なら
int(a.strip())のようにstripを併用する - 正の数・負の数・前後に空白の 4 種類でテストが pass するか確認する
a b の前後に空白が含まれていても動くように、strip を併用しても構いません。テストでは正の数・負の数・前後に空白がある文字列など 4 種類が渡されます。
よくある質問
Q. このトピックは Python 以外の言語でも同じ書き方ですか?
A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。
Q. 実行してエラーが出た場合の対処は?
A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。
Q. 次のステップで何を学ぶべきですか?
A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。
次のレッスン
次は 数値を文字列に変換する で、数字の文字列を int に変換して計算する方法を学びます を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- int キャスト の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. int キャスト とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- 引数 a を int 関数で整数に変換する
- 引数 b を int 関数で整数に変換する
- それらを足した値を return で返す
入出力例
test-cases.txt
sum_strings("12", "34") → 46
sum_strings("-3", "7") → 4
sum_strings(" 10 ", "20") → 30
sum_strings("0", "0") → 0