Орлин обнови решението на 07.03.2012 02:23 (преди почти 13 години)
+def prepare_meal(number):
+ return add_if(number, meal=prepare_spam(number, base=3, filler='spam'),
+ condition=lambda x: x % 5 == 0, addition='eggs')
+
+
+def prepare_spam(number, base=2, filler='spam'):
+ return ('{} '.format(filler) * power_in(number, base)).strip()
+
+
+def power_in(number, base=2):
+ for power in range(0, round(1 + log(number, base))):
+ if number % base ** (power + 1):
+ return power
+
+
+def add_if(number, meal='', condition=lambda x: True, addition='something'):
+ if not condition(number):
+ return meal
+ elif meal == '':
+ return addition
+ else:
+ return '{} and {}'.format(meal, addition)
+
+
+from math import log
+
Защо правиш тази проверка? if number == 0: return ''
заради отговора ти на въпроса "Какво трябва да става, ако подадем 0?"
В оригиналния вариант я нямаше,
в малко преработения - я имаше във сегашната power_in под формата:
if number % base or not number:
return 0
, за да не върти безкрайна рекурсия. Но тогава add_eggs(0) връщаше яйца и вместо '' при prepare_meal(0) получавах 'eggs'
поиграх си малко. Поне на мен ми се струва малко по-добре(помощните функции сякаш имат повече самостоятелен смисъл от преди) и разкарах въпросната проверка :)