鱼C论坛

 找回密码
 立即注册
查看: 2149|回复: 8

[已解决]第21讲课后题求助

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

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

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

x
3. 你可以利用 filter() 和 lambda 表达式快速求出 100 以内所有 3 的倍数吗?
g = filter(lambda x:True if x % 3 == 0 else False,range(101))
print(list(g))

这是正确答案,但是我做的时候发现一个奇怪的问题
下面是我写的代码

g = filter(lambda x:True if x % 3 == 0 ,range(101))
print(list(g))

我跟正确答案在if判断中,少了一个else false,我运行时报错了,错误是无效代码。我这里有点奇怪,我当时想的是,如果输入的x没有满足条件,那么lambda函数应该就会自动输出None,而None在条件判断中为False,所以就不用写else的判断了。但是运行时出现了无效代码的错误。我想知道我错在哪。
最佳答案
2020-3-16 11:48:08
两仪shiki 发表于 2020-3-16 11:44
好的,谢谢,其实这个简写我明白,就是当时为什么非要用else,这个弯没转过来

三元表达式和列表推导式不一样

  1. >>> [i for i in range(10) if i % 2 == 0]    # 获取 10 以内的偶数
  2. [0, 2, 4, 6, 8]
  3. >>> 1 if 1 == 1 else 0
  4. 1
  5. >>> [i for i in range(10) if i % 2 == 0 else None]    # 错误
  6. SyntaxError: invalid syntax
  7. >>> 1 if 1 == 1    # 错误
  8. SyntaxError: invalid syntax
复制代码


PS:如果你的问题已解决,请设置【最佳答案】。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-16 11:29:04 | 显示全部楼层
True if x % 3 == 0 其实是三元表达式,三元表达式必须要有 if 和 else 才行,不能只写一个 if
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 11:34:17 | 显示全部楼层
zltzlt 发表于 2020-3-16 11:29
True if x % 3 == 0 其实是三元表达式,三元表达式必须要有 if 和 else 才行,不能只写一个 if

emmm,那我该怎么判断他是不是三元表达式呢,我有点疑惑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 11:41:59 | 显示全部楼层
两仪shiki 发表于 2020-3-16 11:34
emmm,那我该怎么判断他是不是三元表达式呢,我有点疑惑

是 x if y else z 的格式就是,比如:

  1. >>> a = 1
  2. >>> True if a == 1 else False
  3. True
  4. >>> # 上面的三元表达式相当于下面的 if-else 判断
  5. >>> if a == 1:
  6.         True
  7. else:
  8.         False

  9.        
  10. True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 11:44:00 | 显示全部楼层
zltzlt 发表于 2020-3-16 11:41
是 x if y else z 的格式就是,比如:

好的,谢谢,其实这个简写我明白,就是当时为什么非要用else,这个弯没转过来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 11:46:37 | 显示全部楼层
zltzlt 发表于 2020-3-16 11:41
是 x if y else z 的格式就是,比如:

其实意思就是if条件判断的简写,本身就是一个三元表达式,所以必须要求有else判断条件,对吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 11:48:08 | 显示全部楼层    本楼为最佳答案   
两仪shiki 发表于 2020-3-16 11:44
好的,谢谢,其实这个简写我明白,就是当时为什么非要用else,这个弯没转过来

三元表达式和列表推导式不一样

  1. >>> [i for i in range(10) if i % 2 == 0]    # 获取 10 以内的偶数
  2. [0, 2, 4, 6, 8]
  3. >>> 1 if 1 == 1 else 0
  4. 1
  5. >>> [i for i in range(10) if i % 2 == 0 else None]    # 错误
  6. SyntaxError: invalid syntax
  7. >>> 1 if 1 == 1    # 错误
  8. SyntaxError: invalid syntax
复制代码


PS:如果你的问题已解决,请设置【最佳答案】。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-16 11:48:23 | 显示全部楼层
两仪shiki 发表于 2020-3-16 11:46
其实意思就是if条件判断的简写,本身就是一个三元表达式,所以必须要求有else判断条件,对吧

是的,就是这么规定的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-16 11:52:36 | 显示全部楼层
zltzlt 发表于 2020-3-16 11:48
三元表达式和列表推导式不一样

谢谢,我之前就是列表推导式和三元表达式弄混了。加上这章课后题,前面就还用到了列表推导式。就把我搞晕了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 14:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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