为什么这个函数 return 对这个变量为真?

Why does this function return True for this variable?

参加 python 的在线课程,作业是打破循环并使功能正常工作。虽然我能够解决问题,但我不明白为什么函数 returns(并且应该)对数字 8 为“True”。

你能解释一下吗?

def is_power_of_two(n):
  while n % 2 == 0 and n != 0:
    n = n / 2
  if n == 1:
    return True
  return False

print(is_power_of_two(0)) # False
print(is_power_of_two(1)) # True
print(is_power_of_two(8)) # True
print(is_power_of_two(9)) # False

我是这样解读的:

  1. 8除2余0:满足第一个条件
  2. 8不等于0:满足第二个条件
  3. 如果 (while) 两个条件都满足,则数字 (8) 除以 2,并将此值 (4) 分配给变量 n。
  4. 最后,它检查变量 n (4) 是否等于 1。由于 4 不等于 1,因此它应该 return False,但它 returns True。这是为什么?

"If" 和 "while" 在英语和 Python 中的意思并不完全相同(英语中的区别类似于 "when" vs "while")。

while循环重复while(只要)条件为真;它不仅发生在 if 条件为真时。 只要满足条件,就执行循环体,然后就是re-checked条件。对于起始值 n = 8,循环执行了 3 次才停止。每次执行循环体,n减半。

  1. n = 8: 8是偶数而不是0,所以循环执行并继续。
  2. n = 4: 4是偶数而不是0,所以循环执行并继续。
  3. n = 2: 2是偶数而不是0,所以循环执行并继续。
  4. n = 1:1不是偶数,循环结束
  5. 循环后:n = 1,所以我们return正确。