Python 2とPython 3でのinput関数の違い

2018年9月11日Programming, Python, TECHNOLOGY

最近Pythonを勉強し始めたのですが、input関数で早速ちょっとつまづいたので、記録しておきます。

今回はPythonに置けるinput関数の違いです。

 

 

Python2系の場合

Python2系ではinput関数で入力した値がデータ式として認識されるようです。

 

例えば、

print('Enter your name')
name = input()
print('name is : ' + name)

のようなinputに文字列を渡すようなコードは思った通りには動かないでしょう。

Enter your name
FL1NE
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    name = input()
  File "<string>", line 1, in <module>
NameError: name 'FL1NE' is not defined

こんな感じになります。

エラーをみるとFL1NEが定義されていないということでした。データ式として扱われるのでFL1NEという名前の変数や関数がないということになります。

では1 + 1のような式を与えてみるとどうでしょうか。文字と数列を加算することはできないので最後のコードをとりあえず変更して実行します。

print('Enter your name')
name = input()
print(name)

 

Enter your name
1+1
2

お、1+1の結果である2が帰ってきましたね。

同様にデータとして正しいシングルクォーテーションで囲んだ 'FL1NE’ を渡すと…

Enter your name
"FL1NE"
FL1NE

このようになります。

 

 

Python3系の場合

Python3系ではinput関数で入力した値が文字列として認識されるようです。

 

そのため、Python2系でうまく動かなかった次のコードが想定通りに動くことでしょう。

print('Enter your name')
name = input()
print('name is : ' + name)
Enter your name
FL1NE
name is : FL1NE

このようになります。

また、Python2系の時のように次のようにコードを変更し、入力として1 + 1を渡してみるとどうなるでしょうか

print('Enter your name')
name = input()
print(name)

 

Enter your name
1+1
1+1

1+1がそのまま文字列として表示されました。

 

 

まとめ

このようにPython2系とPython3系で全然違う挙動をすることがあるようです。

今後も気がついたら、記事にしていこうと思います。

 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

斎藤 康毅
3,672円(04/01 18:11時点)
発売日: 2016/09/24
Amazonの情報を掲載しています
入門 Python 3

入門 Python 3

Bill Lubanovic
4,070円(04/01 18:11時点)
発売日: 2015/12/01
Amazonの情報を掲載しています
スラスラ読める Pythonふりがなプログラミング

スラスラ読める Pythonふりがなプログラミング

株式会社ビープラウド, リブロワークス
1,643円(04/01 00:18時点)
発売日: 2018/06/22
Amazonの情報を掲載しています