2016-09-20 5 views
0

手前にはい、これは宿題に関する質問です。まあ、私は助けを求めたいと思います。最初は、2つの数値(base、exp)をとり、指数が表す時間分だけ基数を掛ける必要がある関数です。例えば。 base = 2、exp = 3. 2 * 2 * 2となります。これまでのところ、これは私が持っているものです:指数機能を置き換える関数を作成する方法は?

def iterPower(base, exp): 

if base and exp <= 0: 
    return("The answer is 0") 
elif base and exp == 0: 
    return("1") 
else: 
    for i in range(exp): 
     ans = base * base 
     return ans 

print("iterPower(0, 0): should be 1 == " \ 
    + str(iterPower(0, 0))) 

print("iterPower(5, 3): should be 125 == " \ 
    + str(iterPower(5,3))) 

print("iterPower(-2.0, 3): should be -8.0 == " \ 
    + str(iterPower(-2.0, 3))) 

しかし私は上記の機能を実行します。最初のテストでは私には何も与えられず、2回目のテストでは25回だけ、最後のテストで4.0が与えられます。コードビジュアライザーでコード自体を実行して、何が起こっているのか(または起こっていないのか)、範囲が利用されていないことを確認します。私はそれがあるので(ベース*ベース)正しい答えも与えないことに気付きます。私はグーグルで試してみましたが、ここで既に答えられた質問に進みます。私は何も出てこない。

編集:組み込みの演算子がありますが、割り当てのポイントは演算子を使用しないことです。紙は、実質的にそれは使用だと言って巨大太字を持って禁止されている - 、 -

+0

'exp'が<0の場合は10進数でなければなりません。 – Li357

+0

@AndrewL。このために関数を使用することはできません。 –

+2

あなたは最初の繰り返しに戻りますか? @AndrewL。 – Li357

答えて

1

あなたはおそらくしたい:あなたの最後の条件として

ans = 1 
for i in range(exp): 
    ans *= base 
return ans 

を。
また、中間状態は必要ありません。

0

正常に動作するはずです。条件文はPythonでどのように動作するか確認してください

def iterPower(base, exp): 
    if base < 0: 
     return 0 
    ans = 1 
    for i in range(exp): 
     ans *= base 
    return ans 

まず、base and exp <= 0base <= 0 and exp <= 0とは異なります。

第二には、Pythonでのブロックはインデントに応じて定義されたので、これら二つのループは異なることを行うされています

for i in range(exp): 
    ans *= base 
    return ans 

for i in range(exp): 
    ans *= base 
return ans 

第三に、baseが変化しない場合にはこのことを念頭に置いては、へans = base * baseを比較してbase * baseは、一定でありますans = ans * base

+0

exp <0をチェックする理由はありません。負の数をべき乗にすることは問題ではありません。 –

+0

助けてくれてありがとう、私を助けてくれてありがとう。私はすでにそれを働かせた。 –

+0

このコードは、負でない整数指数を扱うだけです。そうでない場合は、より良い実装でエラーが発生するはずです。 @AlexisNonya、なぜそれが動作するよりもうまくいかないのか理解することが重要だと思います。 –

0

whileループを使用してコードを短縮することもできます。

def iterPower(base, exp): 
    answer = 1 
    while exp > 0: 
     answer *= base 
     exp -= 1 
    return answer 
+0

割り当てはwhileループを使用することを提案しましたが、何らかの理由で私はforループを利用する解決策を考え出しました。 –

+0

はい。私は1年前にこのコースを受講しました。私はこの問題を覚えています。 – BWhite

+0

渡されたexpの値がゼロ以下の場合、whileループは決して終了しません。 –

0

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

  1. 声明if base and exp <= 0は基本的にif (base) and (exp <= 0)に変換されます。ここで条件は別々に評価されます。 if base <= 0 and exp <= 0:(またはそれに類するもの)を使用します。

  2. ステートメントans = base * baseは基本的にはbaseの2乗を計算し、結果をansに代入します。 ans = ans * baseは、あなたがそれを行う前に、あなたは1にansを初期化することを確認してください。

  3. return文(return ans)はループが一度だけ実行されることを意味するループの内側にある(より良いではないでしょう。あなたが置きたいことループを外に出します。

0

1Iは、あなたがしたいコードがあると思う:

def iterPower(base, exp): 

    if base and exp < 0: 
     return 0 
    elif base and exp == 0: 
     return 1 
    elif base and exp == 1: 
     return base 
    else: 
     ans = base 
     for i in range(1, exp): 
      ans *= base 
     return ans 

変更は以下のとおりです。

  • 関数は常に整数を返します。
  • 負の指数が0
  • 0戻り
  • 1戻るbaseの指数1の指数を返します。
  • 2以上の指数は、それ自身でbaseを掛けてexp回です。
+1

あなたの範囲は少し離れているようです。それは 'range(1、exp)'でなければなりません:) – Li357

+0

ああ。私はこれに注意した。ご協力ありがとうございました。 –

関連する問題