我是完全新手,刚刚开始使用Think Python书籍。 在关于迭代的章节中,作者提供了关于while循环的示例如下:
def countdown(n):
while n > 0:
print n
n = n-1
print "Blastoff!"
这很容易理解,打印n和当n = n-1直到n> 0为止的点。
但下一个例子有点不同,我不明白:
def sequence(n):
while n != 1:
print n,
if n % 2 == 0: # n is even
n = n / 2
else: # n is odd
n = n * 3 + 1
当且仅当n = 0或n = 1时,n!= 1将变为真,在此示例中,作为后续计算的结果,n = 0将不可能,并且我们假设n = 0作为初始输入。 所以说n = 3 计算如下:3,10,5,16,8,4,2,1。
分析这两个例子我看到了争议:
在示例1中。循环保持到条件n> 0为真的点,一旦n> 0为假,循环就被破坏。 在示例2中,循环保持到条件n!= 1为假的点,一旦n!= 1变为真,循环就会被破坏。
观察了这两种情况之后,我看到有争议的问题是while循环在第一个例子中如何工作,而循环执行到条件为真的点,而在第二个例子中它执行到条件为假的点。 请告知如何理解它,如果我们没有提到条件应该是真或假,为什么程序在true bool中执行循环一次,而第二次在false bool中执行循环?
答案 0 :(得分:2)
n!=1
表示“n不等于1”。因此,如果n = 0或者n是除1以外的任何值,那么它将是真的。虽然它是真的,但循环将继续。实际上,循环将继续UNTIL n = 1。
你说:
一旦n!= 1变为真,循环就会被破坏。
没有。这是 while 循环。因此它将循环而条件为真。因此,只要n!=1
变为FALSE
,循环就会被破坏。
我认为你迷失了双重否定。
答案 1 :(得分:0)
两者都运行直至条件为True
在两种情况下都说n = 3:
3 > 0 : #TRUE (do 3--)
2 > 0 : #TRUE (do 2--)
1 > 0 : #TRUE (do 1--)
0 > 0 : #FALSE (break)
3 != 1 : #TRUE (do 3 * 3 + 1 = 10)
10 != 1 : #TRUE (do 10/2)
5 != 1 : #TRUE (do 5 * 3 + 1)
...
2 != 1 : #TRUE (do 2/2)
1 != 1 : #FALSE (break)
PS:正如你大声想的那样
n != 1
n == 1
n > 1