江湖散人 发表于 2021-3-27 16:24:14

python 条件语句的解释



a = (i for i in range(100) if not (i %2)and (i%3))


这个语句该怎么理解?

Daniel_Zhang 发表于 2021-3-27 16:40:15

代码敲错了吧

https://blog.csdn.net/java_pythons/article/details/106999515

Daniel_Zhang 发表于 2021-3-27 16:45:20

尝试一下这个代码

a =
print(a)

print("\n--------我是一条分割线--------\n")
b = []
for i in range(100):
    if (i % 2 == 0) and (i % 3 != 0):
      b.append(i)
print(b)

hrp 发表于 2021-3-27 16:47:43

本帖最后由 hrp 于 2021-3-27 16:49 编辑

# 生成器
a = (i for i in range(100) if not (i %2)and (i%3))

# 列表推导式
a =

列表推导式展开后相当于
a = []
for i in range(100):
    if not (i %2)and (i%3):
      a.append(i)

江湖散人 发表于 2021-3-27 16:59:35

hrp 发表于 2021-3-27 16:47
# 生成器
a = (i for i in range(100) if not (i %2)and (i%3))



if not (i %2)and (i%3):
我就是有点不太明白这句是什么意思?

江湖散人 发表于 2021-3-27 17:03:16

Daniel_Zhang 发表于 2021-3-27 16:45
尝试一下这个代码

if (i % 2 == 0) and (i % 3 != 0)到 if not (i %2)and (i%3) 怎么演变的呀?
前边的语句怎么变成后边那个的呀?
后边那句我的理解就是:如果 i 不能被 2 整除,并且不能被 3 整除。
前边那句号理解,就是能被 2 整除,不能被 3 整除。

hrp 发表于 2021-3-27 17:04:05

江湖散人 发表于 2021-3-27 16:59
if not (i %2)and (i%3):
我就是有点不太明白这句是什么意思?

i%2 对2取余
i%3 对3取余

当i对2取余为0的时候,not i%2为True
当i对3取余不为0时,可以当做True

整句话连起来意思就是
ifi对2取余为0且i对3取余不为0

Daniel_Zhang 发表于 2021-3-27 17:14:10

拆分一下

if i % 2:
表示的是当 i % 2 为 True 时通过,也就是 i % 2 不为 0 (False) 时通过
所以 if i % 2: 可以等同于 if i % 2 != 0
用 not 对 if i % 2: 取反,就变成了 if not i % 2: 也就是 if i % 2 == 0

现在来看另一半 if i%3:
现在你应该能理解了吧?根据我上面的解释
也就是 if i % 3 == True:
等同于 if i % 3 != 0

所以左右用 and 连起来
if (i % 2 == 0) and (i % 3 != 0)即为 if not (i %2)and (i%3)

江湖散人 发表于 2021-3-27 18:14:02

hrp 发表于 2021-3-27 17:04
i%2 对2取余
i%3 对3取余



谢谢老师,你讲的比较专业,对于小白的我来说有点难理解,

江湖散人 发表于 2021-3-27 18:14:37

Daniel_Zhang 发表于 2021-3-27 17:14
拆分一下

if i % 2:


谢谢你,终于搞明白了,都被绕进去了。
页: [1]
查看完整版本: python 条件语句的解释