2016-04-08 11 views
-1

私は単純な乗算プログラムをPythonで初めて書こうとしています。私のコードも以下に掲載されています。Pythonスクリプトはネストされたif文にtyperrorを与えます

#!/usr/bin/env python 
    from math import * 

    def main(): 
     multiplier = raw_input('multiplier?') 
     multiplicand = raw_input('multiplicand?') 
     print (recursive(multiplier, multiplicand)) 

    def recursive(multiplier, multiplicand): 
      if (multiplier == 0): 
      answer = 0 
     if (multiplier == 1): 
      answer = multiplicand 
     if ((multiplier > 1) & ((multiplier % 2) == 0)): 
      answer = recursive((multiplier/2), (multiplicand*2)) 
     if ((multiplier > 1) & ((multiplier % 2) == 1)): 
      answer = (multiplicand + (recursive((multiplier/2), (multiplicand*2)))) 
     return answer 

    main() 

エラー:

multiplier?5 
multiplicand?5 
Traceback (most recent call last): 
    File "./multiplication.py", line 20, in <module> 
    main() 
    File "./multiplication.py", line 7, in main 
    print (recursive(multiplier, multiplicand)) 
    File "./multiplication.py", line 14, in recursive 
    if ((multiplier > 1) & ((multiplier % 2) == 0)): 
TypeError: not all arguments converted during string formatting 

答えて

0

乗算剰余演算子では、文字列string = "%s%d..."で見たいよう、ここで文字列に値を入れしようとしているように文字列です。したがって、変換エラー。代わりに、mod操作を実行する。変数multiplierをint(またはfloat)に変換する必要があります。

+0

があるが、私は数が桁/整数の場合でも、「5」 –

+0

右数で入力していたときに、それは文字列の書式設定を行います。 'input'を使用して設定された変数自体が文字列であるため、変換する必要があります。 – Pythonista

+0

よろしくお願いします –

0

multiplierは数字ではなく文字列として渡されます。これは、raw_input()が常に文字列を返すためです。それを変換するには、float(raw_input())を実行します。

エラーは、%演算子が2つの数値の剰余を返しますが、文字列が有効な書式文字列ではないためです。

7 % 2 == 1 

が、最初のものは、文字列

'%d dogs ' % 2 == '2 dogs' 
関連する問題