2017-03-06 173 views
2

我有一個初始值,每年增加一定的百分比(5.5%)。我的程序需要打印出一年的初始值比僅使用while循環的原始值大2,3和4倍。到目前爲止,我使用三個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

我不認爲你需要嵌套循環。我想你只需要將三個循環合併爲一個。 – 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)