鱼C论坛

 找回密码
 立即注册
查看: 1654|回复: 9

[已解决]python 条件语句的解释

[复制链接]
发表于 2021-3-27 16:24:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


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


这个语句该怎么理解?

最佳答案
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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-27 16:40:15 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 16:45:20 | 显示全部楼层
尝试一下这个代码
a = [i for i in range(100)if not(i % 2) and i % 3]
print(a)

print("\n--------我是一条分割线--------\n")
b = []
for i in range(100):
    if (i % 2 == 0) and (i % 3 != 0):
        b.append(i)
print(b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 16:47:43 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2021-3-27 16:49 编辑

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

# 列表推导式
a = [i for i in range(100) if not (i %2)and (i%3)]

列表推导式展开后相当于
a = []
for i in range(100):
    if not (i %2)and (i%3):
        a.append(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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):
我就是有点不太明白这句是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-27 17:03:16 | 显示全部楼层

if (i % 2 == 0) and (i % 3 != 0)到 if not (i %2)and (i%3) 怎么演变的呀?
前边的语句怎么变成后边那个的呀?
后边那句我的理解就是:如果 i 不能被 2 整除,并且不能被 3 整除。
前边那句号理解,就是能被 2 整除,不能被 3 整除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-27 17:04:05 From FishC Mobile | 显示全部楼层
江湖散人 发表于 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

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

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +3 收起 理由
Daniel_Zhang + 3 + 3 + 3 大佬讲得比我的更专业

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-27 18:14:02 | 显示全部楼层
hrp 发表于 2021-3-27 17:04
i%2 对2取余
i%3 对3取余

谢谢老师,你讲的比较专业,对于小白的我来说有点难理解,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-27 18:14:37 | 显示全部楼层

谢谢你,终于搞明白了,都被绕进去了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表