web-dev-qa-db-ja.com

入力を数値として読み取る方法はありますか

以下のコードでは、なぜxyという文字列が整数ではなくなっているのでしょうか。

(注:Python 2.xではraw_input()を使用します。Python3.xではinput()を使用します。Python3.xではraw_input()input()に名前変更されました。)

play = True

while play:

    x = input("Enter a number: ")
    y = input("Enter a number: ")

    print(x + y)
    print(x - y)
    print(x * y)
    print(x / y)
    print(x % y)

    if input("Play again? ") == "no":
        play = False
262
Hosch250

_ tldr _

  • Python 3はinput関数で受け取ったデータを評価しませんが、Python 2のinput関数は評価します(その意味を理解するために次のセクションを読んでください)。
  • Python 2のPython 3のinputと同等のものはraw_input関数です。

Python 2.x

input および raw_input と呼ばれる、ユーザー入力を取得するための2つの関数がありました。違いは、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型になるでしょう。そのため、型変換は無料で行われ、inputの結果として22が返され、data変数に格納されます。 inputは、 eval 呼び出しで構成されたraw_inputと考えることができます。

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

注: Python 2.xでinputを使用している場合は注意が必要です。私はなぜそれを使うときに注意を払うべきかを この答え で説明しました。

しかし、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はデータ型を評価して変換しないので、あなたは明示的にintsに変換しなければなりません、 int のように、

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

このように、任意の基数を受け入れて、int関数を使用してそれらを直接基数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

playwhile Trueを使うことでbreak変数を取り除くことができます。

_ ps _ :Pythonは行の終わりに;を期待しません:)

270
thefourtheye

Python 3.xでは、raw_inputinputに改名され、Python 2.xのinputは削除されました。

これは、Python 3.xのraw_inputinput のように、常に文字列オブジェクトを返すことを意味します。

この問題を解決するには、これらの入力を int に入れて明示的に整数にする必要があります。

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

また、Pythonは行末にセミコロンを必要としません。それで、それらを持っていることは何もポジティブなことをしません。

39
iCodez

1行に複数の整数がある場合は、 map が良いでしょう。

arr = map(int, raw_input().split())

数がすでにわかっている場合は(2つの整数のように)、

num1, num2 = map(int, raw_input().split())
22
user1341043

input()(Python 3)とraw_input()(Python 2) 常に 文字列を返します。 int()を使って結果を明示的に整数に変換します。

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

利点:Pythonではセミコロンは必要ありません。

13
Martijn Pieters

複数の質問では、1行に複数の整数を入力する必要があります。最善の方法は、数字の文字列全体を1行に入力してから整数に分割することです。

 p=raw_input()
    p=p.split()      
    for i in p:
        a.append(int(i))
9
gumboy

整数に変換する:

my_number = int(input("enter the number"))

浮動小数点数についても同様です。

my_decimalnumber = float(input("enter the number"))
6

Python 3.x
pythonでintを入力として受け取る:私たちは、以下を使って単純なstring入力を取ります。

input()

今度はintを入力として使います。それで、我々はこのstringを単にintに型キャストします:

int(input())
6
Rohit-Pandey

Python 3.x では、デフォルトでinput関数は文字列フォーマットで入力を取ります。それを整数に変換するにはint(input())を含める必要があります。

x=int(input("Enter the number"))
5

Python 3.xには、常にstringを返すinput()関数があります。intに変換する必要があります。

python 3.x

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

python 2.x

Python 2.xでは、raw_input()input()関数は常に文字列を返すので、それらもintに変換する必要があります。

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
5
Harun ERGUL
def dbz():
    try:
        r = raw_input("Enter number:")
        if r.isdigit():
            i = int(raw_input("Enter divident:"))
            d = int(r)/i
            print "O/p is -:",d
        else:
            print "Not a number"
    except Exception ,e:
        print "Program halted incorrect data entered",type(e)
dbz()

Or 

num = input("Enter Number:")#"input" will accept only numbers
3
Sanyal

CodeChef の問題を解決しながら整数入力を取るという問題に遭遇しました。ここでは、スペースで区切られた2つの整数が1行から読み取られます。

int(input())は単一の整数で十分ですが、私は2つの整数を入力する直接的な方法を見つけませんでした。私はこれを試しました:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
    if num[i] == ' ':
        break

num1 = int(num[:i])
num2 = int(num[i+1:])

今度はnum1とnum2を整数として使います。お役に立てれば。

3
Aravind
play = True

while play:

    #you can simply contain the input function inside an int function i.e int(input(""))
    #This will only accept int inputs
    # and can also convert any variable to 'int' form

    x = int(input("Enter a number: "))    
    y = int(input("Enter a number: "))

    print(x + y)
    print(x - y)
    print(x * y)
    print(x / y)
    print(x % y)

    if input("Play again? ") == "no":
        play = False
2
uday more
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

forループは 'n'回実行されます。 2番目の 'n'は配列の長さです。最後のステートメントは整数をリストにマップし、スペースで区切られた形式で入力を受け取ります。 forループの最後に配列を返すこともできます。

2
ravi tanwar

あなたの例では、int(input(...))がどんな場合でもうまくいくが、python-futurebuiltins.input はあなたのコードがPython 2と3 の両方で動作することを確かめ、はPython2のデフォルトのinputを無効にする。入力データ型を「賢く」しようとする(builtins.inputは基本的にはraw_inputのように振る舞うだけです)。

2
Tobias Kienzler

はい、python 3.xでは、raw_inputinputに置き換えられました。 inputの古い動作に戻すには、次のようにします。

eval(input("Enter a number: "))

これは入力された入力が整数であることをpythonに知らせます

1
Waseem Akhtar
play = True

while play:
    x = input("Enter a number: ")
    y = input("Enter a number: ")

    print(int(x) + int(y))
    print(int(x) - int(y))
    print(int(x) * int(y))
    print(int(x) / int(y))
    print(int(x) % int(y))

    if input("Play again? ") == "no":
        play = False

これにより、変数xyは整数であることがわかり、したがって整数のように使用されます。
小数を使用できるようにしたい場合は、intfloatに変更します。

最初の関数の出力:

print(int(x) + int(y))

x = 3y = 710を返しました。

0
Gregg Morgan

入力データの場合は、常に文字列として扱われます。だからあなたは明示的にIntでそれを変換する必要があります。あなたは以下のようにコードを書くべきです:

play = True

while play:

  x = (input("Enter a number: ")
  y = input("Enter a number: ")

  print(int(x) + int(y))
  print(int(x) - int(y))
  print(int(x) * int(y))
  print(int(x) / int(y))
  print(int(x) % int(y))

  if input("Play again? ") == "no":
    play = False `
0
Tarun Singhal

intを使って入力を整数に解析する

x = int(input("What is x?"))
0
Ewanziak

多くの人がint(input("etc"))をやりたいのですが、もしあなたが文字列を入れると、それはエラーを発生させます。

私がやりたいのはこれです:

s = input("integer: ")
integer = int(s)

どんな目的にも整数を使ってください。

さらに、もしsが文字列なら、これはエラーを起こさない。

少なくとも、すぐではありません。

0
user11093202