2017-02-17 6 views
0

この演算子を使わずに** bを書くよう練習して苦労する。自分自身で何かを書こうとしましたが、正しい結果が得られません。 1つの値の代わりに2つの値が得られます。両方とも正しくありません。カウンターのようなものは本当に増加しないようです。私は助けを求めることができますか?ありがとう!a(b ** b)を除いたbのパワー、Python

def powerof(base,exp): 
    result=1 
    counter=0 
    # until counter reaches exponent, go on 
    if counter<=exp: 
    # result multiplies itself by base, starting at 1 
    result=result*base 
    # increase counter 
    counter=counter+1 
    return result 
    return counter # here it says "unreachable code". Can I not return more variables at the same time? 
    else:  # counter already reached exponent, stop 
    return 

# I want to print 2**8. Suprisingly getting two (incorrect) values as a result 
print(powerof(2,8)) 
+0

あなたは残りの部分に到達できないように 'return'を返します... –

+0

関数は1つの値しか返しません。あなたがしようとしていることは意味をなさない。代わりにタプルを返します。 – Carcigenicate

+0

確かに手が届きません。通訳は私にそう言った。だから私はここに来て尋ねた。経験豊富なプログラマーではないためのダウン投票ゲームは再び来る... – Jewenile

答えて

1

ナイーブな実装(ないソリューションの最高のが、私はあなたがこのいずれかをたどることができるはずだと思う):

def powerof(base, exp): 
    results = 1 
    for n in range(exp): 
     results *= base 
    return results 


print(powerof(5,2)) 

はそれがお役に立てば幸いです。

+0

ありがとうございます。ナイービルについては何も間違っていません。 Imちょっとしたコーディングを学ぶ必要のあるエンジニア。何も必要ありません。 – Jewenile

+0

'exp == 0:return 1' - exp == 0がすでに処理されている場合を削除できます。 –

+0

ありがとう@Paul_Hankin、私はそれに応じて答えを編集しました。 –

2

再帰で試してみてください:それは何指数を減少させながら

def powerof(base,exp): 
    if exp == 0: 
     return 1 
    if exp == 1: 
     return base 
    return base * powerof(base, exp-1) 

# I want to print 2**8. Suprisingly getting two (incorrect) values as a result 
print(powerof(2,8)) 

だから、それは自分自身を呼び出して、これ呼び出しは次のようになります。 2 *(2 *(2 * 2)) )...実行されるとき。 forループでもこれを行うことができますが、再帰はよりコンパクトです。

+0

ありがとう、トバイアス!私の問題は、再帰を全く理解できないことです。彼らは私の心を爆発させるようです。私は(階乗のような)いくつかの例を見てきましたが、事を理解できませんでした。 – Jewenile

+0

@Jewenile誰でも再帰を理解することができます。確かに難しい話題ですが、学ぶ努力をする価値があります。 – Carcigenicate

0

私は確かにあまりにも再帰をお勧めしますが、明らかにそれはオプション;-)

はそうではない、のは、あなたのコードを修正してみましょう。 if声明で何かを返そうとしているのはなぜですか?

return result 
return counter # here it says "unreachable code". Can I not return more variables at the same time? 

あなたが戻ってきたら、あなたの機能を終了することは知っていますか?これはあなたが意味するものではありません。あなたが望んでいると思うのは、exp回していない限り、resultを掛けることです。つまり、exp回まで、ifステートメント内のコードを繰り返す必要があります。そのキーワードはwhileです。 whileには、あなたがifで提供しようとした条件が含まれています。

幸運を祈る!

編集:btwなぜあなたは2つの結果を得ているのか分かりません。これは疑わしいです、それは確かですか?

+0

確かに、あなたは正しいです。それは1つの番号を与える。以前のバージョンのうちのいくつかは2つを返しました。ごめんなさい。 – Jewenile

関連する問題