【问题标题】:Display certain value in while loop using nested loops?使用嵌套循环在while循环中显示某些值?
【发布时间】:2017-07-26 15:54:16
【问题描述】:

我有一个初始值,它每年以一定的百分比增长(5.5%)。我的程序需要仅使用 while 循环打印出初始值比原始值大 2、3 和 4 倍的年份。到目前为止,我正在使用三个 while 循环来查找初始值何时比原始值大 2、3 和 4 倍,但到目前为止它可以工作,但它看起来确实是重复的。这是我目前所拥有的:

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。

标签: python math optimization while-loop


【解决方案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

我希望这会有所帮助!

【讨论】:

  • 感谢您的建议。您的解决方案非常简单,但据我了解,当值是 原始值 的 2、3 和 4 倍时,它不能正确显示正确的值。如果我正确理解您的程序,那么您只会让循环迭代 3 次。
【解决方案2】:

这是一个适合我个人的解决方案:

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

【讨论】:

    【解决方案3】:

    虽然您已经解决了问题,但我给出的答案是将您的代码打包在一个函数中,以避免嵌套的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 2020-10-09
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      相关资源
      最近更新 更多