2016-07-21 5 views
1

Так что я не совсем уверен, как правильно задать этот вопрос, но в основном я хочу посмотреть, есть ли между двумя переменными какое-либо значение между двумя другими переменными. Так, например, здесь приведен пример того, что код может выглядеть, что я объясняюнесколько условий в условном

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

так, что в основном это, но я не уверен, что бы вместо скобок или, если есть другой способ сделать это. Извините, если есть простое решение, я довольно устал. Благодаря!

ответ

2

Я удивлен сложностью других ответов.Это должно быть просто:

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 

что соответствует указанной выше функции.


Наконец, чтобы убедиться, что это не отличается от ответа Джона 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. 
0

Всегда помните, когда вы хотите, чтобы задать условие для некоторого значения, позволяет сказать «а» между х и у, вы можете задать условие, 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 be var3 >= var1 and var3 <= var2 or var3 <=var4, пожалуйста, внесите изменения в соответствии с вашим ожидаемым выходом.

Надеюсь, что это поможет, сообщите мне, если это не сработает для вас. Это классический пример, но не вещий путь, хотя :)

+1

Правильный синтаксис * и * вместо * && * в python. –

+0

Спасибо @TedKleinBergman обновлено :) – Jordon

+1

'&&' -> 'and' in Python –

0

Вы имеете в виду сделать:

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

'something' будет выполняться много раз. Вы должны использовать 'if any (var3 <= i <= var4 для i в диапазоне (var1, var2 + 1))', но даже это излишне сложно. – arekolek

1

Давайте использовать немного математической нотации. Таким образом, вы два числа в диапазоне [, б] и [х, у], где [, б] представляет собой понятие «всех чисел между и b ".

Одна интерпретация вы хотите увидеть, если [, б] является подмножество из [х, у].

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

Другой является то, что вы хотите увидеть, если [, б] пересекает [х, у] в любом случае. Это происходит, когда одно из двух конечных точек или б содержится в [х, у], или наоборот.

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

[Это излишне сложно.] (Http://www.wolframalpha.com/input/?i=a%3C%3Db+and+x%3C%3Dy+and+%28%28%28x+%3C%3D+ а +% 3C% 3D + у + или + х +% 3C% 3D + B +% 3C% 3D + у% 29 + или +% 28a +% 3C% 3D + х +% 3C% 3D + B + или + а +% 3C% 3D + у +% 3C% 3D + Ь% 29% 29% 29) – arekolek

0

Предполагая, что не существует упорядочение среди переменных, известно заранее ....

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

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

Использование «< =» и «> =», если край диапазона считается «посередине».

Смежные вопросы