来自如何像计算机科学家一样思考的 While 循环

Posted

技术标签:

【中文标题】来自如何像计算机科学家一样思考的 While 循环【英文标题】:While loop from How to think like computer scientist 【发布时间】:2014-05-31 06:57:07 【问题描述】:

我是新手,刚开始阅读 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!=1 当且仅当 n=0 或 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中执行第二次?

【问题讨论】:

n!=1 表示“n 不等于 1”。因此,如果 n=0 或 n 不是 1,则为真。当它为真时,循环将继续。循环实际上会一直持续到 n=1。 我不是真正的蟒蛇人。其实根本不知道。但是我把它作为一个编程逻辑问题来回答。 【参考方案1】:

n!=1 表示“n 不等于 1”。因此,如果 n=0 或 n 不是 1,则为真。当它为真时,循环将继续。循环实际上会一直持续到 n=1。

你说:

一旦 n!=1 变为真,循环就会中断。

没有。这是一个 while 循环。所以它会循环条件为真。所以只要n!=1 变成FALSE,循环就会被打破。

我认为你迷失在双重否定中。

【讨论】:

【参考方案2】:

两者都运行直到条件为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”——虚假陈述 “3 大于 1”即n > 1是的,3大于1”——正确的陈述

【讨论】:

以上是关于来自如何像计算机科学家一样思考的 While 循环的主要内容,如果未能解决你的问题,请参考以下文章

像计算机科学家一样思考Python (第2版)pdf

像计算机科学家一样思考Python (第2版)高清PDF电子版下载

像计算机科学家一样思考python笔记

读《像计算机科学家一样思考python》——笔记

读《像计算机科学家一样思考python》——笔记(2/2)

编程学习之-用python3的方式思考