Pythonでプログラムを作成していると、ユーザーの入力値やファイルから読み込んだデータが文字列型になっており、数値として計算に使えないケースに直面します。特にinput()関数で受け取った値は常に文字列型(str型)で返されるため、そのままでは四則演算ができません。
この記事では、Pythonでintやstrの型変換を行う具体的な方法を、コピペで動作するサンプルコード付きで解説します。文字列から整数への変換だけではなく、整数から文字列への変換やfloat型からint型への変換まで網羅しているので、型変換で困った際の参考にしてください。
目次
- Pythonで文字列をint型に変換する方法
- int()関数で変換する
- 基数を指定して変換する
- エラーを回避して変換する
- Pythonでint型を文字列に変換する方法
- str()関数で変換する
- f-stringで変換する
- format()メソッドで変換する
- Pythonでfloat型をint型に変換する方法
- int()関数で小数点以下を切り捨てる
- math.floor()とmath.ceil()で変換する
- round()関数で丸める
- Pythonの型変換に関するよくある質問
- int()で変換できない文字列はどうすればよいですか?
- intとfloatの違いは何ですか?
- input()で受け取った値を数値として使うにはどうすればよいですか?
Pythonで文字列をint型に変換する方法
Pythonで文字列をint型(整数型)に変換するには、組み込み関数のint()を使用します。int型とは、小数点を含まない整数を扱うデータ型のことです。ここでは、文字列をint型に変換する方法を3つ紹介します。
- int()関数で変換する
- 基数を指定して変換する
- エラーを回避して変換する
それぞれの方法にはサンプルコードを掲載しているので、用途に合わせて活用してください。
それでは各項目について、詳しく解説していきます。
int()関数で変換する
int()関数は、引数に渡した文字列を整数に変換するPythonの組み込み関数です。数字のみで構成された文字列を渡すと、対応する整数値が返されます。
text = "456"
number = int(text)
print(number)
print(type(number))
上記のコードを実行すると、456が整数として出力され、型は<class 'int'>と表示されます。文字列"456"が整数456に変換されていることを確認できます。
なお、文字列の先頭や末尾に空白文字(スペースやタブなど)が含まれている場合でも、int()関数は先頭と末尾の空白のみを無視して変換を行います。ただし、文字列内に小数点(.)が含まれている場合はValueErrorが発生するため、小数を含む文字列にはfloat()関数を使用する必要があります。
基数を指定して変換する
int()関数の第2引数に基数を指定すると、2進数や8進数、16進数の文字列を10進数の整数に変換できます。基数とは、数値を表現する際の桁上がりの単位を示す数のことです。
binary = "1010"
octal = "17"
hexadecimal = "1A"
print(int(binary, 2))
print(int(octal, 8))
print(int(hexadecimal, 16))
上記のコードでは、2進数の"1010"が10に、8進数の"17"が15に、16進数の"1A"が26にそれぞれ変換されます。基数を省略した場合は10進数として扱われます。
0bや0o、0xのプレフィックスが付いた文字列を変換する場合は、第2引数に0を指定するとPythonがプレフィックスから基数を自動判定します。たとえばint("0xFF", 0)は255を返します。
エラーを回避して変換する
数字以外の文字を含む文字列をint()関数に渡すと、ValueErrorが発生します。ユーザー入力のように変換可能かどうかが不確定なデータを扱う場合は、try-except構文でエラーを捕捉する方法が有効です。
user_input = "abc"
try:
number = int(user_input)
print(number)
except ValueError:
print(f"'{user_input}'は整数に変換できません")
上記のコードでは、"abc"を整数に変換しようとしてValueErrorが発生しますが、exceptブロックでエラーメッセージを表示してプログラムの異常終了を防いでいます。
変換前に文字列が数字のみで構成されているかを確認したい場合は、str.isdigit()メソッドを使用する方法もあります。ただし、isdigit()は負の数(先頭にマイナス記号がある文字列)に対してFalseを返すほか、全角数字やUnicode数字に対してもTrueを返すため、int()の変換可否を正確に判定する用途には向いていません。確実な判定が必要な場合はtry-exceptを使用してください。
Pythonでint型を文字列に変換する方法
Pythonでint型の数値を文字列に変換する場面は、数値をメッセージに埋め込んで表示する場合やファイルに書き出す場合に発生します。ここでは、int型を文字列に変換する方法を3つ紹介します。
- str()関数で変換する
- f-stringで変換する
- format()メソッドで変換する
それぞれの方法には異なる特徴があり、コードの可読性や用途に応じて使い分けられます。
それでは各項目について、詳しく解説していきます。
str()関数で変換する
str()関数は、引数に渡した値を文字列型に変換するPythonの組み込み関数です。整数やfloat型の数値を文字列として扱いたい場合に使用します。
number = 100
text = str(number)
print("合計は" + text + "個です")
print(type(text))
上記のコードを実行すると、合計は100個ですと表示されます。str()関数によって整数100が文字列"100"に変換されたことで、文字列との連結(+演算子)が可能になっています。
str()関数を使わずに整数と文字列を+演算子で連結しようとすると、TypeErrorが発生します。Pythonでは文字列と数値の連結において暗黙的な型変換は行われないため、連結する際は明示的な変換が必要です。
f-stringで変換する
f-stringとは、文字列リテラルの先頭にfを付けて、波括弧{}内に変数や式を直接埋め込む記法のことです。Python 3.6以降で使用でき、str()関数を呼び出すことなく数値を文字列に組み込めます。
price = 1500
quantity = 3
message = f"単価{price}円で{quantity}個、合計{price * quantity}円です"
print(message)
上記のコードを実行すると、単価1500円で3個、合計4500円ですと表示されます。波括弧内に変数名だけではなく計算式も記述できるため、コードが簡潔になります。
f-stringは可読性が高く、複数の変数を1つの文字列に埋め込む場合に特に便利です。str()関数と+演算子を組み合わせるよりもコード量が少なくなるため、Python 3.6以降の環境では積極的に活用してください。
format()メソッドで変換する
format()メソッドは、文字列内のプレースホルダー{}に値を挿入する文字列メソッドです。動的にフォーマット文字列を組み立てたい場合や、書式を細かく制御したい場合に使用します。
name = "商品A"
price = 2980
result = "{}の価格は{:,}円です".format(name, price)
print(result)
上記のコードを実行すると、商品Aの価格は2,980円ですと表示されます。{:,}のように書式指定子を使うと、数値にカンマ区切りを自動で付与できます。
format()メソッドでは、{:.2f}で小数点以下2桁に固定したり、{:>10}で右寄せ10文字幅にしたりする書式指定も可能です。f-stringでも同様の書式指定は可能ですが、フォーマット文字列を変数として動的に構成したい場合はformat()メソッドが適しています。
Pythonでfloat型をint型に変換する方法
Pythonでfloat型(浮動小数点数型)をint型に変換する方法は、小数点以下の扱い方によって使い分ける必要があります。float型とは、3.14のように小数点を含む数値を扱うデータ型のことです。ここでは、float型をint型に変換する方法を3つ紹介します。
- int()関数で小数点以下を切り捨てる
- math.floor()とmath.ceil()で変換する
- round()関数で四捨五入する
それぞれの方法で変換結果が異なるため、目的に応じて適切な関数を選択してください。
それでは各項目について、詳しく解説していきます。
int()関数で小数点以下を切り捨てる
int()関数にfloat型の値を渡すと、小数点以下が切り捨てられて整数に変換されます。この動作は「0に向かって切り捨てる」処理であり、正の数では小数部分の切り捨て、負の数では切り上げに相当します。
positive = 3.9
negative = -3.9
print(int(positive))
print(int(negative))
上記のコードを実行すると、int(3.9)は3を返し、int(-3.9)は-3を返します。負の数の場合は-4ではなく-3になる点に注意してください。
単純に小数部分を除去したい場合はint()関数が最も簡潔な方法です。ただし、常に小さい方の整数に丸めたい場合(床関数)や常に大きい方の整数に丸めたい場合(天井関数)は、次のH3で解説するmathモジュールの関数を使用してください。
math.floor()とmath.ceil()で変換する
Pythonに標準搭載されているmathモジュールのmath.floor()関数は常に小さい方の整数に切り捨て、math.ceil()関数は常に大きい方の整数に切り上げます。
import math
value = 3.2
print(math.floor(value))
print(math.ceil(value))
print(math.floor(-3.2))
print(math.ceil(-3.2))
上記のコードを実行すると、math.floor(3.2)は3、math.ceil(3.2)は4を返します。負の数ではmath.floor(-3.2)が-4、math.ceil(-3.2)が-3を返します。
int()関数との違いは、負の数の処理にあります。int(-3.2)は-3(0方向への切り捨て)ですが、math.floor(-3.2)は-4(常に小さい方への切り捨て)です。金額計算のように正確な端数処理が求められる場面では、math.floor()やmath.ceil()を使用してください。
round()関数で丸める
round()関数は、指定した桁数で数値を丸める組み込み関数です。第2引数を省略すると、小数点以下を丸めた整数を返します。
print(round(3.4))
print(round(3.7))
print(round(0.5))
print(round(1.5))
print(round(2.5))
上記のコードを実行すると、round(3.4)は3、round(3.7)は4を返します。一方、round(0.5)は0、round(1.5)は2、round(2.5)は2を返します。
Pythonのround()関数は「銀行家の丸め」(偶数丸め)を採用しており、.5の場合は最も近い偶数に丸められます。一般的な四捨五入とは異なる結果になるため、厳密な四捨五入が必要な場合はdecimalモジュールのDecimalクラスでquantize()メソッドにROUND_HALF_UPを指定する方法を検討してください。
Pythonの型変換に関するよくある質問
int()で変換できない文字列はどうすればよいですか?
int()関数で変換できない文字列(アルファベットや記号を含む文字列)を整数に変換しようとすると、ValueErrorが発生します。この場合はtry-except構文でエラーを捕捉し、デフォルト値を設定するかエラーメッセージを表示する方法が有効です。
def safe_int(text, default=0):
try:
return int(text)
except ValueError:
return default
print(safe_int("123"))
print(safe_int("abc"))
print(safe_int("", -1))
上記のコードでは、変換に失敗した場合にデフォルト値を返す関数を定義しています。safe_int("abc")は0を返し、safe_int("", -1)は-1を返します。
intとfloatの違いは何ですか?
int型は小数点を含まない整数(例: 1、-5、100)を扱い、float型は小数点を含む数値(例: 3.14、-0.5、1.0)を扱います。Pythonではint型はメモリが許す限り任意の大きさの整数を扱えますが、float型は有効桁数に限界があります。
print(type(10))
print(type(10.0))
print(10 == 10.0)
print(type(10) == type(10.0))
上記のコードを実行すると、10と10.0は値としては等しい(==でTrue)ですが、type()で確認すると型が異なることがわかります。int型とfloat型の演算結果は自動的にfloat型になるため、整数の精度を維持したい場合は最初からfloat化せずに整数演算で処理してください。
input()で受け取った値を数値として使うにはどうすればよいですか?
input()関数は常にstr型(文字列型)で値を返すため、数値として計算に使うにはint()やfloat()で明示的に型変換する必要があります。ユーザーが数字以外を入力する可能性がある場合は、try-exceptでエラー処理を行ってください。
while True:
user_input = input("整数を入力してください: ")
try:
number = int(user_input)
print(f"入力値の2倍は{number * 2}です")
break
except ValueError:
print("整数を入力してください")
上記のコードでは、ユーザーが整数以外の値を入力した場合に再入力を求めるループ処理を実装しています。正しい整数が入力されると計算結果を表示してループを終了します。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
PythonをWebで実行する方法
共通テスト「情報Ⅰ」2年目で変わる、日本の教育と学び方
gitでブランチ(branch)を切り替える方法
git cloneでブランチを指定する方法
64GBのメモリが必要な人・不要な人の特徴
PCを再起動するコマンド一覧
CapsLock以外で大文字になる原因【Windows編】
パソコンで大文字になるのを解除する方法
面白いAIの活用事例を業界別に紹介
Gitでcommit(コミット)を取り消す方法
ITやプログラミングに関するニュース
サイボウズがkintone AIを正式提供、β版から約1年を経てクレジット制を導入
ロゼッタのラクヤクAIがCSRドラフト作成期間を90%以上短縮、従来4週間を約2日に
AI CROSSが不動産業界向け生成AI伴走支援を開始、アスコットの業務AI実装を実践サポート
日本情報クリエイトが「オーナー提案AIロボⅡ」売買査定を刷新、月1万円からW査定が回数無制限に
Wur株式会社がAI新規事業診断サービス「MVP事業診断レポート」をリリース、12の質問で事業構想を約10分で分析
バトンズがM&A専門家向け「AI概要書」β版を提供開始、企業概要書のドラフトを最速3分で自動生成
SCSKが観光DXサービス「Connexia」を開発、首里城公園でNFT活用の周遊促進が始動
Verdent AI発表、エンジニア不要でソフトウェアを構築する「AIエンジニアリングチーム」が登場
ゼネラルBREXAテクノロジーが外食・小売向けAIサービス「aimana」を開発、店長の意思決定をデータで支援
田中組がKencopa工程AIエージェント製品版を先行利用開始、建設現場の工程管理属人化を解消へ
