入力を数値として読み取るにはどうすればよいですか?

261
Noname 2013-12-08 17:08.

なぜxそしてy代わりにint型の文字列は、以下のコードでは?

(注:Pythonの2.xの使用中raw_input()。でのPython 3.xの使用はinput()raw_input()に改名されたinput()Pythonの3.xの中)

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

10 answers

328
thefourtheye 2013-12-08 17:08.

TLDR

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

Python 2.x

ユーザー入力を取得するための2つの機能が呼び出され、あったinputraw_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

Python3.xinputとPython2.xraw_inputは類似raw_inputしており、Python3.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に、Sintのように、

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

playを使用して変数を取り除くことができます。breakwhile True

47
Noname 2013-12-08 17:09.

Python 3.xでは、raw_input名前がに変更されinput、Python2.xinputが削除されました。

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

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

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
29
user1341043 2014-11-11 14:32.

1行に複数の整数がある場合は、mapより良い場合があります。

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

数がすでにわかっている場合(2つの整数など)、次を使用できます

num1, num2 = map(int, raw_input().split())
18
Martijn Pieters 2013-12-08 17:09.

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

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
12
gumboy 2014-07-08 14:13.

複数の質問では、1行に複数の整数を入力する必要があります。最良の方法は、数値の文字列全体を1行に入力してから、整数に分割することです。Python3のバージョンは次のとおりです。

a = []
p = input()
p = p.split()      
for i in p:
    a.append(int(i))

リスト内包表記も使用できます

p = input().split("whatever the seperator is")

そして、すべての入力を文字列から整数に変換するには、次のようにします

x = [int(i) for i in p]
print(x, end=' ')

リスト要素を直線で印刷します。

6
Hemanth Savasere 2016-04-18 06:20.

整数に変換:

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

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

my_decimalnumber = float(input("enter the number"))
4
ravi tanwar 2018-08-04 06:30.
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

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

3
Aravind 2014-05-24 01:32.

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
Sanyal 2015-06-30 23:16.
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
2
Tobias Kienzler 2016-11-24 02:19.

あなたの例では、一方でint(input(...))どのような場合には、トリックを行い、python-futureさんがbuiltins.input検討する価値があるが行うので、必ずあなたのコードは、Python 2と3の両方のために働くのPython2のデフォルト動作無効input入力データ型について『賢い』になろうとする(builtins.input基本的にはのように動作しますraw_input)。

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

ライアン・フェルトンがジャロプニックを去る。アメリカの詐欺と嘘つきは安堵のため息をつく。スタッフが再び昼食時に肉を注文する

ライアン・フェルトンがジャロプニックを去る。アメリカの詐欺と嘘つきは安堵のため息をつく。スタッフが再び昼食時に肉を注文する

「あなたは知っているべきです」とライアン・フェルトンは電話にひそかに言いました、「私は本当にできないこと。

今日だけMovadoウォッチが50%オフで、手首にちょっとした贅沢を加えましょう

今日だけMovadoウォッチが50%オフで、手首にちょっとした贅沢を加えましょう

ノードストロームラックのMovadoイベントMovadoは、クラシックで象徴的な時計ブランドですが、価格が1,000ドルを超えるため、ほとんどの人にとって信じられないほど手に負えないと感じる可能性があります。しかし、ノードストロームラックのMovadoイベントを使用すると、小売価格の半分でゴージャスな時計を獲得できます。いくつかのスタイルは400ドル未満で提供されます。

L7は18年ぶりのショーをプレイしました

L7は18年ぶりのショーをプレイしました

これは素晴らしいことです。L7のオリジナルラインナップは18年ぶりに再会し、LAのエコーで完売したショーを演奏しました。

「またの名をグレイス」は、見られているという不穏な感覚を体現しています。

「またの名をグレイス」は、見られているという不穏な感覚を体現しています。

「またの名をグレイス」ジョーダン博士は、19世紀半ばのカナダの性別の役割と階級の違いが、グレイスの心を解き放とうとし続けています。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

活性化関数

活性化関数

活性化関数は、ニューラルネットワークの設計における重要な部分の1つです。モデルのパフォーマンスを向上させるには、これらの関数をよく理解する必要があります。

準備をしなさい、NASAがノーザンテリトリーからロケットを打ち上げます!

NASAは初めて、米国外の商用打ち上げサイトから打ち上げられます!

準備をしなさい、NASAがノーザンテリトリーからロケットを打ち上げます!

今日はNASA、オーストラリア、そして全世界にとって重要な日です。NASAはAESTの午後11時15分に、オーストラリアから27年ぶりのロケットを打ち上げます。さらに重要なことに、アメリカ以外の商業サイトから打ち上げるのはこれが初めてです。

宇宙:衛星、破片、戦争

宇宙:衛星、破片、戦争

どのプレーヤーがどの方向に動くかがはっきりしないサッカーの試合を想像してみてください。さて、私がこれから始める理由は、あなたがそのスペースを訪れていない可能性が非常に高いからです。私も訪れていません。

ガリレオは私たちのプロジェクトを誇りに思っていただろう

ガリレオは私たちのプロジェクトを誇りに思っていただろう

今週末、12人のガリレオプロジェクトのメンバーが私の家の裏庭に集まりました。プロジェクトが1年前に考案されて以来、新しい望遠鏡を通して基本的な質問への答えを見つけるというガリレオガリレイの遺産に触発されて、歴史的な1週間の終わりを祝いました。

Language