鱼C论坛

 找回密码
 立即注册
查看: 1544|回复: 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,这个弯没转过来

三元表达式和列表推导式不一样
>>> [i for i in range(10) if i % 2 == 0]    # 获取 10 以内的偶数
[0, 2, 4, 6, 8]
>>> 1 if 1 == 1 else 0
1
>>> [i for i in range(10) if i % 2 == 0 else None]    # 错误
SyntaxError: invalid syntax
>>> 1 if 1 == 1    # 错误
SyntaxError: invalid syntax

PS:如果你的问题已解决,请设置【最佳答案】。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-16 11:29:04 | 显示全部楼层
True if x % 3 == 0 其实是三元表达式,三元表达式必须要有 if 和 else 才行,不能只写一个 if
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm,那我该怎么判断他是不是三元表达式呢,我有点疑惑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是 x if y else z 的格式就是,比如:
>>> a = 1
>>> True if a == 1 else False
True
>>> # 上面的三元表达式相当于下面的 if-else 判断
>>> if a == 1:
        True
else:
        False

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

使用道具 举报

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

好的,谢谢,其实这个简写我明白,就是当时为什么非要用else,这个弯没转过来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

其实意思就是if条件判断的简写,本身就是一个三元表达式,所以必须要求有else判断条件,对吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

三元表达式和列表推导式不一样
>>> [i for i in range(10) if i % 2 == 0]    # 获取 10 以内的偶数
[0, 2, 4, 6, 8]
>>> 1 if 1 == 1 else 0
1
>>> [i for i in range(10) if i % 2 == 0 else None]    # 错误
SyntaxError: invalid syntax
>>> 1 if 1 == 1    # 错误
SyntaxError: invalid syntax

PS:如果你的问题已解决,请设置【最佳答案】。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的,就是这么规定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,我之前就是列表推导式和三元表达式弄混了。加上这章课后题,前面就还用到了列表推导式。就把我搞晕了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 22:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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