2017-04-07 8 views
0

引数aとbを2つ受け取り、力bまで引き上げた関数を書きます。 例: power(2,3)= 8 メッセージでTypeErrorを発生する引数がintまたはfloat以外の入力であれば、引数は整数またはfloatでなければなりません。 注:使用しないでください**"*"を除いた指数を計算するための再帰関数

私の下のコードは私の希望の出力が私に与えられていません。何が間違っている可能性がありますか?

def power(a, b): 
    if a == type(int) or a == type(float) and b == type(int) or b == type(float): 
     def add(a, b): 
      num = a 
      for i in range(b): 
       num += 1 
      return num 

     def multiply(a, b): 
      num = 0 
      for i in range(b): 
       num = add(num, a) 
      return num 

     def power(a, b): 
      num = 1 
      for i in range(b): 
       num = multiply(num, a) 
      return num 
    else: 
     return "Argument must be integer or float" 
+0

'*'や '**'は使用できません。 – Carcigenicate

+0

出力が間違っている場合は、それをデバッグする必要があります。 3つの内部関数が定義されています。どちらが悪い結果を返すのですか? – Carcigenicate

+0

実行する関数のif条件を渡さない – wapadunk

答えて

1

コードにはいくつかの問題があります。

まず、タイプチェックは間違っています(より深く見ていくうちに、タイプチェックが間違っています)。あなたはおそらくisinstance(a, (int, float)) and isinstance(b, (int, float))を使用するべきでしょう。現在、abがクラスtypeintfloatのタイプ)と等しいかどうかを確認しています。 andオペレータはorよりも厳密にバインドするので、式グループ化は間違っています(コードはa or (b and c) or dとなります。(a or b) and (c or d))。

次に、パワー計算を行う新しい関数を定義していますが、外側のpower関数からコールすることはありません(何もしないため)。内部の機能を維持したい場合は、return power(a, b)コールが必要です。しかし、内部関数を取り除き、いくつかのネストされたループで直接計算を行うだけで、束を単純化することができます。ネストされた関数は非常にまれにしか必要ありません。

あなたはまた、エラーの場合に行うべきことをやっていません。 raiseTypeErrorとされていますが、文字列は返されません。

最後に、問題全体を必要以上に複雑にしてしまったと思います。あなたの割り当てには**を使用しないように言われていますが、まだ*+の演算子を使用することが許可されていると思われます。私はちょうどあなたがadd関数が+=を必要とするので、それは全く機能しません)からすべてを再定義するのではなく、ループでいくつかを乗算するでしょう。

もう1つの注意:b(指数部)が常に整数になるか、または小数部を持つことができるかどうかは、問題文では示されません。分数指数を扱うことは、整数指数を扱うよりもはるかに難しいので、それを解決しようと多くの時間を費やす前に、それが実際に割り当ての一部であるかどうか教員に尋ねるでしょう。 intfloatの両方のタイプをサポートする必要があるかもしれませんが、bがフロートであっても、それは依然として整数になります。

+0

ありがとう!他のバージョンでは*を使用します。しかし、上記のコードを修正する。 – wapadunk

+0

関数内に "return power(a、b)"を組み込むことに問題があります。内部関数の 'def'ステートメントと同じインデントレベルで' else'のすぐ上に置くことをお勧めします。外側の 'power'関数と同じ名前を使用しているのはむしろ厄介ですが、コードが実行されないようにするのは問題ではありません(ちょうどあなたが再帰をやっているように見えます)。 – Blckknght

+0

訂正後は正常に機能しました。優れています。 – wapadunk

関連する問題