Трета задача

  1. Трета задача е публикувана. Срокът ви е до идния понеделник.

    Напомням още веднъж. Ще бъдем крайни, ако нарушавате конвенциите. Ако още не сте го направили, прочетете много добре PEP 8. Не изпращайте домашно, без да сте изпълнили примерните тестове и без да сте направили обстойна проверка за това, дали случайно не нарушавате някоя от конвенциите в PEP 8.

  2. Аз се извинявам за това е направих нова тема, но да ви попитам нещо тук. Ако направим човек, на който не казваме майка и баща, какво трябва да има на тяхно място ... None или служебни майка и баща :D

  3. А за директна роднинска връзка се има в предвид: родител <=> дете или също и брат <=> сестра, внук <=> баба? Предполагам със сигурност братовчедите не са в директна ?

    EDIT: Отговорих си, като прочетох името на метода вместо описанието му :D И все пак единствено Родител -> Наследник е директна?

  4. Kога един човек се счита равен на друг човек?

    Едит: За да бъда по-точен: Ако създам една инстанция Гошко и после създам още една инстанция Гошко със същите аргументи, това същия Гошко ли ще е или майката и бащата си имат двама Гошковци?

    Също така, ако Гошко и Генчо са синове на Пена и Пенчо, за да разбере Гошко кои са неговите братя, той трябва да вземе всички синове на Пена и Пенчо, които не са самия него(където се намесва проверката за равенство).

    Проверката с is ли ще бъде?

  5. @Марто, Радо е прав.

    Последният път в Торонто няколко души ми казаха, че не са обърнали внимание на жълтите постове. Ако сте задали въпрос, някой ви е отговорил и неговата публикация е с жълт фон, то ние сме минали, видяли сме отговора на човека и сме съгласни с него.

    Така човекът е получил точка, а вие знаете, че можете да третирате неговият отговор, като отговор от наша страна.

  6. @Иван и @Стела - между другото, въпреки че сме свикнали с нормални емотикони като о.О и :-), ако искате можете и да ползвате Emoji емотикони :wink:

    @Йордан и @Георги - много благодарим за ектра тестовете :blush: - сигурно има някой известен човек, който някога е казал "You can never have too many tests" :yum:

    @Йордан - както Орлин отбеляза единствено Родител -> Наследник се счита за директна връзка и по-точно, че метода е is_direct_successor - тоест дали подадения аргумент е директен наследник на инстанцията, чийто метод викаме. Или по-кратка и по-проста илюстрация с пример от оригиналните тестове:

    adam.is_direct_successor(first_son) # => True
    first_son.is_direct_successor(adam) # => False
    

    Тоест можеш да си оправиш тестовете за този метод :wink: (освен всичко друго и за да не объркаш някой човек, ако реши да ти пусне тестовете върху своята имплементация, което би могло впоследствие да доведе и до това да си поправи правилния код до грешен такъв)

    @Кирил - между другото можехте да дефинирате условието по по-ясен начин поне на две места.

    1. Въпреки че Note: Братя са и двама души само с един общ родител благодарение на и-то се разбира какво сте искали да кажете, все пак фактът, че Орлин реши да пита, показва че все пак можехте от самото начало да напишете с поне един общ родител

    2. Както @Симеон отбеляза условието за 18те години разлика е излишно при положение, че ще се очаква само валиден вход и няма нужда да се правят допълнителни проверки. Евентуално има смисъл само, за да кажем, че няма да има незаконни или извънбрачни или каквито се водят деца.

    3. Описанието на метода is_direct_successor (дали двама души са с директна роднинска връзка) също определено само по себе си въобще не е ясно - може и да греша, но според мен дори и да приемем, че нямам директна роднинска връзка със сестра си то поне с майка си и баща си трябва да имам. Във тази тема все пак се обсъждат подобни неясни елементи на условието, но с доста малко усилие можеше да се спести част от това обсъждане. Точно поради наличието на така дефинираното условие имаше нужда и Орлин да пита въпрос, а Йордан да има един грешен тест. Е, освен ако не е било направено нарочно, за да се научим да четем и разбираме какво искате да кажете, когато то не е достатъчно ясно за всеки (което също е опция и при това положение би било ок).

    Извинявам се, ако съм бил много груб и съм обидил някого. :pray:

  7. Според мен метода трябва да бъде универсален (да работи и за родител, и за дете) и да се казва has_direct_relation. @Илия, ако не беше пояснено никога нямаше да разберем дали has_direct_successor е метод който трябва да се извиква на родителя или на детето. Стори ми се логично да го направя универсален и всеки сам да си преценява как да го използва.

  8. И сега може би е време да задам и своите въпроси:

    1. Има ли конкретна причина метода children да е ограничен до списък/тюпъл и да не може да върне set?

    2. Въпреки че if x е по-кратко предполагам, че if x is not None е за предпочитане, или когато не очакваме да слагаме x = false и първото е добро?

    3. Ако ползваме само едно нещо от даден модул по-добре ли е да пишем from foo import bar или се препоръчва и тогава да пишем просто import foo?

  9. @Йордан - съгласен съм, освен това ти си постна тестовете и преди да се развие темата и още нямаше пояснение, просто евентуално след него можеше да ги обновиш, иначе си прав :smile_cat:

    @Симеон - и аз съм на такова мнение, иначе както Йордан каза при това положение трябваше метода да се казва has_direct_relation или нещо такова, понеже в буквален превод direct successor значи директен наслендик. Иначе след пояснението

    И все пак единствено Родител -> Наследник е директна?

    Очевидно

    все пак трябва да го направим по този начин, като и трябва да се обърне внимание, че посоката на стрелката е еднопосочна

    1. Щом се иска списък, можеш да направиш list(set(...)) според мен

    2. if x is not None звучи много по-добре според мен

    3. Естествено, че като ти трябва само нещо от даден модул ще импортнеш само него ... според мен е малоумно и тогава да пишеш import foo: from foo import bar е напълно коректно, и ако то ти върши работа, това е оптималното решение на твоя проблем :)

    1. Аз така и правя, въпросът ми беше просто има ли някаква конкретна причина да искат лист или тюпъл, а не сет

    2. и 3. - все пак реших да питам за всеки случай :smile: благодаря :smile:

    1. Според тестовете, които предостави Киро, разбрах че майка и баща трябва да се задават в конструктора, а не с методи.
    2. Какъв е този човек, който си сменя родителите? Т.е ако го направиш в конструктора да се задават родителите, както и трябва да бъде според тестовете, значи е абсолютно безсмислен метод, променящ майката или бащата. :)
  10. Примерно осиновено дете си сменя родителите. В реалността се случва. Затова питах дали трябва да го вземем под внимание. :) А иначе ако не трябва да се променят майката/бащата може би е хубаво примерно да ги именоваме __mоther__, __father__, за да бъде ясно това. :)

  11. @Христина: Решението как ще ги пазиш си е изцяло твое.

    Ако нещо не е изрично упоменато, че се иска или не(методи за достъп/промяна на родители например) нищо не ти пречи да ги направиш, ако смяташ, че това ще доведе до 'по-добро' решение :)

    Но погледни, все пак, PEP 8 за значението на бройката и позицията на подчертавките по конвенция ;)

  12. Както се каза по-нагоре , за Адам и Ева например не може да се зададе родител (отговарящ на нашите условия, тоест без Господ), от където следва, че по подразбиране нямаш родители (все пак може и да не се знае кои са му родители) или съответно може да се знае само за единият родител или и за двамата.

Трябва да сте влезли в системата, за да може да отговаряте на теми.