文字列を int に変換する

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

このレッスンで分かること

  • int(値) は文字列や float を整数に変換する組み込み関数です
  • 小数表記の文字列は int('3.14')ValueErrorint(float('3.14')) の 2 段階変換が必要です
  • 最小例は def sum_strings(a, b): return int(a) + int(b)

文字列を int に変換する とは

数字の文字列を int に変換して計算する方法を学びます。本レッスンでは、文字列を int に変換する の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

なぜ型変換が必要か

Python で扱う値には必ず があり、型が違うと使える演算も変わります。たとえば '10' + 5 を計算しようとすると TypeError になります。'10'str5int で、両者は足し算の対象として違うものとみなされるからです。こうした不一致を解消するために用意されているのが int float str bool などの 組み込み関数 です。これらは 値を別の型に変換 する役目を持ちます。型を変換することを キャスト (cast) または 型変換 と呼びます。

Python

int('10') # 10 int('-3') # -3 int(' 42 ') # 42 int(3.9) # 3 (小数点以下は切り捨て)

int('10') + 515 になります。文字列 '10'int に変換することで、int 同士の足し算として成立します。

文法のおさらい

int(value) は次のパターンを受け付けます。

  • 数字だけの文字列 (例 '42')
  • 先頭の符号付き文字列 (例 '-3' '+7')
  • 前後に空白がある文字列 (例 ' 10 ')
  • 整数や float 値 (int(3.9)3int(-1.7)-1)

一方、次のような値はエラーになります。

  • int('3.14') 小数表記の文字列は不可
  • int('abc') 数字でない文字列は不可
  • int('') 空文字列は不可
入力結果備考
'42'42標準的なケース
'-3'-3符号付きも OK
' 10 '10前後空白は無視
3.93切り捨て (四捨五入ではない)
-1.7-1ゼロ方向への切り捨て
'3.14'ValueError小数文字列は不可
'abc'ValueError数字以外は不可
NoneTypeError型不一致

小数表記の文字列を整数にしたいときは、いったん float('3.14') に通してから int(...) で囲むという 2 段階変換が必要です。

動きを追ってみる

次は、文字列で渡された 2 つの数値を整数に変換して足す例です。

Python

a = '12' b = '34' total = int(a) + int(b) return total

int(a)12int(b)34 で、足し算の結果 46total に入ります。a b は文字列のままなので、計算するたびに int で囲むのを忘れないでください。

diagram (will load when visible)

図を箇条書きで言い換えると、次のとおりです。

  • a = '12'int(a)12 に変換
  • b = '34'int(b)34 に変換
  • int(a) + int(b)46
  • total = 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 つ紹介します。

  1. 小数文字列をそのまま int に渡す int('3.14')ValueError になります。int(float('3.14')) で 2 段階に変換します。
  2. int を変数名にする 関数 int を上書きしてしまうと、以降 int(...) の呼び出しがエラーになります。int = 10 のような書き方はやめましょう。
  3. Noneint に渡す 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 まで指定できますが、よく使うのは 2 8 10 16 の 4 種類です。

この章のポイント

ここまでの要点 int(値) で型変換、小数文字列は不可なので int(float(値)) の 2 段階。Python は暗黙の変換を行わないので、フォーム入力など str で来る値は必ず明示的に変換する。

やってみよう

2 つの数字文字列 a b を受け取り、整数に変換して合計を返す関数 sum_strings を実装してください。手順は次のとおりです。

  1. def sum_strings(a, b): で関数を定義する
  2. int(a) + int(b)return する
  3. 必要なら int(a.strip()) のように strip を併用する
  4. 正の数・負の数・前後に空白の 4 種類でテストが pass するか確認する

a b の前後に空白が含まれていても動くように、strip を併用しても構いません。テストでは正の数・負の数・前後に空白がある文字列など 4 種類が渡されます。

よくある質問

Q. このトピックは Python 以外の言語でも同じ書き方ですか?

A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。

Q. 実行してエラーが出た場合の対処は?

A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。

Q. 次のステップで何を学ぶべきですか?

A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。

次のレッスン

次は 数値を文字列に変換する で、数字の文字列を int に変換して計算する方法を学びます を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. int キャスト の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. int キャスト とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. 引数 a を int 関数で整数に変換する
  2. 引数 b を int 関数で整数に変換する
  3. それらを足した値を return で返す

入出力例

test-cases.txt

sum_strings("12", "34")46 sum_strings("-3", "7")4 sum_strings(" 10 ", "20")30 sum_strings("0", "0")0

ヒント

main.py
main.py
学習モード

メモ

文字列を int に変換する

⌘S で保存