教电脑做选择
if:让程序第一次变聪明
这节课你要学会
1. 用 if 让电脑判断;2. 用 else 准备"另一条路";3. 用 elif 处理很多种情况;4. 搞懂最最容易搞混的一个符号。
你每天都在做判断
"如果明天下雨,就带伞;否则不带。"你每天说的很多话都是这个句式。现在,我们可以把这种句式教给电脑,它用的词是 if。
weather = input("今天下雨吗?(回答 是 或 否)")
if weather == "是":
print("记得带伞!")
print("最好穿上雨靴。")
print("祝你今天开心!")
今天下雨吗?(回答 是 或 否)是 记得带伞! 最好穿上雨靴。 祝你今天开心!
今天下雨吗?(回答 是 或 否)否 祝你今天开心!
看到区别了吗?下雨时,中间两行会打印;不下雨时,直接跳过它们。if 像一个关卡:条件成立才放行,不成立就跳过。
两个必须搞懂的规矩
规矩一:冒号和缩进
if 那一行最后有一个冒号 :,它下面的行前面有 4 个空格。这叫缩进,意思是"这几行归 if 管"。没有缩进的行(最后一行"祝你开心")不归它管,所以永远会执行。
缩进错了,程序要么报错,要么做事的顺序和你想的完全不一样。Python 靠缩进读懂你的程序,缩进就是它的语法。
规矩二:== 才是比较,= 是装盒子
全课程最容易搞混的地方
age = 10 意思是"把 10 装进 age 盒子"(赋值)。
age == 10 意思是"age 里的东西等于 10 吗?"(比较,会回答是或否)。
两个等号是提问,一个等号是装东西。if 关卡前必须用提问 ==。写错成一个等号,程序会直接报错提醒你。
六种比较
if 括号里放的是一个"是与否"的问题,可以用这些符号来问:
score = 92
print(score > 90) # 大于吗?
print(score >= 92) # 大于或等于吗?
print(score < 60) # 小于吗?
print(score == 92) # 等于吗?
print(score != 92) # 不等于吗?
True True False True False
True 是"真/是",False 是"假/否"。if 看到答案是 True 就放行,是 False 就跳过。
else:另一条路
有时我们想的不只是"做或不做",而是"做这个,否则做那个"。这时用 else(否则):
password = input("请输入密码:")
if password == "1234":
print("密码正确,欢迎回来!")
else:
print("密码错误,你不能进来!")
if 和 else 像一个岔路口:两条路必走一条,也只走一条。
elif:很多条岔路
情况不止两种怎么办?比如按分数评价成绩,用 elif(读作"_else if_",否则如果)把岔路加多:
score = int(input("你的分数是?"))
if score >= 90:
print("太棒了,你是学霸!")
elif score >= 60:
print("不错,及格啦!")
elif score >= 0:
print("继续加油,下次一定行!")
else:
print("喂,分数不能是负数啦!")
你的分数是?85 不错,及格啦!
岔路口只走一次
85 分明明也满足"大于等于 0",为什么不说"继续加油"?因为电脑从上往下检查,找到第一个成立的就进去,后面的全不看。所以把条件从严格到宽松排列,才不会出乱子。
组合提问:and 和 or
两个条件可以用 and(并且)、or(或者)连起来:
age = int(input("你几岁?"))
if age >= 6 and age <= 12:
print("你是小学生!")
else:
print("你不是小学生。")
and 要求两边都成立才放行;or 只要有一边成立就放行。比如"周末或者放假才能玩游戏"——两天里有一天就行。
动手试一试:秘密暗号门
结合今天所有知识,做一个需要"暗号 + 年龄"双重验证的门:
code = input("请说出暗号:")
age = int(input("你几岁?"))
if code == "芝麻开门" and age >= 10:
print("大门缓缓打开……欢迎进入秘密基地!")
elif code == "芝麻开门":
print("暗号对了,但你年龄不够,长大点再来。")
else:
print("暗号错误!你不可能是自己人。")
练习
基础任务:数字比大小。输入两个数,告诉用户哪个大、哪个小,或者一样大。(提示:要用 elif!三种情况)
进阶任务:BMI 小医生。输入体重(公斤)和身高(米),算出 BMI = 体重 ÷ (身高 × 身高)。BMI 小于 18.5 提示"偏瘦",18.5 到 24 之间提示"正常",否则提示"偏重"。
隐藏挑战:单双数裁判。输入一个数,用 % 和 == 判断它是单数还是双数并打印出来。(提示:任何数 % 2 只会是 0 或 1)