来自如何像计算机科学家一样思考的 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 循环的主要内容,如果未能解决你的问题,请参考以下文章