2017-03-06 5 views
2

私は初期値が毎年一定の割合で増加しています(5.5%)。私のプログラムでは、初期値がwhileループを使って元の値の2倍、3倍、4倍の年をプリントアウトする必要があります。これまでのところ、私は3つのwhileループを使用していますが、初期値が元の値の2、3、および4倍になったときに検出されますが、今のところ動作していますが、実際は繰り返しています。これは私がこれまで持っているものです。ネストされたループを使用してwhileループに特定の値を表示しますか?

anum 123.45 #initial value 
anum2 = initial * 2 #supposedly the numbers to indicate when the initial value has doubled, tripled, quadrupled etc. 
anum3 = initial * 3 
anum4 = initial * 4 
initialYear = 2017 
year = initialYear #year counter 


while anum <= anum2:  #make the loop stop before going further than two times greater than initial value 
    growth = anum * 0.055 
    anum = growth + anum 
    year += 1 
print("Overall points will be 2 times 2017 points in {:d} years ({:d}).".format\ 
    (year - 2017, year)) 

while anum <= anum3: 
    growth = anum * 0.055 
    anum = growth + anum 
    year += 1 
print("Overall points will be 3 times 2017 points in {:d} years ({:d}).".format\ 
    (year - 2017, year)) 

while anum <= anum4: 
    growth = anum * 0.055 
    anum = growth + anum 
    year += 1 
print("Overall points will be 4 times 2017 points in {:d} years ({:d}).".format\ 
    (year - 2017, year)) 

は、私は潜在的に、このプロセスは、その全体的な反復性を減少させるために、ネストされたwhileループを使用して行くことができた方法はありますか?

ご協力いただきありがとうございます。

+1

ループをネストする必要はありません。私はあなたが3つのループを1にマージする必要があると思う。 – RobertB

答えて

1

は個人的に私の作品のソリューションです:

anum = 123.45 
initialNum = anum 
initialYear = 2017 
year = initialYear 
times = 2 

while times < 5: 
    targetnum = initialNum * times 
    while anum <= targetnum: 
     growth = anum * 0.055 
     anum = growth + anum 
     year += 1 
    print("Overall points will be {:d} times 2017 points in {:d} years ({:d}).".format(times, year - initialYear, year)) 
1

ネストされたループでこれを行う方法があります。

私はPythonでちょうど初心者だけど、これはうまくいくかもしれない:

anum = 123.45 
multiplier = 2 


while multiplier < 5: 
     year = initialYear 
     for i in range(multiplier): 
       growth = anum * 0.055 
       anum = growth + anum 
       year += 1 
     print("multiplier =", multiplier) 
     multiplier += 1 

私はこれが役に立てば幸い!ここで

+0

あなたの提案をありがとう。あなたのソリューションはかなりシンプルですが、私が理解しているところでは、値が2倍、3倍、4倍のときに正しい値を正しく表示しません。私があなたのプログラムを正しく理解しているならば、ループを3回だけ繰り返すだけです。 – bestgio

1

あなたはあなたの問題を解決してきましたが、私はネストされたwhileループを避けるために、関数内にコードをパッケージ化し、答えを与えています。これにより、任意の入力範囲に対してコードを再利用するのがはるかに簡単になります(たとえば、2017年に開始したくない、多分同じ金利を望むとは限りません)。以下は、dで入力を切り替え、印刷されたメッセージまたはすべての値をハードコードしない例を示しています。

def calc_year(initial_value, start_year, interest, target_multiplier): 
    number_of_years = 0 
    final_value = initial_value * target_multiplier 

    while initial_value <= final_value: 
     number_of_years += 1 
     initial_value = (1 + interest) * initial_value 

    print("Overall points will be {} times {} points in {} years ({})".format(
      target_multiplier, start_year, number_of_years, 
      start_year + number_of_years)) 

a = calc_year(123.45, 2017, 0.055, 2) 
b = calc_year(123.45, 2017, 0.055, 3) 
c = calc_year(123.45, 2017, 0.055, 4) 

# Now changing all the input values is easy 
d = calc_year(321.98, 2022, 0.005, 5) 
関連する問題