Python int関数とは?文字列を整数に変換する方法
Python初心者向けにint関数の使い方を解説。文字列から整数への変換、進数指定、エラーハンドリングまで実例とともに学べます。
みなさん、Pythonでプログラムを書いている時に「"123"という文字列を数値として計算に使いたい」と思ったことはありませんか?
「ユーザーの入力を数値に変換したい」 「ファイルから読み込んだデータで計算したい」 「型変換って何だか難しそう...」
そんな疑問を抱えている方も多いはず。 でも大丈夫です!
この記事では、Python int関数の使い方を初心者向けに分かりやすく解説します。 文字列を数値に変換する方法を、一緒にマスターしていきましょう!
int関数って何?
int関数は、文字列や他のデータ型を整数に変換してくれるPythonの組み込み関数です。 簡単に言うと、「データの種類を変える」機能なんです。
基本的な例を見てみよう
まずは、シンプルな例から始めましょう:
# int関数の基本例string_number = "123"integer_number = int(string_number)
print(f"文字列: {string_number} (型: {type(string_number)})")print(f"整数: {integer_number} (型: {type(integer_number)})")
# 計算での違いprint(f"文字列 + '456': {string_number + '456'}") # 文字列連結print(f"整数 + 456: {integer_number + 456}") # 数値計算
実行結果:
文字列: 123 (型: <class 'str'>)
整数: 123 (型: <class 'int'>)
文字列 + '456': 123456
整数 + 456: 579
文字列の"123"が整数の123に変わって、計算ができるようになりました。
なぜ型変換が必要なの?
プログラミングでは、データの種類(型)によって使える操作が決まります。 型変換が必要になる場面を見てみましょう:
# ユーザー入力の処理例user_input = "25" # input()は常に文字列で返されるprint(f"入力値: {user_input} (型: {type(user_input)})")
# 文字列のままでは数値計算ができないtry: next_year_age = user_input + 1 # エラーが発生except TypeError as e: print(f"エラー: 文字列と数値は足せません")
# int関数で変換すると計算可能age = int(user_input)next_year_age = age + 1print(f"来年の年齢: {next_year_age}歳")
実行結果:
入力値: 25 (型: <class 'str'>)
エラー: 文字列と数値は足せません
来年の年齢: 26歳
int関数で変換することで、文字列データを数値計算で活用できるようになります。
基本的な使い方
int関数の基本的な使い方を、パターン別に見ていきましょう。 どのパターンもよく使うので、しっかり覚えてくださいね。
文字列から整数への変換
最もよく使う、文字列から整数への変換です:
# 基本的な文字列→整数変換positive_str = "42"positive_int = int(positive_str)print(f"'{positive_str}' → {positive_int}")
# 負の数negative_str = "-17"negative_int = int(negative_str)print(f"'{negative_str}' → {negative_int}")
# ゼロzero_str = "0"zero_int = int(zero_str)print(f"'{zero_str}' → {zero_int}")
# 前後の空白は自動で削除されるspaced_str = " 123 "spaced_int = int(spaced_str)print(f"'{spaced_str}' → {spaced_int}")
実行結果:
'42' → 42
'-17' → -17
'0' → 0
' 123 ' → 123
前後に空白があっても、自動的に取り除いて変換してくれます。
様々な数値形式の変換
いろいろな形式の数値文字列を変換してみましょう:
# 一般的な数値numbers = ["1", "123", "999", "1000"]
for num_str in numbers: num_int = int(num_str) print(f"'{num_str}' → {num_int:,}") # カンマ区切りで表示
# プラス記号付きの数値plus_number = "+456"plus_int = int(plus_number)print(f"'{plus_number}' → {plus_int}")
実行結果:
'1' → 1
'123' → 123
'999' → 999
'1000' → 1,000
'+456' → 456
プラス記号が付いていても、正しく変換されます。
他のデータ型からの変換
文字列以外のデータ型からも変換できます:
# 浮動小数点数から整数への変換(小数点以下切り捨て)float_numbers = [3.14, 2.99, 5.0, -2.7]
for float_num in float_numbers: int_num = int(float_num) print(f"{float_num} → {int_num}")
print("注意: int()は小数点以下を切り捨てます(四捨五入ではない)")
# ブール値から整数への変換print(f"True → {int(True)}") # 1print(f"False → {int(False)}") # 0
# 引数なしのint()は0を返すempty_int = int()print(f"int() → {empty_int}")
実行結果:
3.14 → 3
2.99 → 2
5.0 → 5
-2.7 → -2
注意: int()は小数点以下を切り捨てます(四捨五入ではない)
True → 1
False → 0
int() → 0
小数点以下は切り捨てられることに注意してください。
進数指定での変換
int関数では、2進数や16進数などの異なる進数で表現された文字列も変換できます。 プログラミングでは意外と使う機会が多いんです。
基本的な進数変換
代表的な進数での変換例です:
# 2進数(base=2)binary_str = "1010"binary_int = int(binary_str, 2)print(f"2進数 '{binary_str}' → 10進数 {binary_int}")
# 8進数(base=8)octal_str = "755"octal_int = int(octal_str, 8)print(f"8進数 '{octal_str}' → 10進数 {octal_int}")
# 16進数(base=16)hex_str = "FF"hex_int = int(hex_str, 16)print(f"16進数 '{hex_str}' → 10進数 {hex_int}")
実行結果:
2進数 '1010' → 10進数 10
8進数 '755' → 10進数 493
16進数 'FF' → 10進数 255
第2引数に進数を指定することで、様々な進数から変換できます。
プレフィックス付きの進数
プレフィックス(接頭辞)が付いた進数も自動判定できます:
# プレフィックス付きの進数(base=0で自動判定)prefixed_numbers = [ "0b1010", # 2進数 "0o755", # 8進数 "0xFF" # 16進数]
for num_str in prefixed_numbers: result = int(num_str, 0) # base=0で自動判定 print(f"'{num_str}' → {result}")
実行結果:
'0b1010' → 10
'0o755' → 493
'0xFF' → 255
base=0を指定すると、プレフィックスから進数を自動判定してくれます。
実用例:色の16進数変換
Webサイトなどでよく使われる、色の16進数変換の例です:
# 色の16進数変換color_codes = ["FF", "80", "00"] # RGB値color_names = ["赤", "緑", "青"]
print("色の16進数変換:")for code, name in zip(color_codes, color_names): decimal_value = int(code, 16) print(f"{name}: #{code} → {decimal_value}")
# HTMLカラーコード全体html_color = "FF8000" # オレンジ色red = int(html_color[0:2], 16)green = int(html_color[2:4], 16)blue = int(html_color[4:6], 16)
print(f"#{html_color} → RGB({red}, {green}, {blue})")
実行結果:
色の16進数変換:
赤: #FF → 255
緑: #80 → 128
青: #00 → 0
#FF8000 → RGB(255, 128, 0)
Web開発でよく使われるカラーコードの変換もできます。
エラー処理と対策
int関数を使う時に起きるエラーと、その対処法を学びましょう。 エラーを上手に処理することで、安定したプログラムが作れます。
よくあるエラーパターン
int関数で発生する主なエラーを見てみましょう:
# ValueError が発生するケースinvalid_strings = [ "abc", # アルファベット "12.34", # 小数点を含む文字列 "123abc", # 数字と文字の混在 "", # 空文字列 "12 34", # スペースを含む "123" # 全角数字]
print("ValueError が発生するケース:")for invalid_str in invalid_strings: try: result = int(invalid_str) print(f"'{invalid_str}' → {result}") except ValueError: print(f"'{invalid_str}' → エラー: 変換できません")
実行結果:
ValueError が発生するケース:
'abc' → エラー: 変換できません
'12.34' → エラー: 変換できません
'123abc' → エラー: 変換できません
'' → エラー: 変換できません
'12 34' → エラー: 変換できません
'123' → エラー: 変換できません
これらのパターンは変換できないので、エラーが発生します。
安全な型変換関数
エラーが起きても止まらない、安全な変換関数を作ってみましょう:
def safe_int(value, default=0): """安全なint変換(エラー時はデフォルト値を返す)""" try: return int(value) except (ValueError, TypeError): return default
# テストケースtest_values = ["123", "abc", "45.67", None, "", " 789 "]
print("安全な型変換関数のテスト:")for value in test_values: result = safe_int(value) print(f"safe_int('{value}') → {result}")
# デフォルト値を指定した例print("デフォルト値を-1に指定:")for value in test_values: result = safe_int(value, default=-1) print(f"safe_int('{value}', default=-1) → {result}")
実行結果:
安全な型変換関数のテスト:
safe_int('123') → 123
safe_int('abc') → 0
safe_int('45.67') → 0
safe_int('None') → 0
safe_int('') → 0
safe_int(' 789 ') → 789
デフォルト値を-1に指定:
safe_int('123', default=-1) → 123
safe_int('abc', default=-1) → -1
safe_int('45.67', default=-1) → -1
safe_int('None', default=-1) → -1
safe_int('', default=-1) → -1
safe_int(' 789 ', default=-1) → 789
エラーが起きても、デフォルト値を返してプログラムが止まりません。
ユーザー入力の検証
実際のプログラムでよく使われる、入力検証の例です:
def get_age_input(): """年齢入力の検証例""" # 実際のプログラムではinput()を使用 sample_inputs = ["25", "abc", "150", "-5", "20"] for sample_input in sample_inputs: print(f"入力値: '{sample_input}'") try: age = int(sample_input) # 範囲チェック if age < 0: print("エラー: 年齢は0以上で入力してください") continue if age > 120: print("エラー: 年齢は120以下で入力してください") continue print(f"有効な年齢: {age}歳") return age except ValueError: print("エラー: 数値を入力してください")
print("年齢入力の検証例:")get_age_input()
実行結果:
年齢入力の検証例:
入力値: '25'
有効な年齢: 25歳
入力値: 'abc'
エラー: 数値を入力してください
入力値: '150'
エラー: 年齢は120以下で入力してください
入力値: '-5'
エラー: 年齢は0以上で入力してください
入力値: '20'
有効な年齢: 20歳
このように検証することで、適切な値だけを受け入れられます。
実践的な活用例
実際のプログラムでint関数がどのように使われるか、具体例を見てみましょう。 これらの例を参考に、実際のプロジェクトで活用してください。
CSVデータの処理
ファイルから読み込んだCSVデータを処理する例です:
# サンプルCSVデータcsv_content = """名前,年齢,点数,クラス田中太郎,20,85,1佐藤花子,19,92,2鈴木一郎,21,78,1高橋美咲,20,88,3"""
# CSVデータの解析lines = csv_content.strip().split('')headers = lines[0].split(',')
students = []for line in lines[1:]: values = line.split(',') student = { 'name': values[0], 'age': int(values[1]), # 文字列→整数変換 'score': int(values[2]), # 文字列→整数変換 'class': int(values[3]) # 文字列→整数変換 } students.append(student)
print("処理されたデータ:")for student in students: print(f" {student}")
# 統計計算ages = [student['age'] for student in students]scores = [student['score'] for student in students]
print(f"統計情報:")print(f"平均年齢: {sum(ages) / len(ages):.1f}歳")print(f"平均点: {sum(scores) / len(scores):.1f}点")
実行結果:
処理されたデータ:
{'name': '田中太郎', 'age': 20, 'score': 85, 'class': 1}
{'name': '佐藤花子', 'age': 19, 'score': 92, 'class': 2}
{'name': '鈴木一郎', 'age': 21, 'score': 78, 'class': 1}
{'name': '高橋美咲', 'age': 20, 'score': 88, 'class': 3}
統計情報:
平均年齢: 20.0歳
平均点: 85.8点
CSVファイルの数値データを正しく変換して、統計計算ができました。
設定ファイルの処理
アプリケーションの設定ファイルを処理する例です:
# 設定ファイルの内容(key=value形式)config_content = """# アプリケーション設定port=8080timeout=30max_connections=100debug=1retry_count=3"""
config = {}for line in config_content.split(''): line = line.strip() # コメント行をスキップ if line.startswith('#') or not line: continue # key=value の分割 if '=' in line: key, value = line.split('=', 1) # 数値として解釈できる場合は変換 try: config[key] = int(value) except ValueError: config[key] = value # 文字列のまま保持
print("処理された設定:")for key, value in config.items(): print(f" {key}: {value} ({type(value).__name__})")
# 設定値の使用例if config.get('debug', 0): print("デバッグモードが有効です")
実行結果:
処理された設定:
port: 8080 (int)
timeout: 30 (int)
max_connections: 100 (int)
debug: 1 (int)
retry_count: 3 (int)
デバッグモードが有効です
設定ファイルの数値を自動的に変換して、適切な型で保存できました。
ゲームスコア管理システム
ゲームのスコア管理システムでの活用例です:
class ScoreManager: """ゲームスコア管理クラス""" def __init__(self): self.scores = {} def add_player_score(self, player_name, score_str): """プレイヤーのスコア追加""" try: score = int(score_str) if player_name not in self.scores: self.scores[player_name] = [] self.scores[player_name].append(score) print(f"{player_name}のスコア {score} を追加しました") except ValueError: print(f"エラー: '{score_str}' は有効なスコアではありません") def get_player_stats(self, player_name): """プレイヤーの統計情報""" if player_name not in self.scores: print(f"{player_name}のデータがありません") return player_scores = self.scores[player_name] total_score = sum(player_scores) avg_score = total_score / len(player_scores) best_score = max(player_scores) game_count = len(player_scores) print(f"{player_name}の統計:") print(f" ゲーム数: {game_count}") print(f" 合計スコア: {total_score:,}") print(f" 平均スコア: {avg_score:.1f}") print(f" 最高スコア: {best_score:,}")
# スコア管理システムの使用例score_mgr = ScoreManager()
# サンプルデータの追加sample_data = [ ("Alice", "1500"), ("Bob", "1200"), ("Alice", "1800"), ("Charlie", "abc"), # エラーケース ("Bob", "1350"), ("Alice", "1650")]
print("スコア管理システムのテスト:")for player, score in sample_data: score_mgr.add_player_score(player, score)
score_mgr.get_player_stats("Alice")
実行結果:
スコア管理システムのテスト:
Aliceのスコア 1500 を追加しました
Bobのスコア 1200 を追加しました
Aliceのスコア 1800 を追加しました
エラー: 'abc' は有効なスコアではありません
Bobのスコア 1350 を追加しました
Aliceのスコア 1650 を追加しました
Aliceの統計:
ゲーム数: 3
合計スコア: 4,950
平均スコア: 1650.0
最高スコア: 1,800
エラー処理により、無効なスコアも安全に処理できています。
まとめ
Python int関数の重要なポイントをまとめます。
基本概念:
- 文字列や他の型を整数に変換する関数
- **型変換(キャスト)**の基本的な機能
- プログラムでの数値処理に必須
基本的な使い方:
int(string)
: 文字列を整数に変換int(float)
: 浮動小数点数を整数に変換(切り捨て)int(bool)
: ブール値を整数に変換(True→1, False→0)
進数指定:
int(string, base)
: 指定した進数で変換- 2進数、8進数、16進数などに対応
- base=0で自動判定(プレフィックス対応)
エラー処理:
- ValueError: 変換できない文字列
- TypeError: 変換できない型
- try-except文での安全な処理
実践的な活用場面:
- CSVデータの数値変換
- 設定ファイルの処理
- ユーザー入力の検証
- ゲームやアプリのデータ管理
int関数は、Pythonプログラミングで最も頻繁に使用される型変換関数の一つです。 文字列データを数値として処理する際には必須の機能で、エラーハンドリングと組み合わせることで堅牢なプログラムが作成できます。
ぜひ様々なデータ処理場面で、今回学んだint関数を活用してみてくださいね! きっとプログラミングがもっと楽しくなるはずです。