而循环从如何思考像计算机科学家

时间:2014-05-31 06:57:07

标签: python while-loop

我是完全新手,刚刚开始使用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中执行循环?

2 个答案:

答案 0 :(得分:2)

n!=1表示“n不等于1”。因此,如果n = 0或者n是除1以外的任何值,那么它将是真的。虽然它是真的,但循环将继续。实际上,循环将继续UNTIL n = 1。

你说:

  

一旦n!= 1变为真,循环就会被破坏。

没有。这是 while 循环。因此它将循环条件为真。因此,只要n!=1变为FALSE,循环就会被破坏。

我认为你迷失了双重否定。

答案 1 :(得分:0)

两者都运行直至条件为True

在两种情况下都说n = 3:


而n> 0

3 > 0 : #TRUE  (do 3--)
2 > 0 : #TRUE  (do 2--)
1 > 0 : #TRUE  (do 1--)
0 > 0 : #FALSE (break)

而n!= 1

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:正如你大声想的那样

  • “3不等于1”,即n != 1
    • ,3不等于1” - 真实陈述
  • “3等于1”,即n == 1
    • ,3不等于1” - false statement
  • “3大于1”,即n > 1
    • ,3大于1” - 真实陈述