python入门day4:条件,布尔

Day4:条件语句(if,elif,else)与布尔类型

知识点讲解:

1.布尔类型(bool)

  • True,False是布尔值
  • 常见比较运算符:==,!=,<,>,<=,>=

2.条件语句:if,elif,else

# 定义一个整数变量
age = 20  # 设置年龄为 20

# 判断是否成年
if age >= 18:  # 如果 age 大于等于 18
    print("You are an adult.")  # 输出:你是成年人
else:
    print("You are a minor.")  # 否则输出:你是未成年人

# 判断成绩等级
score = 85  # 设置分数为 85

if score >= 90:  # 如果分数大于等于 90
    print("Grade: A")
elif score >= 80:  # 否则如果分数大于等于 80
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
else:
    print("Grade: D")  # 所有条件都不满足时执行

3.条件语句的经典用法

1)判断多个条件:and/or/not

age = 20
is_student = True

# 条件组合:逻辑与 and
if age < 25 and is_student:
    print("You are a young student.")  # 两个条件都满足才执行

# 逻辑或 or
if age < 18 or is_student:
    print("You are a student or minor.")  # 任一条件满足即执行

# 逻辑非 not
if not is_student:
    print("You are not a student.")  # 取反,只有 is_student 为 False 时才执行

2)多条件判断:嵌套写法 vs elif 链式结构

# 链式结构(推荐)
score = 75
if score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 70:
    print("C")
else:
    print("D")

嵌套写法不推荐使用

# 嵌套写法(不推荐,会增加层级)
if score >= 70:
    if score >= 80:
        if score >= 90:
            print("A")
        else:
            print("B")
    else:
        print("C")
else:
    print("D")

3)判断字符串、列表、字典是否为空

# 字符串为空判断
name = ""
if not name:  # 空字符串会被当成 False
    print("Name is empty")

# 列表为空判断
items = []
if not items:  # 空列表也当作 False
    print("No items")

# 字典为空判断
d = {}
if not d:
    print("Empty dictionary")

4)使用in判断元素是否存在

in 是一个成员运算符,用于判断某个“元素”是否存在于一个“容器”之中,返回True或False

语法:

元素 in 容器  # 返回 True 或 False

适用对象(容器类型)

类型示例
字符串"h" in "hello" → True
列表1 in [1, 2, 3] → True
元组"a" in ("a", "b") → True
字典'key' in dict → 判断是否有这个“键”
集合3 in {1, 2, 3} → True

示例详解

①字符串中查找字符或子串

word = "hello"

print("e" in word)       # True,'e' 存在
print("el" in word)      # True,'el' 是子串
print("z" in word)       # False,'z' 不存在

②列表中查找元素

fruits = ["apple", "banana", "cherry"]

print("banana" in fruits)  # True,列表中存在该项
print("orange" in fruits)  # False

③字典中查找键(默认只查键)

person = {"name": "Alice", "age": 25}

print("name" in person)   # True ✅ 键存在
print("Alice" in person)  # False ❌ 值存在但不是键

如果想要判断值则使用下列方法

print("Alice" in person.values())  # True

④集合中查找元素

s = {1, 3, 5}
print(3 in s)     # True
print(2 in s)     # False

5)一行if表达式啊(三元表达式)

# 语法:<值1> if <条件> else <值2>
score = 85
grade = "A" if score >= 90 else "B"
print(grade)  # 输出:B

4.易错点提醒

1)忘记冒号

# 正确写法
if x > 0:
    print("Positive")

2)使用=赋值号当作比较==

# 错误示范(会报语法错误)
# if x = 5:  ❌ = 是赋值,不能用于判断

# 正确写法
if x == 5:
    print("x is 5")

3)写成多重if而非elif

x = 10

# 错误示范:会打印多个结果
if x > 5:
    print("Greater than 5")
if x > 8:
    print("Greater than 8")  # 会继续判断,而不是只进入一个分支

# 正确写法(使用 elif)
if x > 8:
    print("Greater than 8")
elif x > 5:
    print("Greater than 5")

4)空值和None的误用

①None是一个特殊值,表示“什么都没有”,是Python中的空值类型

类型是NoneType,只有一个实例:None

a = None
print(type(a))  # 输出:<class 'NoneType'>

②判断是否为None的正确方式

推荐写法(使用is和is not)

x = None

if x is None:
    print("x 是空值")

if x is not None:
    print("x 有值")

 is 判断的是对象身份是否一致,None是单例对象,因此推荐用is 而不是 ==

常见容器中的“空”判断

容器类型示例是否为“空”判断方式
字符串“”空字符串if not s:
列表[]空列表if not lst:
字典{}空字典if not d:
集合set()空集合if not s:
NoneNone空值if x is None
lst = []

if not lst:  # 如果列表为空,条件为 True
    print("列表为空")

x = None

if x:  # None 被当作 False,条件不成立
    print("这不会被执行")

if x is None:  # 正确判断 None
    print("x 是 None")

5.详细说明  is  

1)什么是   is(身份运算符 identity operator)

is用于比较两个变量是否引用同一个对象(内存地址)

语法:

x is y     # True 表示 x 和 y 是同一个对象
x is not y # True 表示 x 和 y 不是同一个对象

2) is 与 == 的区别(重点)

运算符含义比较内容示例
==值相等内容是否相等"abc"=="abc"是True
is身份相同(对象相同)是否为同一对象(内存地址)“abc” is “abc”不一定是True
a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)  # True:a 和 b 的值相等
print(a is b)  # False:a 和 b 是两个不同的列表对象

# 同一个引用
c = a
print(c is a)  # True:c 和 a 指向同一个对象

3)适合用is的情况(推荐使用场景)

①判断是否为None(最常见)

x = None

if x is None:  # 推荐方式
    print("x 是空值")

不推荐使用:if x == None(虽然合法,但容易跟其他值混淆)

②判断是否为同一对象(引用判断)

a = [1, 2]
b = a       # b 和 a 是同一个对象

print(b is a)      # True
print(b == a)      # True

c = [1, 2]         # 新建一个相同内容的列表

print(c == a)      # True(值相等)
print(c is a)      # False(不是同一对象)

4)字符串与小整数的is陷阱(容易误解)

Python对短字符串,小整数(从-5 到 256)做了缓存,多个变量可能引用同一个对象

x = 100
y = 100
print(x is y)  # True,100 在缓存范围内,复用同一对象

a = "hi"
b = "hi"
print(a is b)  # True,短字符串被缓存

long_str1 = "hello world! this is long"
long_str2 = "hello world! this is long"
print(long_str1 is long_str2)  # 可能 False

判断字符串或整数是否相等时应该使用 ==

5)常见误用陷阱

错误示例原因说明推荐改法
if x == None:合法但不严谨if x is None:
if str1 is str2 :字符串是否相同要用 ==if str1 == str2:
if [1,2] is [1,2]:列表不是对象if [1,2] == [1,2]

6)调试身份:使用id()

你可以用id()查看对象的内存地址:

a = [1, 2]
b = [1, 2]
print(id(a), id(b))   # 两个不同列表,地址不同

c = a
print(id(a), id(c))   # 同一个引用,地址相同

总结

判断类型推荐运算符
值是否相等(列表,字符串等)==
是否同一个对象(引用)is
是否为Noneis/is not

 6.对象与内存地址的相关内容

在Python中“对象是否相同”意味着它们的内存地址(即身份,identity)是否相同

is 运算符 ≈ 比较两个变量是否指向同一块内存地址

在Python中

  • 每一个变量是一个名字(label)
  • 每一个值是一个对象(object)
  • 对象都存储在内存中,每个对象有一个唯一的身份(即内存地址)
a = [1, 2, 3]
b = a      # b 与 a 指向同一个列表对象

print(a is b)        # True,同一个对象(同一地址)
print(id(a), id(b))  # 输出相同的 id(内存地址)

 例如

x = [10, 20]
y = [10, 20]

print(x == y)   # True,因为值一样
print(x is y)   # False,因为是两个不同的列表对象(内存地址不同)
print(id(x))    # 输出 x 的地址,例如 140244898927680
print(id(y))    # 输出 y 的地址,例如 140244898928128

每个对象的3个特征

特证名描述查看方法
身份内存地址id(obj)
类型对象属于什么类型type(obj)
内容直接打印或==比较

7.为什么:is 运算符 ≈ 比较两个变量是否指向同一块内存地址

is 实际上是比较对象的身份(identity),身份底层也确实是地址,但“对象”在Python中并不等于裸内存地址

1)“对象”≠“单纯的内存地址”

在CPython(Python的主流实现)中:

每个对象实际上是一个结构体(例如PyObject)

这个结构体包含:

  • 引用计数(可用于内存管理)
  • 类型指针(对象属于什么类型)
  • 值本身(比如整数42,字符串“abc”等)
id(obj)  # 返回的是对象结构体的内存地址(首地址)

 is 比较的是两个对象的“identity”,即对象结构体的内存地址是否相同

但在实际使用中,不直接暴露“地址”,而是通过对象标识(identity)间接表达

a = 257
b = 257

print(a == b)    # True,值相等
print(a is b)    # 在某些实现中为 False,因为大整数不是缓存对象
print(id(a), id(b))  # 两个地址可能不一样

Python对 -5 ~ 256的整数做了缓存优化,所以:

x = 100
y = 100
print(x is y)  # True

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值