Намерих нещо интересно.
a = Interval(-100, -100)
b = Interval(None, None)
len(a) == 0
len(b) == 0
Май трябва
Намерих нещо интересно.
a = Interval(-100, -100)
b = Interval(None, None)
len(a) == 0
len(b) == 0
Май трябва
Това което си написал е доста вярно. Като цяло, исках да дефинирате len
по някакъв начин, но ми бе
сравняване (<, >, <=, >=)
Какво ще рече равенството тук? За безкрайните ясно, че ознава да съвпадат. Но за крайните, на дължините ли е, или на интервалите? В смисъл, трябва ли (a <= b) == (a < b or a == b)?
Освен това, < и > кои равенства изключват?
За крайни интервали, само съвпадение, или и тези по дължина? Т.е. нали за съвпадащи или еднакводълги интервали < и > са False?
За безкрайни, ако се съдържат взаимно, False ли е, или приемаме < и > като символ за подможество? :)
Ако два интервала са крайни, по-голям е този с по-голямата дължина.
Ако единия е безкраен, другия краен, безкрайния е по-голям.
Ако два интервала са безкрайни, по-голям е този който съдържа другия. Ако нито един не съдържа другия, <
, >
, <=
, >=
връщат False
.
От a <= b
, съвсем логично следва че a < b or a == b
.
Съвпадащи интервали са еднакво дълги и нито единия не е по-голям или по-малък от другия. Равни са.
Усещам, че ==
и <
, >
не са много симетрични, но точно така го искаме :)
Тогава (1,2) съвпада ли с (3,4)?
Добре, усетих къде е проблема. При <=
равното е по-различно от ==
.
Значи, ето примери за сравнение:
Interval(1, 2) < Interval(3, 4) == False
Interavl(1, 2) <= Interval(3, 4) == False
Interval(1, 2) > Interval(3, 4) == False
Interval(1, 2) >= Interval(3, 4) == False
Т.е., при равенство гледате дали границите съвпадат, докато при по-голямо/по-малко гледате по-горните условия.
Добре, последно, така:
>>> Interval(1,2) < Interval(3,4)
False
>>> Interval(1,2) <= Interval(3,4)
True
>>> Interval(1,2) == Interval(3,4)
False
Както би следвало да бъде, ако разбирам правилно условието, или Interval(1,2) <= Interval(3,4) трябва да е False?
За безкрайните, предполагам нещата са така:
>>> Interval(1,None) < Interval(1,None)
False
>>> Interval(1,None) <= Interval(1,None)
True
Т.е. при тях нещата са в общи линии ясни :)
Точно така.
Interval(1,2) <= Interval(3,4) == False
Нито е по-голям, нито е равен. Знам че е малко странно, две неща да са несравними, но това се случва по един или друг начин, като сравняваме множества :)
Може би трябва
Добре ъпдейтнах задачата и пуснах новина по въпроса?
Ами Interval(0, 10).expand(-11, 0) ? Ще върне (11,10), а този интервал не ми харесва много :-)
Моят клас връща ValueError при дадения от теб пример. Надявам се това да е правилното ре
Ей, да.
Супер, така правете, ще ъпдетна задачата. :)
Как трябва да избегнем проблема, че когато се създава обект от класа може да му се зададе left да е по-голямо от right?
Например:
a=Interval(2,1)
не разбрах дали expand променя текущия обект или не?
освен това intersect не е казано какво връща, защото сечение може да е и Interval, и tuple, и list,...
аз ще го правя на връща Interval
надявам се че това си имал впредвид
да, би било хубаво да се каже изрично коя функция променя обекта а коя връща нов. в условията има казано само за една функция която връща нов обект.
и още за сравненията
Interval(5,10).contains(Interval(5,10)) какво трябва да връща - True и False
от това зависи поседението на оператори <,<=,>,>=
щото думата "изцято" от тук
contains(interval) - връща True или False в зависимост от това дали подадения като аргумент интервал се съдържа изцяло в този, върху който е извикан метода.
може да се интерпретира по много начини.
Това как да го тълкуваме:
Interval(0, 10).expand(-1, 1) връща нов интервал Interval(1, 11). Ако от ляво или отдясно имате безкрайност, раз
1) Interval(0, 10).expand(-1, 1) ne trqbva li da vryshta nov interval (-1, 11), a ne (1, 11) nali vze pak go expandva-me
@nadya: ako imash interval (x, y) i iskash da go razshirish s (a, b) shte poluchish rezultat (x-a, y+b). Nali taka, razshirqvane otlqvo predstavlqva izvajdane na argumenta ot tekushtata lqva granica i syotvetno otdqsno - pribavqne. V konkretniq sluchai:
Interval(0, 10).expand(-1, 1) =
Interval(0 - (-1), 10 + 1) =
Interval(0 + 1, 10 + 1) =
Interval(1, 11)
аз имам един въпрос относно вида на числата.Нали пи
@Shiro: аз съм същото мнение както nadya. поне така го имплементирах. някакси по-естствено изглежда
някой да разясни как става експандването
в условието пи
Тъй и тъй съм почнал с въпросите, да ми кажете как да си преценим, като какво трябва да връщаме получените интервали - да ги запазвам в other-а( с който правя сечението например или събиране или изваждане и т.н.) или да си правя нов обект във функцииката и да връщам него???
contains
и __contains__
са две различни неща. Мисля, че е доста ясно обяснено - in
работи за число и интервал, докато contains
е метод, който взема само интервал.
Да, гре
Може ли да уточним:
(1,2) in (1,2) == ?
(1,2) in (1,3) == ?
Уточнявам, оператора in
не работи за интервали, а за числа. Мислех, че ясно съм го написал :)
You must log in to post.