【问题标题】:While loop from How to think like computer scientist来自如何像计算机科学家一样思考的 While 循环
【发布时间】: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。
  • 我不是真正的蟒蛇人。其实根本不知道。但是我把它作为一个编程逻辑问题来回答。

标签: python while-loop


【解决方案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”——正确的陈述

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多