使用嵌套循环在while循环中显示特定值?

使用嵌套循环在while循环中显示特定值?

问题描述:

我有一个初始值,每年增加一定的百分比(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

下面是对我个人工作的解决方案:

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)) 

有一种方法可以用嵌套循环来做到这一点。

我只是在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

虽然你已经解决你的问题,我给那个包在一个函数代码来避免嵌套循环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)