Второ предизвикателство

  1. Ммм Кириле: (http://en.wikipedia.org/wiki/Happy_number) The 143 happy numbers up to 1,000 are:

    1, 7, 10, 13, 19, 23, 28, 31, 32, 44, 49, 68, 70, 79, 82, 86, 91, 94, 97, 100, 103, 109, 129, 130, 133, 139, 167, 176, 188, 190, 192, 193, 203, 208, 219, 226, 230, 236, 239, 262, 263, 280, 291, 293, 301, 302, 310, 313, 319, 320, 326, 329, 331, 338, 356, 362, 365, 367, 368, 376, 379, 383, 386, 391, 392, 397, 404, 409, 440, 446, 464, 469, 478, 487, 490, 496, 536, 556, 563, 565, 566, 608, 617, 622, 623, 632, 635, 637, 638, 644, 649, 653, 655, 656, 665, 671, 673, 680, 683, 694, 700, 709, 716, 736, 739, 748, 761, 763, 784, 790, 793, 802, 806, 818, 820, 833, 836, 847, 860, 863, 874, 881, 888, 899, 901, 904, 907, 910, 912, 913, 921, 923, 931, 932, 937, 940, 946, 964, 970, 973, 989, 998, 1000 
    

    Тоест 70, 91 май пак са щастливи :) Същото се отнася и за : 176, 190,192, 203, 208, 219, 226 :)

  2. Може ли да кажете някакво ограничение на тестовия вход. Да знаем дали има нужда да оптимизираме максимално решението, или просто едноредово решение за някои от функциите ще е достатъчно.

  3. Ами моите тестове не са с assert, просто защото не ми се занимава да проверявам поотделно :http://pastebin.com/Qs1ZwaW0

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

    Само да попитам, че чак сега забелязах, че срока за домашното е променен, за 24:00 вечерта ли ще са сроковете за домашни или за 17:00 последно ?

  4. @Снежана, точно това е условието за прекъсване на while-a, помисли си как може да влезеш в цикъл и какво е нужно, да го предотвратиш. Как ще следиш дали елементите се повтарят.

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

  5. Не, след известно време елементите получени по схемата започват да се повтарят. И т.к. формулата е абсолютно детерминирана следва, че ще продължим да виждаме същия набор от числа без да стигаме никога до 1. Подобно състояние може да се провери и да се реагира!

    ..-> 61 -> 37! -> 58 -> 89 -> 145 -> 42 -> 20 -> 4 -> 16 -> 37! -> 58 -> ..
    
  6. @Йончо, няма как да дам плюс за тези тестове, защото това не са тестове. Но без драми, след някоя и друга лекция ще ви покажем как да ги пишете и защо.

    Освен това, сериозно ли!? Ще ми отнеме време да изброя нещата, които са зле само в тези 4 реда.

        if len(test_vals)==len(result_vars):
                pass
        else:
                test_result=False
    
  7. Здравейте, бих искал да попитам може ли да преизползваме чужд код от предишни предизвикателства. Например ако в предишното предизвикателство, мой колега е написал помощна функция help_for_something(args), може ли да я използвам на готово.

    Благодаря предварително.

  8. И аз написах малко тестове с повечко щастливи и повечко щастливи прости числа. Както винаги, предишните валидни тестове (в случая тези на @Гергана) са включени преди моите с указание на източника.

    Същия документ заедно със списък на щастливите числа в интервала [1; 10.000] може да намерите в GitHub.

  9. Здравейте, бих искал да попитам може ли да преизползваме чужд код от предишни предизвикателства. Например ако в предишното предизвикателство, мой колега е написал помощна функция help_for_something(args), може ли да я използвам на готово.

    Разбира се, че можеш, след като кодът е станал публичен.

  10. No offense ама тези тестове с щастливи прости числа до 10000 ми идват малко в повече. (защо не са до 12000 или 15000?) По-скоро тествай различни сценарии отколкото един такъв с различни стойности. Според мен тестове с отрицателно число при is_happy и празен списък при happy_primes са по-удачни. Тест на happy_primes с просто нещастливо, просто щастливо, непросто нещастливо и непросто щастливо числа според мен е напълно достатъчен. :)

  11. @Станислав, съгласен съм. 10.000 го взех просто като пример за мен самия, защото намерих списък на щастливите числа до 10.000. Ако програмата ги намира правилно за всяко едно число от 1 до 10.000 поотделно, ще разпознава и за всяко друго число от този порядък, било то 12.000, 15.000 или друго. Тъй като happy_primes го викам в доста голям интервал, тези случаи би трябвало да се покриват по подразбиране.

    Разбира се, това са моите примерни тестове и никой не е задължен да ги ползва. Просто реших, че така и така съм си играл да ги намеря и форматирам, защо да не ги дам на разположение. Крайните случаи (отрицателно, празен списък) ги сметнах за достатъчно тривиални, че да не ги добавям специално, но си свободен да ги оформиш като тестове. :)

    @Димитър, не е грешка. 1 е щастливо, но не е просто. ;)

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

    while <израз>:
    

    Ако очакваш безкраен цикъл или неопределен(т.е. зависещ от външни фактори) тогава използваш while True.

    Всичко, което прилича на следното не е ОК:

    while True:
        ...
        if should_end():
            break
        ...
    

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