2017-12-22 2 views
0

こんにちは私は、入力の内容に基づいて特定の変数タイプにユーザー入力を変換する方法があるのか​​不思議です(raw_input()を使用しています。これに対してより良い機能があれば)。私はraw_input()が常に文字列を作成することを知っていますが、入力が有効であれば文字列を整数または浮動小数点に変換することはできますか?たとえば、ユーザーが '1'を入力すると、その変数を文字列ではなく整数として格納する方法がありますか?ここで私は仕事を作るしようとしていたコードは次のとおりです。ユーザー入力が有効な場合に文字列をint/floatに変換する

print "Subtraction Calculator (x-y)" 

def calculator(x, y): 
    if [isinstance(x, int) or isinstance(x, float)] and [isinstance(y, int) or 
isinstance(y, float)]: #This should be checking to see if x and y are both 
numerical 
    D = x - y 
    return D 
else: 
    return "One or more inputs is not a number." 

x = raw_input("x = ") 
y = raw_input("y = ") 

print calculator(x, y) 

xとyが両方()をraw_inputによる文字列ですが、私は適切なエラーを取得していないようですと明らかにこのコードは動作しません。メッセージ(「1つ以上の入力が数字ではありません」)、代わりに(D = x-y)でエラーが発生しています。私はこれが私の「if」ステートメントが常にTrueとして登録されているためだと信じていますが、なぜこれもどちらかとはわかりません。

+1

あなたはint型を使用してintに文字列を変更することができます()のx = INT(raw_input( のような方法を"x =")) –

+1

'[isinstance(x、int)or isinstance(x、float)]'は空でないリストなので真です。 –

答えて

0

について単にあなたが望む結果を何を返すと、二つのうちの一つが、数値に変換できない場合、それはValueErrorが発生します:

def calculator(x, y): 
    return float(x) - float(y) 

x = raw_input("x = ") 
y = raw_input("y = ") 

print calculator(x, y) 

注あなたは、変数かどうかを確認したい場合は、そのintまたはfloatのいずれかで、isinstance(x, (int, float))を使用できます。したがって、コードは次のように書き直すことができます。

def calculator(x, y): 
    if isinstance(x, (int, float)) and isinstance(y, (int, float)): 
     return x - y 
    return "One or more inputs is not a number." 
1

例外処理を使用してこれを行うことができます。基本的には、xyを浮動小数点数に変換して、必要な計算を実行するだけです。 xまたはyが浮動小数点に変換できない場合、pythonはValueErrorを生成します。これはtryおよびexceptステートメントで捕捉できます。あなたは、それはそうと同じように動作するまで、入力xyにユーザーを求めておくようにするには、ループを作ることができる:

while(True): 
     try: 
      x = raw_input('x = ') 
      y = raw_input('y = ') 
      print(float(x)-float(y)) 
      break 
     except ValueError: 
      print('One of those was not a float! Try again!') 
関連する問題