鱼C论坛

 找回密码
 立即注册
查看: 3921|回复: 10

[已解决]下面代码中 if 条件该怎么理解,请大神帮忙分析下!

[复制链接]
发表于 2017-8-29 17:56:13 | 显示全部楼层 |阅读模式

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

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

x

a = [i for i in range(100) if not(i%2) and i%3]
最佳答案
2017-9-19 23:07:48
  1. a = [i for i in range(100) if not(i%2) and i%3]
  2. print(a)

  3. print("=========================================================")
  4. a = []
  5. for i in range(100):
  6.     if  not (i%2) and i%3:
  7.         a.append(i)
  8. print(a)

  9. print("=========================================================")
  10. a = []
  11. for i in range(100):
  12.     if  (i%2)==0:
  13.         if i%3:
  14.             a.append(i)
  15. print(a)
  16. print("=========================================================")
  17. a = []
  18. for i in range(100):
  19.     if  (i%2)==0 and i%3 != 0:
  20.             a.append(i)
  21. print(a)
复制代码

以上几种代码都是等价的。

看最后一个代码
not i%2
这里not i%2 表示(i%2) == 0意思就是能被2整除

if代码的情况请看第二个代码
if not(i%2) and i%3就是满足if not i%2的同时在满足if i%3即可。

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-29 18:19:05 From FishC Mobile | 显示全部楼层
是2倍数并且不是3的倍数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-29 18:21:45 From FishC Mobile | 显示全部楼层
if 是逻辑判断,任何非0就是真,0是假,not就是求反,并且结合右边第一个逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-29 18:22:23 From FishC Mobile | 显示全部楼层
if为真就选出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-30 13:50:57 | 显示全部楼层
0~99中 打印不是2的倍数但是是3的倍数的数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-1 10:00:22 | 显示全部楼层
从0到99找出满足以下条件的数;
      1.是偶数
      2.不是3的倍数

>>> a = [i for i in range(100) if not (i%2) and i%3]
>>> a
[2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-1 15:23:04 | 显示全部楼层
Crazy_Snail 发表于 2017-9-1 10:00
从0到99找出满足以下条件的数;
      1.是偶数
      2.不是3的倍数

在书上看到的这个例子,意思:求2的倍数但是不是3的倍数的数      
这里面用的not不很理解,正常求2的倍数就是能被2除尽,即:i%2,现在在前面用个not感觉瞬间大脑死机,
不知道该怎么理解了,请详细说下if语句的情况呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-4 15:03:16 | 显示全部楼层
i%2在能整除时为零*(false),不能整除时不为零(true),所以ont (i%2)在能整除时为(true)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-11 22:26:10 | 显示全部楼层
yiwai 发表于 2017-9-1 15:23
在书上看到的这个例子,意思:求2的倍数但是不是3的倍数的数      
这里面用的not不很理解,正常求2的倍 ...


设A = not(i%2), 当 i 是 2 的倍数时,A为真。
B = i % 3, 当 i 不是3的倍数时,B为真。
当AB同时为真时,取数字i作为一个列表元素。
not运算符是就是取它相反的一面,比如说 a 真, 则not(a)为假。
在Python中,只有0是假,其他值都是真值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-19 23:07:48 | 显示全部楼层    本楼为最佳答案   
  1. a = [i for i in range(100) if not(i%2) and i%3]
  2. print(a)

  3. print("=========================================================")
  4. a = []
  5. for i in range(100):
  6.     if  not (i%2) and i%3:
  7.         a.append(i)
  8. print(a)

  9. print("=========================================================")
  10. a = []
  11. for i in range(100):
  12.     if  (i%2)==0:
  13.         if i%3:
  14.             a.append(i)
  15. print(a)
  16. print("=========================================================")
  17. a = []
  18. for i in range(100):
  19.     if  (i%2)==0 and i%3 != 0:
  20.             a.append(i)
  21. print(a)
复制代码

以上几种代码都是等价的。

看最后一个代码
not i%2
这里not i%2 表示(i%2) == 0意思就是能被2整除

if代码的情况请看第二个代码
if not(i%2) and i%3就是满足if not i%2的同时在满足if i%3即可。

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-21 09:23:25 | 显示全部楼层
这个确实有点绕,还是要一层一层分析,i 为偶数时(i%2)为0(False),not(i%2)即为True,所以选择的是偶数。同理其它。题主加油,共同学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 11:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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