前回:Pythonの型変換!int()・float()・str()とValueErrorの原因|Python基礎講座 第3回

「input() で数を入力したのに、計算しようとしたらエラーになった…」「実行したら止まったまま、何も起きない…」

input() を初めて使うと、こんなところでつまずきますよね。この記事は、Pythonの基本を1テーマずつ押さえる連載「Python基礎講座」の第4回です。今回はinput() でキーボードから値を受け取る方法を、実際に動かしながら見ていきます。

対象はPythonを始めたばかりの初心者の方で、難易度は入門レベルです。前回の型変換(int() など)がさっそく活躍します。動作確認は Python 3.13 で行いました。一緒に見ていきましょう! 😊

input() とは?プログラムが「聞いて待つ」関数

keyboard typing
keyboard typing / Photo by Szabó Viktor via Pexels

input() は、ユーザーがキーボードで文字を打って Enter を押すまで待ち、打たれた文字を受け取る関数です。

イメージとしては、お店の受付で「お名前をどうぞ」と聞かれて、書き終わるまで待ってもらう感じです。カッコの中に書いた文字(プロンプト)が「お名前をどうぞ」にあたり、画面に表示されてから入力待ちになります。

  • 書き方:変数 = input("画面に出す文字")
  • 受け取った値は、何を入力しても文字列(str)
  • 最後の Enter(改行)は取り除かれて返ってくる(公式ドキュメントの input() にも書かれています)

サンプル1:名前を受け取ってあいさつする

まずはいちばんシンプルな形です。ファイルに保存して、ターミナルで python ファイル名.py と実行してみてください。

# input() でキーボードから文字を受け取る
name = input("名前を入力してください: ")
print("こんにちは、" + name + "さん!")

# 受け取った値の型と中身を確かめる
print(type(name))
print(repr(name))
サンプル1の実行結果:input()で受け取った値は文字列になる
サンプル1の実行結果:input()で受け取った値は文字列になる

「太郎」と入力して Enter を押すと、こうなりました。

名前を入力してください: 太郎
こんにちは、太郎さん!
<class 'str'>
'太郎'

ここが重要です👇

  • プロンプトの最後に ": " と空白を入れておくと、入力した文字がくっつかず読みやすくなります
  • type(name) は <class 'str'>。受け取った値は文字列です
  • repr() で見ると '太郎' で、Enter の改行(\n)は入っていません

ちなみに、前後に空白を付けて「 太郎 」と入力するとこうなりました。

名前を入力してください:  太郎 
こんにちは、 太郎 さん!
<class 'str'>
' 太郎 '

改行は取り除かれますが、空白はそのまま残ります。「さん」の前に空白が入っているのはそのためです。空白を取り除く方法は、第10回(文字列メソッド)で扱う予定です。

サンプル2:数を入力したのに計算できない

次は年齢を受け取って、来年の年齢を表示してみます。これ、実行せずに結果がわかりますか?

age = input("年齢を入力してください: ")

# 来年の年齢を表示したい
print("来年は", age + 1, "歳です")

「20」と入力すると、エラーで止まりました(ファイルの場所は環境によって変わるので …\ と省略しています)。

年齢を入力してください: 20
Traceback (most recent call last):
  File "…\s2_error.py", line 4, in <module>
    print("来年は", age + 1, "歳です")
                    ~~~~^~~
TypeError: can only concatenate str (not "int") to str

最後の行の can only concatenate str (not "int") to str は、「文字列には文字列しかつなげられません(int はダメ)」という意味です。キーボードで打った「20」は、見た目は数でも文字列の "20" なので、+ 1 できなかったわけです。

直し方は、受け取ってすぐ int() で整数にすることです。

age = int(input("年齢を入力してください: "))  # 受け取ってすぐ整数にする

print("来年は", age + 1, "歳です")
print(type(age))
年齢を入力してください: 20
来年は 21 歳です
<class 'int'>

int(input(...)) のように重ねて書くと、内側の input() が先に動き、その結果の文字列が int() に渡されます。小数を受け取りたいときは float(input(...)) です。

サンプル3:割り勘計算(Enter だけのときは2人にする)

最後に、合計金額と人数を受け取って割り勘する小さなプログラムを作ります。人数を空のまま Enter したときは「2人」として扱うようにしました。

# 割り勘計算:受け取ったらすぐ int() で整数にする
total = int(input("合計金額(円): "))

# 人数は空のまま Enter なら 2人 として扱う
text = input("人数(Enterだけなら2人): ")
if text == "":
    people = 2
else:
    people = int(text)

per_person = int(total / people)  # 1円未満は切り捨て(第3回)
print(f"{people}人で割ると、1人{per_person}円です")
サンプル3の実行結果:受け取った金額と人数で割り勘を計算
サンプル3の実行結果:受け取った金額と人数で割り勘を計算

「3500」と「3」を入力した結果です。

合計金額(円): 3500
人数(Enterだけなら2人): 3
3人で割ると、1人1166円です

人数を空のまま Enter すると、2人として計算されました。

合計金額(円): 3500
人数(Enterだけなら2人): 
2人で割ると、1人1750円です

ポイントをまとめるとこんな感じです👇

  • 何も入力せずに Enter を押すと、input() は空の文字列 "" を返します。そのまま int("") にすると ValueError になるので、先に text == "" で確かめています(if 文は既存の記事で詳しく解説しています)
  • 全角の「4」と入力しても 4人で割ると、1人875円です と計算できました。前回見たとおり、int() は全角数字も受け付けます
  • ただし漢字の「三」は通りません。入力してみると、こうなりました
合計金額(円): 3500
人数(Enterだけなら2人): 三
Traceback (most recent call last):
  File "…\s3_warikan.py", line 9, in <module>
    people = int(text)
ValueError: invalid literal for int() with base 10: '三'

メッセージの最後に、変換できなかった値 '三' がそのまま出ています。input() と int() を組み合わせるときは、ユーザーが想定外の文字を打つこともあると覚えておきましょう ⚠️

入力待ちで止まる・EOFError が出るとき

input() まわりで、コードの書き間違い以外によくあるつまずきも押さえておきます。

実行したまま何も起きない

エラーが出ずに止まっているなら、たいていは入力待ちの状態です。プロンプトを書かずに input() とだけ書くと、画面に何も出ないまま待つので、固まったように見えます。カーソルが点滅している場所で文字を打って Enter を押してみてください。

VS Code の拡張機能「Code Runner」を使っている場合は、結果が表示される「出力」パネルが読み取り専用で、そこには入力できません。設定で code-runner.runInTerminal をオンにするか、ターミナルから python ファイル名.py で実行しましょう。

EOFError: EOF when reading a line

サンプル1を、入力を何も渡さない形で実行したところ、このエラーになりました。

名前を入力してください: Traceback (most recent call last):
  File "…\s1_basic.py", line 2, in <module>
    name = input("名前を入力してください: ")
           ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
EOFError: EOF when reading a line

EOF は「End Of File(入力の終わり)」のことです。つまり「入力を読もうとしたのに、もう読むものがなかった」というエラーです。入力欄のない実行環境で input() を使うと起きることがあります。コードの間違いではないので、キーボードで入力できる環境(ターミナルなど)で実行し直すのが近道です。

まとめ

  • input("プロンプト") は、Enter が押されるまで待って、入力された文字を返す
  • 返ってくる値はいつも文字列(str)。最後の改行は取り除かれるが、前後の空白は残る
  • 数として使うなら int(input(...)) / float(input(...)) で受け取ってすぐ変換する
  • 空のまま Enter すると ""。int("") は ValueError なので、先に確かめると安心
  • 止まって見えるときは入力待ち、EOFError は入力できない環境で実行しているサイン

次回の第5回は、//・%・** などの算術演算子と計算の順番を取り上げます。サンプル3の割り勘で「1円未満の余り」を出すのにも使えますよ。今回のサンプルに、自分ならではの質問を足して、ぜひ試してみてください! 🚀

\ 読んだら、次は自分で作ってみよう /

筆者が運営する無料の入門コース「作って学ぶPythonプログラミング入門」では、こうした基本文法を、割り勘計算機・おみくじ・数当てゲームなどを作りながら身につけます。各章末の定着ドリル(全42問)で、自分の手で書く練習まで。最初の4レッスンは登録なしで読めます。

→ 無料の入門コース(全7章52レッスン)を見てみる

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る
実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。