print(1<(2==2)) #False print(1<2 ==2) #True
1
wellsc 2017-08-02 19:27:10 +08:00 via Android
建议了解一下运算符优先级
|
2
BBrother 2017-08-02 19:28:49 +08:00
python 里 0 == False, 1 == True.
|
3
lxml 2017-08-02 19:29:45 +08:00
括号优先计算
>>> 2==2 0 >>> 1<0 False |
5
Patrick95 2017-08-02 19:30:39 +08:00
是类型隐式转换的问题。
Python 中,除了‘’、""、0、()、[]、{}、None 转 bool 类型为 False 其他转换基本都为 True |
6
111111111111 2017-08-02 19:31:48 +08:00 via Android 10
第一个 ,首先 2==2 结果是 1,所以 1<1 是 False
第二个,你先理解(1<2<3) is True, (4>2<3) is True 可以理解成先比较 1<2,再比较 2==2,所以结果是 True |
7
iVeego 2017-08-02 19:33:54 +08:00
@lxml #4 print(1<2 ==2) 这句话,1<2 是 True,应该是 1,所以转换成 print(1==2),不是这样吗?
|
8
llb123 2017-08-02 19:33:56 +08:00 1
第二个类似于 1<2 and 2==2
|
9
altboy OP @111111111111 感谢,懂了
|
10
iVeego 2017-08-02 19:35:21 +08:00
|
11
lonelinsky 2017-08-02 19:36:18 +08:00
1. 1<(2==2)
先算 2==2 为 True, 计算 1 < True 时,True 被转为数字类型,值为 1,1 < 1,为 False 2. 1<2 ==2 先算 1 < 2 为 True, 计算 True == 2 时,2 被转为 bool 类型,值为 True,True == True, 为 True 注意比较的时候是把运算符右边的类型转为左边的类型,然后再行比较。 |
12
ivechan 2017-08-02 19:41:07 +08:00
|
13
altboy OP @lonelinsky 这个解释我刚开始以为对了,往解释器里一放 True==2 然后就尴尬了。。。
|
14
lonelinsky 2017-08-02 19:46:50 +08:00
@lonelinsky #11 更正,上面的说法是错误的,1 < 2 == 2 和 (1 < 2) == 2 是不一样的, 这个应该其实是 Python 的一个语法糖,为了简化 (b > a and b < c) , 可以直接写做 ( a < b < c); 所以题目的 1 < 2 == 2 其实就是 (1 < 2 and 2 == 2)
=。= |
15
lonelinsky 2017-08-02 19:48:50 +08:00
|
16
ivechan 2017-08-02 19:57:45 +08:00 2
不得不说这个问题确实"装"到很多人, 看似简单的问题, 但是却被很多人用 C\Java 等语法套用在 Python 上弄得混淆了.
为了弄清楚这个问题, 我去查了官方文档. 里面有两句话解释了这个问题: "Also unlike C, expressions like a < b < c have the interpretation that is conventional in mathematics:" "Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z" 简而言之, 在 Python 里, < > 这种比较运算符更倾向于数学的表达方式, 并且遵循"链式"的规则. 举个例子, print(2<3>1)在 Python 是 True 的, 但是在 C 语言中却是"False"的. 原因就是在数学中(Python 使用的), 这个不等式是成立的, 但是在 C 语言中, 并没有这种"数学"规则, C 语言中是这种顺序: 2<3 是 True 的, (或者更准确地说 2<3 返回的是一个非 0).但是在实现中, 一般是把 1 作为非 0 的替代, 也就是 1 代表 True,0 代表 False. 这样整个逻辑比较就变成 1>1,也就是 False. PS: 感谢楼主和#6, 一个非常好的问题和一个明白人. |
17
zuanzi 2017-08-03 08:33:14 +08:00
学到了
|