2017-05-31 3 views
0

15より大きい値になるまで初期値を2倍にするループを実行する必要があります。値Iで停止する方法を理解できません欲しいです。これはこれまでのコードです。ループを実行して15より大きい値を返します

def while1(initial): 
    total = 1 
    while initial < 15: 
     total = initial * 2 
    return total 


print while1(3) # -> 24 
print while1(2) # -> 16 
print while1(15) # -> 15 

私が望む値は返されません。

+1

ので、イニシャルが15よりも大きいかどうかをチェックしていますが、イニシャルに大きい番号を格納する部分はどこですか? –

+0

コードをデバッグしてみてください。これを行う1つの方法は 'while'ループの中に' initial'と 'total'の値を出力することです。 –

答えて

1

あなたが所持しているコードは、initialが15未満であるかどうか常にチェックされていますが、合計が変更されていて、初期値ではありません。 Pythonには便利な「コマンド」*=があり、これを使用して変数に何らかの数値を掛けて、答えを変数に保存することができます。これは次のように使用できます:

def while1(initial): 
    while initial < 16: #Are we done yet? (Remember to run when initial is equal to 15) 
     initial *= 2 #Double initial 
    return initial #This will only run when initial is greater than 15 

これは役に立ちます。

+0

ああ、私はとても近かった。助けてくれてありがとう。 :) –

3

initial変更することはありません、あなたのwhileループが終了したことがないので、条件変数としてtotalを使用します。

def while1(initial): 
    total = initial 
    while total < 15: 
     total = total * 2 
    return total 
0

ちょうど楽しみのために、あなたはどのループせずに、直接、結果を計算することができます。

import math 

def double_until_greater_than_15(x): 
    return x * 2**math.ceil(max(math.log2(16/x), 0)) 

print(double_until_greater_than_15(3)) # 24 
print(double_until_greater_than_15(2)) # 16 
print(double_until_greater_than_15(15)) # 30 
関連する問題