Първа задача

  1. Я тествайте едно редовото решение със: L = [1,2,3,[[]],[[]],[]], че от одеве се чудя как да го преборя :D

    Публикувано преди
  2. id-то обикновено е много голямо, щото нали е адрес, така че там има няк'ва логика is да е False... виж обаче т'ва със str е мистерия... str от стринг сравнен с is със str от същия стринг е True, обаче за list-ове не става...

    >>> a = 'abc'
    >>> b = 'abc'
    >>> str(a) == str(b)
    True
    >>> str(a) is str(b)
    True
    >>> c = [1,2,3]
    >>> d = [1,2,3]
    >>> str(c) is str(d)
    False
    >>>str(c) is str(c)
    False

    @Койков: Май трябва да дава 6.

    Публикувано преди
  3. Относно функцията str:

    "If the argument is a string, the return value is the same object."

    затова str(String) is str(String) e True

    А за id() оператора is не сравнява стойностите на дадените обекти а тяхното място във паметта, а когато викнеш функция като id() тя се изпълнява два пъти и съответно всяка връща различен обект във паметта, макар и те да са равни по стойност.

    @Евгени да 6 дава а трябва да е 5 :(

    Публикувано преди
  4. 6 си е много добре според мен...

    >>> L = [1,2,3,[[]],[[]],[]]
    >>> L[3] is L[4]
    False

    Иначе

    >>> a = [[]]
    >>> l = [a, a]
    >>> l[0] is l[1]
    True

    Малко е връткаво на моменти за ориентиране май кое е същото като нещо друго, особено предвид екстрата с малките числа и къси стрингове.

    Публикувано преди
  5. Това което ме притеснява мен е:

    id([]) == id([]) - OK

    id([[]]) == id([[]]) - NOT OK

    колкото и пъти да я викаш за [[]] все дава различно id

    for x in range(100):

    print(id[[]])
    

    а със скромните ми разбирания те са едно и също нещо и не трябва да се вземат като различни в бройката...

    //off Как го правиш формата на кода във форума ?

    Публикувано преди
  6. @Георги, аз лично използвам <pre>код</pre>. Може и <code>код</code>, но мисля, че <pre> е по-добрият вариант, защото запазва всичко, включително и празните редове, интервалите и т.н.

    А ако не ме мързи чак толкоз, може да се ползва Gist или Pastie (лично аз се регнах в Gist). Дори според мен това е по-добрият вариант, отколкото с таговете. Ама мързел...

    А и за жалост ембедването на кода нещо не става. Явно нещо не правя както хората. Ето какво ми дава Gist-а:


    <script src="https://gist.github.com/raw/861242/b849d337728a213f2c23f9b6df3d24ac4a856e78/gistfile1.py">;


    Вероятно нещо липсва, защото единственото нещо, което ми дава е празно място.


    Но съм почти сигурен, че другите така го правят!

    Публикувано преди
  7. Така... подозирам, че като цяло силно простото заключение, незнайно как ме осени... Разбира се следващите разсъждения са на границата на худежественото, така че не ги приемайте изцяло ан доверие. help(str) казва: Create a new string object from the given encoded string. Тоест, с изключение на стринговете, за които str връща просто същия обект, дори резултатът да е къс изрично се създава нов обект. Т.е. стига a да не е string, всяко извикване на str(a) винаги ще връща нов обект.

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

    Публикувано преди
  9. Изненадахте ме. Следния код ме шокира:

    id([]) == id([]) # true

    Зарових се тук и какво да открия -- Python прави оптимизации с празните списъци (търсете променливата free_list). Всеки път, когато му остане празен списък, който може да събере, той го поставя в един масив, вместо да го трие. По-натам, когато на някой му потрябва нов масив, Python го взема от там.

    Това е и причината id([]) == id([]) да е истина. Първо се оценява извикването на една от двете функции. Python открива, че той не се ползва повече и го поставя за съхранение. След това се оценява другото извикване на id, за което се създава нов списък. Вместо да се създаде нов списък, обаче, се преизползва стария. Ерго, и двете извиквания връщат едно и също число.

    Пробвайте следното:

    x = []
    y = []
    print(id(x) == id(y))

    П.П.: Това няма отношение към решението на задачата, но ще обясни странни резултати от експериментиране.

    Публикувано преди
  10. @Георги:

    unique_objects([1, 2, 3, [[]], [[]], []]) == 6
    Публикувано преди
  11. И още една вметка: Там където казах "прави оптимизация с празните списъци", чете "всички списъци". В момента, в който едип списък е свободен за изчистване, Python го изпразва и в последствие го преизползва. Например, вижте какво извежда.

    (id([[]]), id([[]]), id([[]]))

    Човек научава нови неща всеки ден.

    Публикувано преди
  12. Доста интересно. Но как го рънна в IDE-то няколко пъти стойностите са различни. (А и средната стойност не е като лявата и дясната.)

    Така че не знам доколко си прав. Не би ли трябвало при всеки път да са едни и същи стойностите, а не да ги трие?

    Нещо, което е още по-странно е, че не винаги дава стойности - обикновено дава няколко пъти едно и също и после... Хоп!... сменя адресите им (или по-скоро генерира нови). Другото още по-любопитно нещо е, че понякога се връща към по-стари версии. Но винаги групите са едни и същи! Което е най-любопитно.

    Някой да има идея защо е така?

    P.S. За да е по-ясно, пробвайте:

    (id([[]]), id([[]]), id([[]]), id([[]]), id([[]]), id([[]]), id([[]]))

    P.P.S. Ще продължа да не задавам въпроси в тази тема, които нямат нищо общо със задачата

    Публикувано преди
  13. Без да съм търсил информация (а ще го направя, защото ми е интересно), ще предположа, че garbage collector-ът на Python не работи "непрекъснато" (той и не би могъл ;), нито пък при всяко унищожаване на обект, както при някои други езици (сигурно е, но е малко неефективно), а... някак "от време на време" :) Това би обяснило и защо от време на време стойностите са еднакви (GC е минал между създаването на първия и на втория списък и вторият е създаден точно на мястото, където преди това е бил първият), и защо не винаги са (GC не минава непрекъснато и от време на време някой списък се създава, преди предишният да е бил освободен, така че отива на нов адрес).

    Публикувано преди
  14. Вече можете да предавате решения.

    Пишете ми, ако имате проблем.

    Публикувано преди
  15. Аз имам лек проблем при paste-ване на решението - когато редът е по-дълъг и не може да се побере на 1 ред в полето го слага на нов ред, което прецаква индентацията?(поне визуално при нас)

    Публикувано преди
  16. След като пуснеш решението, върни се на страницата със "задачи" и избери пак "моето решение" на първата (за да се отървеш с абсолютна сигурност от POST-а при пускането); после дай едно View source и виж как изглежда всъщност това, което си изпратил. Ако има &# 000A; или други видове нови редове само там, където искаш да има, няма страшно, всичко ще работи.

    Работата е там, че браузърът ти може да оразмери textbox-а както му скимне и след това да ти покаже твоя код с line wrapping, като този line wrapping всъщност го няма в самото съдържание на textarea-та.

    Ако обаче и след View source изглежда, че браузърът ти наистина е изпонапъхал истински нови редове по средата на твоите редове, тогава вече нещата наистина не са добре и или ще се наложи да си препишеш кода така, че да има по-къси редове (което, според някои хора, включая мен, не е толкова лошо, но това е съвсем, ама съвсем друга тема, няма да се отплесваме сега :), или наистина да чакаш хората от екипа да направят нещо по въпроса... примерно textarea columns=blah, знам ли.

    Публикувано преди
  17. Предният коментар определено дава по-разумна идея, този ако има начин може да бъде затрит, благодаря :)

    С'я като си го казал го загледах... и при мен се получава. Има един много прост начин да се подсигуриш, просто си копирай текста обратно от формата и си го пейстни в редактора. Силно се съмнявам, че при някого може да се появят нови редове там, където не ги е сложил той самия, било то волно или неволно. :)

    Публикувано преди
  18. Здравейте! Искам да попитам дали аз бях разбрал погрешно, или крайният срок за предаване на първата задача щеше да е до 17 часа днес, тъй като сега понечих да си кача решението, а срокът бил отминал?

    Публикувано преди
  19. @Филип Атанасов До 17 часа беше, сменили са го последния момент без предупреждение. И аз не съм качила моето решение. Очаквах малко по-сериозно отношение от преподавателите.

    Публикувано преди
  20. @Филип Атанасов, @Нели Хатева, явно наистина са сменили срока в последния момент и аз добре си спомням, че беше до 17:00. Аз бях съобразил графика си с статия краен срок, задачите ми са готови, но сега не мога да ги предам. Не смятам, че това е сереозно отношение от Ваша страна... Аз лично съм на работа в момента, и исках да си прегледам решенията още един път преди да ги предам... Кажете какво правим сега, предполагам няма какво да се направи?

    Публикувано преди
  21. @Филип Атанасов

    Здрасти. Извинявай, особености на часовите зони са ни ударили лошо. Оправих го, даже сложих два часа отгоре.

    @Нели, @Борислав

    Обикновено сме изключително коректни, но грешки стават. Тогава имаме навика да се извиняваме и да се реваншираме по някакъв начин. За сметка на това, никак не обичаме да ни мрънкат.

    Публикувано преди
  22. На второ четене, разширих срока до края на деня, това би трябвало да ви е достатъчно на всички да предадете.

    Публикувано преди

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