5  布尔值与条件判断

5.1 布尔值:Python的”是与否”

想象你在回答一些只能用”是”或”否”来回答的问题,比如:

  • “你是学生吗?”
  • “你及格了吗?”
  • “今天是周末吗?”

在Python中,这种”是”或”否”的答案就用布尔值(Boolean)来表示:

  • “是”用 True 表示
  • “否”用 False 表示
# 创建一些布尔值
is_student = True
has_passed = True
is_weekend = False

print(f"我是学生吗?{is_student}")
print(f"我及格了吗?{has_passed}")
print(f"今天是周末吗?{is_weekend}")
我是学生吗?True
我及格了吗?True
今天是周末吗?False

5.2 比较运算:Python的判断方式

就像我们在数学课上比较数字的大小一样,Python也可以进行各种比较:

5.2.1 1. 数字的比较

score = 85
passing_score = 60

# 比较成绩
print(f"分数是{score},及格分数是{passing_score}")
print(f"及格了吗?{score >= passing_score}")
print(f"满分了吗?{score == 100}")
print(f"需要补考吗?{score < passing_score}")
分数是85,及格分数是60
及格了吗?True
满分了吗?False
需要补考吗?False

5.2.2 2. 常用的比较运算符

符号 含义 例子 生活中的例子
== 等于 age == 16 “你今年16岁吗?”
!= 不等于 day != "周末" “今天不是周末吗?”
< 小于 score < 60 “分数低于60分吗?”
> 大于 height > 170 “身高超过170厘米吗?”
<= 小于等于 age <= 18 “你是未成年吗?”
>= 大于等于 score >= 90 “是优秀生吗?”
# 实际例子
age = 16
height = 175.5
score = 95

print("一些判断:")
print(f"是16岁吗?{age == 16}")
print(f"身高超过180厘米吗?{height > 180}")
print(f"成绩是优秀吗?{score >= 90}")
一些判断:
是16岁吗?True
身高超过180厘米吗?False
成绩是优秀吗?True

💡 特别注意

  1. 使用 == (两个等号)来判断相等
  2. 不要用 = (一个等号),这是用来赋值的
  3. 比较的结果永远是 TrueFalse

5.3 布尔值的转换:从其他类型到True/False

在Python中,我们可以使用 bool() 函数来判断一个值是”真”还是”假”。这就像是给东西做一个”有没有”的检查:

5.3.1 1. 数字的转换规则

# 数字 -> 布尔值
print("=== 数字的转换 ===")
print(f"数字0转换后:{bool(0)}")         # False,因为是零
print(f"数字1转换后:{bool(1)}")         # True,因为不是零
print(f"数字-1转换后:{bool(-1)}")       # True,因为不是零
print(f"小数0.0转换后:{bool(0.0)}")     # False,因为是零
print(f"小数0.1转换后:{bool(0.1)}")     # True,因为不是零
=== 数字的转换 ===
数字0转换后:False
数字1转换后:True
数字-1转换后:True
小数0.0转换后:False
小数0.1转换后:True

💡 记忆技巧:数字中,只有0是False,其他都是True

5.3.2 2. 字符串的转换规则

# 字符串 -> 布尔值
print("\n=== 字符串的转换 ===")
print(f"空字符串''转换后:{bool('')}")              # False,因为是空的
print(f"字符串'Hello'转换后:{bool('Hello')}")      # True,因为不是空的
print(f"字符串'0'转换后:{bool('0')}")             # True,因为不是空的
print(f"空格字符串' '转换后:{bool(' ')}")          # True,因为不是空的

=== 字符串的转换 ===
空字符串''转换后:False
字符串'Hello'转换后:True
字符串'0'转换后:True
空格字符串' '转换后:True

💡 记忆技巧:字符串中,只有空字符串(’’)是False,其他都是True

5.3.3 3. 容器类型的转换规则

# 列表、字典等 -> 布尔值
print("\n=== 容器类型的转换 ===")
print(f"空列表[]转换后:{bool([])}")                # False,因为是空的
print(f"有内容的列表[1,2]转换后:{bool([1,2])}")    # True,因为不是空的
print(f"空字典{{}}转换后:{bool({})}")              # False,因为是空的
print(f"空元组()转换后:{bool(())}")                # False,因为是空的

=== 容器类型的转换 ===
空列表[]转换后:False
有内容的列表[1,2]转换后:True
空字典{}转换后:False
空元组()转换后:False

💡 记忆技巧:容器中,空的就是False,有东西就是True

5.4 条件语句:做选择的智慧

在生活中,我们经常需要根据不同的情况做出不同的选择。比如:

  • 如果下雨了,就带伞
  • 如果考试及格了,就去看电影
  • 如果作业完成了,就可以玩游戏

Python中的条件语句就是用来处理这种”如果…就…“的情况。

5.4.1 基本的条件语句

# 简单的成绩评价系统
score = 85

if score >= 90:
    print("真棒!继续保持!")
else:
    print("还可以更好!")

# 运行后会显示:"还可以更好!"
还可以更好!

5.4.2 多重条件判断

有时候我们需要判断多种情况:

# 完整的成绩评价系统
score = 85

if score >= 90:
    print("优秀!继续保持!")
elif score >= 80:
    print("良好!还可以更好!")
elif score >= 60:
    print("及格了!但要继续努力!")
else:
    print("没关系,下次一定能行!")

# 运行后会显示:"良好!还可以更好!"
良好!还可以更好!

💡 条件语句的结构

  • if 表示”如果”
  • elif 表示”否则如果”(else if 的缩写)
  • else 表示”否则”(其他情况)
  • 记得在条件后面加上冒号 :
  • 条件成立时要执行的代码要缩进写

5.4.3 实际应用示例

让我们来写一个更实用的程序:

score = 95
homework_done = True
attendance = 0.95

if score >= 90 and homework_done and attendance >= 0.9:
    print("表现非常优秀!继续保持!")
    print("建议:可以帮助同学,提高自己")
elif score >= 75 and homework_done:
    print("表现不错!还可以更好!")
    print("建议:多做一些难题,提升能力")
elif score >= 60:
    print("基本及格,但需要更努力!")
    print("建议:完成所有作业,提高出勤率")
else:
    print("需要加倍努力!")
    print("建议:制定学习计划,每天完成作业")
表现非常优秀!继续保持!
建议:可以帮助同学,提高自己

5.4.4 条件语句的嵌套

有时候我们需要在一个条件内部再做判断:

score = 85
attendance = 0.9
project_completed = True

if score >= 60:  # 第一层条件:成绩及格
    if attendance >= 0.8:  # 第二层条件:出勤率达标
        if project_completed:  # 第三层条件:完成项目
            print("恭喜!可以毕业!")
        else:
            print("项目未完成,需要补交")
    else:
        print("出勤率不足,需要补课")
else:
    print("成绩不及格,需要补考")
恭喜!可以毕业!

5.4.5 实用技巧

  1. 简单条件判断
# 判断是否及格
is_passing = score >= 60
print("及格" if is_passing else "不及格")
及格
  1. 多条件组合
# 判断是否是优秀学生
is_excellent = score >= 90 and homework_done and attendance >= 0.9

🌟 要点总结

  1. 条件语句帮助程序做选择
  2. 使用缩进来表示代码块
  3. 可以使用 ifelifelse 处理多种情况
  4. 条件可以组合使用
  5. 记得在条件后面加冒号 :

5.5 逻辑运算符:组合多个条件

在生活中,我们经常需要同时考虑多个条件。比如:

  • 想去游泳,需要”天气晴朗”并且”有空闲时间”
  • 放学后,“去图书馆”或者”去自习室”学习
  • 如果”不是周末”,就要早起上学

Python提供了三种逻辑运算符来处理这些情况:

  • and(并且):所有条件都必须为真
  • or(或者):至少一个条件为真
  • not(不是):条件的反面

5.5.1 and 运算符:都要满足

就像你要拿到游戏机需要同时满足”作业完成”和”考试及格”两个条件:

homework_done = True
test_passed = True

if homework_done and test_passed:
    print("太棒了!可以玩游戏了!")
else:
    print("还不能玩,继续努力!")
太棒了!可以玩游戏了!

5.5.2 or 运算符:满足其一

比如放学后学习,去图书馆或自习室都可以:

library_open = False
study_room_open = True

if library_open or study_room_open:
    print("找到地方学习了!")
else:
    print("今天只能回家学习了")
找到地方学习了!

5.5.3 not 运算符:取反

用来表示条件的反面:

is_weekend = False
print("今天" + ("不用" if not is_weekend else "要") + "上学")
今天不用上学

5.5.4 实际应用:学习计划助手

让我们来写一个更实用的例子:

homework_done = True
test_score = 95
is_weekend = True

if not homework_done:
    print("作业都没做完,先把作业做完吧!")
elif test_score < 60:
    print("考试不及格,需要好好复习!")
elif is_weekend and homework_done and test_score >= 90:
    print("周末到了,而且表现很棒,可以尽情玩游戏!")
elif homework_done and test_score >= 60:
    print("可以玩一会儿游戏,但要注意时间!")
else:
    print("继续努力!")
周末到了,而且表现很棒,可以尽情玩游戏!

5.5.5 组合多个条件

有时我们需要组合多个条件。建议使用括号让条件更清晰:

age = 16
score = 85 
has_permission = False

can_join = (age >= 15 and score >= 80) or (has_permission and age >= 13)

if can_join:
    print("恭喜!可以参加活动!")
else:
    print("抱歉,暂时不能参加活动")
恭喜!可以参加活动!

5.5.6 实用小贴士

  1. 使用括号让条件更清晰
if (score >= 60 and homework_done) or is_weekend:
    print("可以玩游戏")
可以玩游戏
  1. 条件判断的顺序
  • not 最先运算
  • 然后是 and
  • 最后是 or

🌟 记住要点

  1. and:都必须为真(像是”且”)
  2. or:其中之一为真就行(像是”或者”)
  3. not:取反(像是”不是”)
  4. 多个条件时最好用括号分组
  5. 条件的顺序:not > and > or