TLDR
- Python 3は
input
functionで受け取ったデータを評価しませんが、Python 2のinput
関数は評価します(意味を理解するには次のセクションを読んでください)。
- Pythonの3つの者のPythonの2の同等で
input
あるraw_input
機能。
Python 2.x
ユーザー入力を取得する関数には、input
およびの2つがありましたraw_input
。それらの違いは、raw_input
データを評価せず、文字列形式でそのまま返されます。ただし、input
入力したものはすべて評価され、評価の結果が返されます。例えば、
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
データ5 + 17
が評価され、結果は22
です。式を評価するときに、5 + 17
2つの数値を加算していることが検出されるため、結果も同じint
型になります。したがって、型変換は無料で行われ、変数の22
結果として返され、変数にinput
格納されdata
ます。あなたは考えることができますinput
ようraw_input
に構成eval
コール。
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
注:input
Python 2.xで使用する場合は注意が必要です。この答えで、なぜそれを使用するときに注意が必要なのかを説明しました。
ただし、raw_input
入力を評価せず、そのまま文字列として返します。
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
Python 3.x
Python 3.x input
とPython 2.x raw_input
は類似しておりraw_input
、Python 3.xでは使用できません。
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)
解決
Pythonの3.xのは評価し、データ型を変換しないため、明示的に変換する必要があり、あなたの質問に答えるためint
に、S int
のように、
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
次のint
ような関数を使用して、任意のベースの数を受け入れ、それらを直接base-10に変換できます。
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
2番目のパラメーターは、入力された数値の基数を示し、内部的にそれを理解して変換します。入力したデータが間違っている場合は、がスローされますValueError
。
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'
小数部を持つことができる値については、タイプは以下のようになりfloat
いうよりint
:
x = float(input("Enter a number:"))
それとは別に、このようにプログラムを少し変更することができます
while True:
...
...
if input("Play again? ") == "no":
break
とplay
を使用して、変数を取り除くことができます。break
while True