Тъй като лично на мен ми е много по-лесно да си проверявам с тестове, написах няколко за предизвикателството.
Второ предизвикателство
Проблемът е, че някои от тестовете са ти грешни.
- От 63 до 100 има 8 щастливи числа: 68, 70, 79, 82, 86, 91, 94, 97, а не 3
- От 135 до 250 има 7: 139, 167, 188, 193, 226, 236, 239, а не 3
А те нали трябва да са и прости числа :) В смисъл специално за 63, го взех и от самите примери написани в предизвикателството :)
Ммм Кириле: (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 :)
Става въпрос за
happy_primes
където се изисква числата да са щастливи и прости едновременно. Тестовете са правилни, просто от 135 до 250 резултатът трябва да включва 193.@Станислав Гатев Мерси, редактирах си го =)
Упс, моя грешка. Наистина се гледат щастливите прости числа.
Може ли да кажете някакво ограничение на тестовия вход. Да знаем дали има нужда да оптимизираме максимално решението, или просто едноредово решение за някои от функциите ще е достатъчно.
Ами моите тестове не са с assert, просто защото не ми се занимава да проверявам поотделно :http://pastebin.com/Qs1ZwaW0
Да, знам че така не се прави, но чак сега видях предизвикателството и генерирах тестовете набързо.
Само да попитам, че чак сега забелязах, че срока за домашното е променен, за 24:00 вечерта ли ще са сроковете за домашни или за 17:00 последно ?
Условието 'или безкрайно ще се върти в цикъл, който не съдържа 1' не предполага ли, че при вход с не-щастливо число, функцията гърми ?
Използвах това което прочетох в Wikipedia за да си реша проблема.
" If n is not happy, then its sequence does not go to 1. What happens instead is that it ends up in the cycle
4, 16, 37, 58, 89, 145, 42, 20, 4, ...
"
Има начини да се предотврати безкраен цикъл, помислете ;)
@Снежана, точно това е условието за прекъсване на while-a, помисли си как може да влезеш в цикъл и какво е нужно, да го предотвратиш. Как ще следиш дали елементите се повтарят.
П.П. Предварително се извинявам на колежката за двусмисления отговор, чак сега го видях, пък и се надявам да няма много хора с мръсно подсъзнание.
Не, след известно време елементите получени по схемата започват да се повтарят. И т.к. формулата е абсолютно детерминирана следва, че ще продължим да виждаме същия набор от числа без да стигаме никога до 1. Подобно състояние може да се провери и да се реагира!
..-> 61 -> 37! -> 58 -> 89 -> 145 -> 42 -> 20 -> 4 -> 16 -> 37! -> 58 -> ..
за триене
@Йончо, няма как да дам плюс за тези тестове, защото това не са тестове. Но без драми, след някоя и друга лекция ще ви покажем как да ги пишете и защо.
Освен това, сериозно ли!? Ще ми отнеме време да изброя нещата, които са зле само в тези 4 реда.
if len(test_vals)==len(result_vars): pass else: test_result=False
Искам да попитам кое се брои за преписване, защото веднъж като прочете човек кода за happy_number е малко трудно да се сети за друго решение (http://en.wikipedia.org/wiki/Happy_number). Може ли да се ползва решението без SQUARE функцията?
Здравейте, бих искал да попитам може ли да преизползваме чужд код от предишни предизвикателства. Например ако в предишното предизвикателство, мой колега е написал помощна функция help_for_something(args), може ли да я използвам на готово.
Благодаря предварително.
И аз написах малко тестове с повечко щастливи и повечко щастливи прости числа. Както винаги, предишните валидни тестове (в случая тези на @Гергана) са включени преди моите с указание на източника.
Същия документ заедно със списък на щастливите числа в интервала [1; 10.000] може да намерите в GitHub.
Здравейте, бих искал да попитам може ли да преизползваме чужд код от предишни предизвикателства. Например ако в предишното предизвикателство, мой колега е написал помощна функция help_for_something(args), може ли да я използвам на готово.
Разбира се, че можеш, след като кодът е станал публичен.
No offense ама тези тестове с щастливи прости числа до 10000 ми идват малко в повече. (защо не са до 12000 или 15000?) По-скоро тествай различни сценарии отколкото един такъв с различни стойности. Според мен тестове с отрицателно число при
is_happy
и празен списък приhappy_primes
са по-удачни. Тест наhappy_primes
с просто нещастливо, просто щастливо, непросто нещастливо и непросто щастливо числа според мен е напълно достатъчен. :)Сигурно всички са видели, ама аз да си кажа :D Има грешка при отговорите на примерните тестове -> 1 е щастливо
In [5]: happy_primes(range(25))
Out[5]: [7, 13, 19, 23]
трябва да е
Out[5]: [1, 7, 13, 19, 23]1 не е просто число. Няма грешка.
@Станислав, съгласен съм. 10.000 го взех просто като пример за мен самия, защото намерих списък на щастливите числа до 10.000. Ако програмата ги намира правилно за всяко едно число от 1 до 10.000 поотделно, ще разпознава и за всяко друго число от този порядък, било то 12.000, 15.000 или друго. Тъй като
happy_primes
го викам в доста голям интервал, тези случаи би трябвало да се покриват по подразбиране.Разбира се, това са моите примерни тестове и никой не е задължен да ги ползва. Просто реших, че така и така съм си играл да ги намеря и форматирам, защо да не ги дам на разположение. Крайните случаи (отрицателно, празен списък) ги сметнах за достатъчно тривиални, че да не ги добавям специално, но си свободен да ги оформиш като тестове. :)
@Димитър, не е грешка. 1 е щастливо, но не е просто. ;)
Оу, sh*t, да, да, нещо се омотах. Добре, че го написах тоя коментар, че иначе щях да си остана с грешната задача :D
Мерси :)Предполагам, че няма да се подават отрицателни числа?
Към проверките за is_happy си добавете и проверка за 0, защото е лесна грешка за пропускане и може да ви създаде проблем в happy_primes
Искам да попитам, проблем ли ще е ако в кода имаме конструкцията:
while True:
По-точно, лош стил на програмиране/не по конвеция/... ли е или може да се ползва ?
ако можеш да определиш предварително ситуацията, в която ще прекратиш изпълнението на цикала почти със сигурност е по-добра идея да я опишеш в някакъв израз.
while <израз>:
Ако очакваш безкраен цикъл или неопределен(т.е. зависещ от външни фактори) тогава използваш
while True
.Всичко, което прилича на следното не е ОК:
while True: ... if should_end(): break ...
Ясно, мерси.
Трябва да сте влезли в системата, за да може да отговаряте на теми.