CAICP-E · Python 编程基础
先过这关,再过那关
选择里面再做选择。
这一节要学会什么
#what先进大门,再选教室
#hook到学校先看大门开不开。开了,再问去哪个教室。 门没开,后面的选择都不用问。
进科技馆也一样。先问年龄够不够。 够了,再问票带了没有。
复杂事情要拆开问。一关一关过。

如果觉得有点难 先在纸上画两层箭头。 外层一个问题,内层一个问题。 再翻译成 if。
如果已经会了 写校门两道关。 年龄不够说年龄。 没票说补票。
if 里面再写 if
#explore-nest先过校门,再问里面的事。
看这段代码:
age = 12
has_ticket = True
if age >= 6:
if has_ticket:
print("可以进馆")
else:
print("请先买票")
else:
print("年龄不够")外层先问年龄。够了,再问有没有票。 不够,直接说年龄不够。不会再问票。

缩进变成两层。外层的句子空 4 格。 内层的句子再空 4 格,一共 8 格。还是每次加 4 个空格。
读的时候从外往里。先看大门,再看小门。
has_ticket = False 时呢?年龄够,进入内层。
没有票,走内层的 else。打印:请先买票
第一关没过,走不到第二关。

什么时候嵌套,什么时候 elif
#explore-vselif 适合:同一件事的几条路。分数是优秀、及格,还是加油。 灯是绿、黄,还是红。问的是同一类问题,答案互相排斥。
嵌套适合:过了这关,才需要问下一关。大门开了,才问教室。 年龄够了,才问票。第一关失败,第二关根本不用问。
也可以把条件写成一行:
if age >= 6 and has_ticket:
print("可以进馆")这样短。但失败时,不知道是年龄还是票。
嵌套的好处是: 能给出更准的提示。年龄不够说年龄。 没票说买票。
所以:
条件简单、只关心过没过,用 and。要分清是哪一关失败,用嵌套。
同一问题的几档答案,用 elif。
内层的 else 跟谁?看缩进。
它跟最近的、对齐的那个 if。
if age >= 6:
if has_ticket:
print("可以进馆")
else:
print("请先买票")内层 else 和内层 if 在同一列。所以它回答的是:有没有票。 不是回答年龄。
小项目:成绩房间和校门
#explore-rooms先过及格线。及格以后,再看是不是优秀。
score = 92
if score >= 60:
print("及格了")
if score >= 90:
print("还是优秀")
else:
print("继续保持")
else:
print("还要加油")92 会打印两行: 及格了 还是优秀
这回本来就要说两句。先说有没有及格,再说够不够优秀。 和第 9 课三档只走一条不是同一种。
把 92 改成 70。只打印:及格了,继续保持 因为进了外屋,没进里屋的优秀房。

再写校门两道关。
age = 12
has_ticket = False
if age >= 6:
if has_ticket:
print("请进")
else:
print("补票")
else:
print("年龄不够")12 岁够了,进入第二关。没票,打印:补票
两层、三层刚刚好。套到四五层,眼睛会晕。 每层只问一件事。写完用手指描一遍缩进。 同一层必须对齐。
这节课我学会了
#review记住这些:
- 嵌套就是选择里再选择。
- 先问外层,成立再问内层。
- 内层再空 4 格,一共 8 格。
- 同一问题的几档,用 elif。过关再问下一关,用嵌套。
else跟着最近的、对齐的if。
试着在心里跑一遍:
age = 12
has_ticket = False
if age >= 6:
if has_ticket:
print("请进")
else:
print("补票")年龄够,进入内层。没票,打印:补票
下一课才把重复交给电脑。先让两层门各管各的。
试一试
#evaluate看完就来检查一下。选错了也可以再想。
单选题
嵌套会打印什么
age = 12,has_ticket = False。外层 if age >= 6,内层 if has_ticket 打印进馆,否则打印买票。结果是?
单选题
谁先问
嵌套分支时,一般应该怎样读代码?
单选题
什么时候用 elif
成绩分成优秀、及格、加油三档,更适合哪种写法?
多选题
关于嵌套分支
下列说法正确的有哪些?可以多选。
可多选
未登录时不会保存学习进度