【问题标题】:multiple conditions in conditional条件中的多个条件
【发布时间】:2016-11-24 09:44:21
【问题描述】:

所以我不确定如何准确地问这个问题,但基本上我想看看两个变量之间的任何值是否也在其他两个变量之间。因此,例如,这里是我正在解释的代码可能看起来像的示例

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

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

【问题讨论】:

    标签: python variables if-statement conditional


    【解决方案1】:

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

    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.
    

    【讨论】:

      【解决方案2】:

      让我们使用一些数学符号。所以你有两个数字范围,[a, b] 和 [x, y],其中 [a,b]表示“ab之间的所有数字”的概念。

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

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

      另一个是你想看看 [a, b] intersects [x, y] 以任何方式。当两个端点 ab 中的任何一个包含在 [x, y] 中时,就会发生这种情况,反之亦然反之亦然。

      if ((x <= a <= y or x <= b <= y) or
          (a <= x <= b or a <= y <= b)):
          ...
      
      【解决方案3】:

      你的意思是:

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

      【讨论】:

      • something 将被执行多次。你应该使用if any(var3&lt;=i&lt;=var4 for i in range(var1,var2+1)),但即使这样也很复杂。
      【解决方案4】:

      假设事先知道的变量之间没有顺序......

      min34 = min(var3, var4)
      max34 = max(var3, var4)
      
      if ( (min34 < var1 && max34 > var1) || (min34 < var2 && max34 > var2) ) :
          do something
      

      如果范围的边缘算作“中间”,请使用“="。

      【讨论】:

        【解决方案5】:

        永远记住,当你想为某个值设置条件时,比如 x 和 y 之间的“a”,你可以设置一个条件 a&gt;x and a&lt;y,这就是你想要的:

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

        我不能 100% 确定您是否希望 var3 同时为 var3 &gt;= var1 and var3 &lt;= var2 and var3 &lt;=var4 或 var3 为 var3 &gt;= var1 and var3 &lt;= var2 or var3 &lt;=var4,请根据您的预期输出进行更改。

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

        【讨论】:

        • 正确的语法是 and 而不是 python 中的 &&
        • &amp;&amp; -> and 在 Python 中
        猜你喜欢
        • 1970-01-01
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 2017-03-05
        • 2012-01-29
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多