条件中的多个条件

multiple conditions in conditional

所以我不太确定如何准确地问这个问题,但基本上我想看看两个变量之间的任何值是否也在另外两个变量之间。因此,例如,这是我正在解释的代码示例

var1 = 0
var2 = 20
var3 = 5
var4 = 15
if var3 <= [any value in range var1 to var2] <= var4:
    do something

基本上就是这样,但我不确定用什么代替方括号,或者是否有其他方法可以做到这一点。对不起,如果有一个简单的解决方案,我很累。谢谢!

永远记住当你想为某个值设置条件时,假设在 x 和 y 之间 'a',你可以设置一个条件,a>x and a<y,这就是你想要的:

if var3 >= var1 and var3 <= var2 and var3 <=var4:
    do something

我不是 100% 确定您是希望 var3 既是 var3 >= var1 and var3 <= var2 and var3 <=var4 还是 var3 是 var3 >= var1 and var3 <= var2 or var3 <=var4,请根据您的预期输出进行更改。

希望这对您有所帮助,如果它对您不起作用,请告诉我。这是一个经典的例子,但不是 pythonic 方式:)

你的意思是:

 for i in range(var1, var2+1):
    if var3 <= i <=var4:
      do something

让我们使用一些数学符号。所以你有两个数字范围,[a, b] 和 [x, y],其中[ab]表示"all numbers between a and b".

的概念

一种解释是你想看看 [[=​​18=]a, b] 是否是一个 子集 [x, y].

if a >= x and b <= y:
    ...

还有一个就是你要看[a,b]相交[ x, y] 以任何方式。当两个端点 ab 中的任何一个包含在 [x, y],反之亦然。

if ((x <= a <= y or x <= b <= y) or
    (a <= x <= b or a <= y <= b)):
    ...

假设变量之间没有预先已知的顺序....

min34 = min(var3, var4)
max34 = max(var3, var4)

if ( (min34 < var1 && max34 > var1) || (min34 < var2 && max34 > var2) ) :
    do something

如果范围的边缘算作 "in between",则使用“<=”和“>=”。

我对其他答案的复杂性感到惊讶。这应该只是:

def intersect(a, A, x, X):
  '''Return True if any number in range(a, A+1) is in range(x, X+1).'''
  return a <= X and x <= A

请注意交集是对称的,因此 intersect(a,b,x,y) == intersect(x,y,a,b) 始终成立。


所有交集可能性:

   a...A
x..X

   a...A
 x..X

   a...A
  x..X

   a...A
   x..X

   a...A
    x..X

   a...A
     x..X

   a...A
      x..X

   a...A
       x..X

对应上面的函数


最后,为了确保这与 John Kugelman 的回答没有区别:

def their(a, b, x, y):
  return ((x <= a <= y or x <= b <= y) or (a <= x <= b or a <= y <= b))

def my(a, A, x, X):
  return a <= X and x <= A

from itertools import product
for x in product(range(5), repeat=4):
  if my(*x) != their(*x):
    if x[0] <= x[1] and x[2] <= x[3]:
      print('[{1}, {2}] and [{3}, {4}] intersect according to {0}.'
            .format('me' if my(*x) else 'them', *x))
    else:
      print('{} say it intersects, when input is incorrect.'
            .format('I' if my(*x) else 'They'))

运行 这作为 python intersect.py | uniq -c 输出:

140 They say it intersects, when input is incorrect.