ronald627 发表于 2020-4-13 16:33:00

关于if not and的理解

本帖最后由 ronald627 于 2020-4-13 16:37 编辑

例如:
for x in range(100):
    if not (x % 2) and x % 3:
写成列表推导就是


这个是怎么理解

qiuyouzhi 发表于 2020-4-13 16:38:48

你不理解的地方在哪里?

sunrise085 发表于 2020-4-13 16:41:37

本帖最后由 sunrise085 于 2020-4-13 16:43 编辑

if not (x % 2) and x % 3
意思就是对2求余为0,对3求余不为0啊
not (x % 2)是一个逻辑表达式,当x对2求余为0,表达式的结果才为True

ronald627 发表于 2020-4-13 16:43:52

qiuyouzhi 发表于 2020-4-13 16:38
你不理解的地方在哪里?

x 余 2
x 余 3
放到if not and中这两个条件先判断谁

qiuyouzhi 发表于 2020-4-13 16:44:20

ronald627 发表于 2020-4-13 16:43
x 余 2
x 余 3
放到if not and中这两个条件先判断谁

写在前面的

sunrise085 发表于 2020-4-13 16:51:30

ronald627 发表于 2020-4-13 16:43
x 余 2
x 余 3
放到if not and中这两个条件先判断谁

not优先级要高于and
if not (x % 2) and x % 3
相当于
if (not (x % 2)) and (x % 3)
(not (x % 2)) 和 (x % 3)这两部分,从左向右进行判断

ronald627 发表于 2020-4-13 16:53:25

sunrise085 发表于 2020-4-13 16:41
if not (x % 2) and x % 3
意思就是对2求余为0,对3求余不为0啊
not (x % 2)是一个逻辑表达式,当x对2求 ...

看着有点懵,
if not:或者if:这种判断式,不应该理解为满足条件时返回True吗?
if not (x%2)不应该是理解成如果x 余 2不等于0 返回True吗

ronald627 发表于 2020-4-13 16:54:06

qiuyouzhi 发表于 2020-4-13 16:44
写在前面的

看着有点懵,
if not:或者if:这种判断式,不应该理解为满足条件时返回True吗?
if not (x%2)不应该是理解成如果x 余 2不等于0 返回True吗

qiuyouzhi 发表于 2020-4-13 16:56:05

ronald627 发表于 2020-4-13 16:54
看着有点懵,
if not:或者if:这种判断式,不应该理解为满足条件时返回True吗?
if not (x%2)不应该是 ...

1,是的
2,假设x等于6,6%2==0,也就是False
再用not取反,是True
也就是x余2等于0返回True

sunrise085 发表于 2020-4-13 17:15:48

ronald627 发表于 2020-4-13 16:54
看着有点懵,
if not:或者if:这种判断式,不应该理解为满足条件时返回True吗?
if not (x%2)不应该是 ...

你所说的
如果x 余 2不等于0 返回True
应该是not(x%2==0)

zltzlt 发表于 2020-4-13 17:16:38

ronald627 发表于 2020-4-13 16:54
看着有点懵,
if not:或者if:这种判断式,不应该理解为满足条件时返回True吗?
if not (x%2)不应该是 ...

并不是,not True 为 False,not False 为 True。

假设 x 是 3,3 % 2 是 1,not 1 为 False
假设 x 是 4,4 % 2 是 0,not 0 为 True

_荟桐_ 发表于 2020-4-13 20:06:30

依次把100里的所有整数的值赋给x,如果x%2为零(x是偶数)   并且   x不能整除3,就把x加入到列表里
列表推导式的顺序是 for循环 -> if判断 ->把x加入列表

not优先级高于and,所以先管not,在去看and

x是偶数时:
      【x%2等于0,为假】
      【not(x%2)就为真,就会去判断x能否整除3】
      如果能整除:
            就把x加入列表
       如果不能:
            判断下一个数
如果不是:
       判断下一个数

ronald627 发表于 2020-4-14 14:28:27

_荟桐_ 发表于 2020-4-13 20:06
依次把100里的所有整数的值赋给x,如果x%2为零(x是偶数)   并且   x不能整除3,就把x加入到列表里
列表推 ...

我想来想去可能我纠结的点是那个 x % 2为真哪里。x % 2是可以整除的,所以我理解应该是为真,然后前面加了个not,那这里的结果不应该是false吗。

ronald627 发表于 2020-4-14 14:30:31

本帖最后由 ronald627 于 2020-4-14 14:36 编辑

sunrise085 发表于 2020-4-13 16:41
if not (x % 2) and x % 3
意思就是对2求余为0,对3求余不为0啊
not (x % 2)是一个逻辑表达式,当x对2求 ...

感谢,其实你回答的已经很清楚了。现在也能理解了。
开始我纠结的点是那个 x % 2为真哪里。x % 2是可以整除的,所以我理解应该是为True,然后前面加了个not,那这里的结果不应该是false吗。

后来理解了 x如果是22%2结果是0 返回false ,然后not false就返回true了。。。

ronald627 发表于 2020-4-14 14:37:04

zltzlt 发表于 2020-4-13 17:16
并不是,not True 为 False,not False 为 True。

假设 x 是 3,3 % 2 是 1,not 1 为 False


您这么一说,完全理解了。感谢
页: [1]
查看完整版本: 关于if not and的理解