多个 != 与 == 运算符
Multiple != versus == operators
以下程序完全符合预期:
data = input("Input the length of three sides of a triangle: ").strip()
if data.count(',') != 2:
print("You did not enter the lengths of three sides: ")
a, b, c = data.split(', ')
def triangle_type(s1, s2, s3):
if s1 == s2 == s3:
return print("The values entered represent an equilateral triangle.")
elif s1 != s2 and s1 != s3 and s2 != s3:
return print("The values entered represent a scalene triangle.")
else:
if s1 == s2 or s1 == s3 or s2 == s3:
return print("The values entered represent an isosceles triangle.")
triangle_type(int(a), int(b), int(c))
但是,如果我将第二个条件更改为以下内容:
elif s1 != s2 != s3:
它没有按预期工作。
如果我输入 3、6、3,我得到:
Input the length of three sides of a triangle: 3, 6, 3
The values entered represent a scalene triangle.
这是不正确的。这应该清楚地匹配条件 #3(等腰)。
第一个版本的代码可以正常工作。
我对两件事感到困惑:
1) 为什么第二个版本运行不正常?
2) 如果第二个版本无效,那么为什么第一个条件有效
正确吗?
鉴于 != 运算符的上述行为,我希望必须像 a == b 和 a == c 和 b == c 一样对待 a == b == c,但我没有不得不。
链接版本相当于s1 != s2 and s2 != s3
;它不需要 s1 != s3
,因为不等式是不可传递的。
当您在 Python 中链接比较时,它 and
将它们放在一起,并且它只进行与比较运算符一样多的比较。所以
if s1 == s2 == s3:
等同于
if s1 == s2 and s2 == s3:
这是有效的,因为如果这两个条件都是 True
,那么 s1
必须 也等于 s3
(因为它们'都等于 s2
).
但是
if s1 != s2 != s3:
等同于
if s1 != s2 and s2 != s3:
正如您所发现的,对于值 3、6 和 3,上述两个条件是 True
,但第三个假设条件(s1 != s3
)不是 True
.这不会像您预期的那样工作,因为 Python 没有进行第三次比较。
以下程序完全符合预期:
data = input("Input the length of three sides of a triangle: ").strip()
if data.count(',') != 2:
print("You did not enter the lengths of three sides: ")
a, b, c = data.split(', ')
def triangle_type(s1, s2, s3):
if s1 == s2 == s3:
return print("The values entered represent an equilateral triangle.")
elif s1 != s2 and s1 != s3 and s2 != s3:
return print("The values entered represent a scalene triangle.")
else:
if s1 == s2 or s1 == s3 or s2 == s3:
return print("The values entered represent an isosceles triangle.")
triangle_type(int(a), int(b), int(c))
但是,如果我将第二个条件更改为以下内容:
elif s1 != s2 != s3:
它没有按预期工作。
如果我输入 3、6、3,我得到:
Input the length of three sides of a triangle: 3, 6, 3
The values entered represent a scalene triangle.
这是不正确的。这应该清楚地匹配条件 #3(等腰)。
第一个版本的代码可以正常工作。
我对两件事感到困惑:
1) 为什么第二个版本运行不正常?
2) 如果第二个版本无效,那么为什么第一个条件有效 正确吗?
鉴于 != 运算符的上述行为,我希望必须像 a == b 和 a == c 和 b == c 一样对待 a == b == c,但我没有不得不。
链接版本相当于s1 != s2 and s2 != s3
;它不需要 s1 != s3
,因为不等式是不可传递的。
当您在 Python 中链接比较时,它 and
将它们放在一起,并且它只进行与比较运算符一样多的比较。所以
if s1 == s2 == s3:
等同于
if s1 == s2 and s2 == s3:
这是有效的,因为如果这两个条件都是 True
,那么 s1
必须 也等于 s3
(因为它们'都等于 s2
).
但是
if s1 != s2 != s3:
等同于
if s1 != s2 and s2 != s3:
正如您所发现的,对于值 3、6 和 3,上述两个条件是 True
,但第三个假设条件(s1 != s3
)不是 True
.这不会像您预期的那样工作,因为 Python 没有进行第三次比较。