2017-11-26 3 views
0
def gond7(n): 
    """ 
    The parameter n is an int and n > 0. 
    The function gond7() should return the biggest eleventh power that is 
    smaller than n. 

    Example: 
    gond7(1000000) should return 177147 as 3 ** 11 == 177147 (and is smaller 
    than n) and the next 11th power, 4 ** 11 == 4194304, is not smaller 
    than n. 
    """ 

    x = 0 
    amount = x ** 11 
    while amount <= n: 
     x += 1 
     amount = x ** 11 
    return amount 


print gond7(1000000) 

これは適切な方法では動作しません。だから私はそれを動作させるためにこの関数を作ったが、何かを出力する前にwhileステートメントを実行する必要があるので、正しい値を表示しない。xより小さい最大のパワーで動作するwhile文を取得するにはどうすればよいですか?

私は間違っていますか?私は印刷しています:

4194304 

私は177147をしたいしながら。

どうすればいいですか?私は何が欠けていますか?

+1

を(X - 1)** 11 '? – DeepSpace

+0

しかし、その@DeepSpaceには良い方法はありませんか?それは、私がすでにwhileステートメントがさらに進んでいくことをすでに知っていることを示唆していませんか? – Siyah

+0

投稿された回答が示唆するように、次の条件を計算するように条件を変更します。 – DeepSpace

答えて

2

これはいかがですか?非常にエレガントな、それは

def gond7(n): 
    x = 0 
    amount = x ** 11 
    while amount <= n: 
     result = amount 
     x += 1 
     amount = x ** 11 
    return result 


print gond7(1000000) 
+0

これは私がやりたいことでしたが、私は正確にどのように考えることができませんでした。ありがとう、マルコ! – Siyah

3

最後の+= 1が多すぎます。あなたは

x = 0 
while (x + 1) ** 11 < n: 
    x += 1 
return x ** 11 

またはintにキャストし、「バックアップに電源を入れる」ことで、それを切り捨て、ちょうどnの11番目のルートを取ることによって、直接値を計算し、それを簡略化することができます。

return int(n ** (1.0/11)) ** 11 
# return int(n ** (1/11)) ** 11 suffices in Python3 
+0

ありがとう!しかし、別の方法がありますか?つまり、私の例を使ってwhile文の総量をチェックします。 – Siyah

+0

@dawg右に編集されました。 – schwobaseggl

1

amountを返信してからに更新する必要があります。 amount <= nではx ** 11nより大きい場合は、より大きな値を返します。

x = 0 
amount = 1 # 0 ** 11 == 1 
while True: 
    new_amount = x ** 11 
    if new_amount > n: 
     return amount 
    amount = new_amount 
    x += 1 
+0

あなたが私に与えてくれた新しい洞察をありがとう!感謝。 – Siyah

+1

更新された回答を確認してください。私は 'x * 11'ではなく' 11 * x'を計算していました。 – chepner

1

を動作するはずはない、この試してみてください。 `リターン

def gond7(n): 

    x = 0 
    amount = x ** 11 
    while amount <= n: 
     x += 1 
     amount = x ** 11 
    if amount > n: 
     return (x-1)**11 
    else: 
     return amount 


print gond7(1000000) 
>177147 
+0

ありがとう、あなたをupvoted! – Siyah

関連する問題