第 3 章:判断与循环

程序真正的力量来自让计算机自己决定做什么(判断)和重复做事(循环)。 这一章是编程的分水岭,学完它你就有了写任何程序的基本能力。

3.1 如果:让程序做选择

最基础的结构是 如果:

python令 分数 = 85
如果 分数 >= 60:
    打印("及格了!")

注意三个要点:

  1. 如果 后面跟条件(一个结果为真或假的表达式)
  2. 条件后面要有冒号 :(全角半角都行)
  3. 冒号后换行并缩进,缩进里的内容只有在条件成立时才执行

多个分支用 否则如果 和 否则:

python令 分数 = 85
如果 分数 >= 90:
    打印("优秀")
否则如果 分数 >= 60:
    打印("及格")
否则:
    打印("不及格")

否则如果 是"上面的不成立,再看这个条件";否则 是"全都不成立,就走这里"。 条件从上往下检查,只执行第一个成立的。

3.2 条件怎么写

比较运算(结果是真或假):

写法意思
a == ba 等于 b(注意是两个等号!)
a != ba 不等于 b
a < b / a > b小于 / 大于
a <= b / a >= b小于等于 / 大于等于

一个等于号 = 是赋值,两个 == 才是比较——这是新手最常犯的错。

逻辑组合:与(and)、或(or)、非(not):

python令 年龄 = 20
如果 年龄 >= 18 与 年龄 < 60:
    打印("成年人")
如果 年龄 < 12 或 年龄 > 80:
    打印("需要特别照顾")
如果 非 年龄 >= 18:
    打印("未成年人")

链式比较:像数学一样连着写,中间的值只算一次:

python令 分数 = 75
如果 60 < 分数 <= 90:      # 等价于 分数 > 60 与 分数 <= 90
    打印("良好")

真与假:真 和 假 是布尔值。空、0、空列表 []、空文本 &quot;&quot; 都算"假", 其他都算"真":

python令 清单 = []
如果 清单:              # 空列表是假,不会进入
    打印("清单有东西")
如果 长度(清单) == 0:
    打印("清单是空的")

3.3 循环:重复做事

遍历:逐个处理

对列表里的每一项做同样的事,用 遍历:

python令 成绩 = [85, 92, 78, 60]
令 总分 = 0
遍历 分数 在 成绩:
    总分 += 分数          # 等价于 总分 = 总分 + 分数
打印("平均分:", 总分 / 长度(成绩))

和 范围 配合,就能数数:

python遍历 数字 在 范围(1, 6):
    打印(数字)            # 输出 1 2 3 4 5

循环 N 次:不想管变量

只想要"重复做 N 次",用 循环 N 次:

python循环 3 次:
    打印("你好")

当:条件满足就一直做

python令 i = 1
当 i <= 5:
    打印(i)
    i += 1

中断与继续:控制节奏

python遍历 数字 在 范围(1, 10):
    如果 数字 == 5:
        中断              # 到 5 就停
    如果 数字 % 2 == 0:
        继续              # 偶数跳过
    打印(数字)            # 输出 1 3

3.4 嵌套:判断套循环、循环套循环

这些东西可以任意组合。九九乘法表就是循环套循环:

python遍历 i 在 范围(1, 10):
    令 行 = ""
    遍历 j 在 范围(1, i + 1):
        行 = 行 + 文本(j) + "x" + 文本(i) + "=" + 文本(i * j) + "  "
    打印(行)

3.5 综合实战:猜数字

把前面学的全用上:

python导入 随机                      # 用标准库生成随机数
令 答案 = 随机.随机整数(1, 100)
令 猜中 = 假
循环 10 次:
    令 猜测 = 整数(输入("猜一个 1 到 100 的数:"))
    如果 猜测 < 答案:
        打印("太小了,再猜")
    否则如果 猜测 > 答案:
        打印("太大了,再猜")
    否则:
        打印("猜对了!答案就是", 答案)
        猜中 = 真
        中断
如果 非 猜中:
    打印("次数用完了,答案是", 答案)

导入 随机 让程序能生成随机数。随机.随机整数(1, 100) 生成 1 到 100 之间的随机整数。

3.6 试试看

  1. 输入一个年份,判断是不是闰年(能被 4 整除但不能被 100 整除,或者能被 400 整除)。
  2. 用 循环 打印 1 到 100 里所有能被 3 整除的数。
  3. 让用户不断输入数字,输入 0 时停止,最后打印所有数的总和(提示:用 当 或 循环 加 中断)。
  4. 打印一个三角形:
*
**
***
****
*****

示例代码:examples/tutorial/04_猜数字.jsh、examples/tutorial/05_九九乘法表.jsh

本章小结