为变量赋值的差异

时间:2018-01-30 17:48:51

标签: python while-loop

在Python中,为什么以下2个函数不同,即该函数如何:

def year (rate):
    money=100
    count=0
    while money<(2*money):
        money+=money*rate
        print ("{0:.2f}".format(money))
        count+=1
    return (count)

(导致count的值10423)与其他函数不同?

def year (rate):
    money=100
    count=0
    while money<200:
        money+=money*rate
        print ("{0:.2f}".format(money))
        count+=1
    return (count)

(导致count的值为11

如果我们假设x = 100,则x&lt; 200与x&lt;(x + x)相同。另外,不是x + x = 200?

4 个答案:

答案 0 :(得分:3)

money < 2 * money一直都是真的。

因为money会增加,2 * money也会增加。

答案 1 :(得分:2)

您正在使用money在循环期间更改money += money*rate的值,因此看起来您正在创建无限循环。如果你做了这样的事情,你应该开始看到你期望的结果:

def year (rate):
    money=100
    count=0
    end_limit = 2*money
    while money<(end_limit):
        money+=money*rate
        print ("{0:.2f}".format(money))
        count+=1
    return (count)

答案 2 :(得分:0)

在第一个函数中,如果要与原始money进行比较,可以执行以下操作:

def year (rate):
  money=100
  orig_money = money
  count=0
  while money < (2 * orig_money):
    money+=money*rate
    print ("{0:.2f}".format(money))
    count+=1
  return (count)
  # count=10423

答案 3 :(得分:0)

正如其他人所说,你的表达式money<(2*money)会发生变化并且不会保持不变。在大多数情况下,所有表达式都应保留其条件,以防止无限/无限循环。

尝试而不是将变量与同一变量进行比较,因为这会导致表达式的左侧和右侧都发生变化。

使用money < 200,200是常量。循环的每次迭代都将检查此常量,然后确定继续或退出循环。

希望我已经把这种情况弄清楚了。 :)