Форум сайта python.su
Ну и для полноты картины:
def calc_recursion(number, res = 0):
if not number: return res
else: return calc_recursion(number // 10, res + number % 10)
Офлайн
Варианты с // и % начинают сильно отставать, как только количество цифр в числе увеличивается
Офлайн
IsemЕсть такое, но только при варианте с ord, а не с int и знаков должно быть больше 10 (по моим экспериментам).
Варианты с // и % начинают сильно отставать, как только количество цифр в числе увеличивается
Офлайн
Ну цифры говорят сами за себя:
def map_int(n):
return sum(map(int, str(n)))
def map_ord(n):
s = str(n)
return sum(map(ord, s)) - len(s)*ord('0')
def calc_numbers1(number):
res = 0
divisor = 1
while divisor < number:
res += (number % (divisor*10)) // (divisor)
divisor *= 10
return res
def calc_numbers2(number):
res = 0
while number:
res += number % 10
number //= 10
return res
for f in map_int,map_ord,calc_numbers1,calc_numbers2:
n = 123456789
start = time()
for i in range(100000):
s = f(n)
print( "time spent for {0} = {1} sec".format( f.__name__, time() - start ))
Отредактировано (Сен. 22, 2010 16:22:17)
Офлайн
Посоветуйте, как сделать такое:
Вывести все целые числа от 1 до 100, которые делятся на сумму своих цифр без остатка.
Пишу так, а он ругается :(
n=list(range(10))
print sum(map(int, str(n))),
Отредактировано (Сен. 22, 2010 17:31:36)
Офлайн
breidos,
1. str(n) — это по вашему что?
2. Для начала составьте алгоритм действий. Словами или диаграммами на бумажке, не важно, главное четко понимать КАК вы собираетесь выполнить задачу.
Кстати, может я чего не знаю, но зачем писать n=list(range(10))?
Или в какой-то версии питона xrange заменили на range и теперь range не возвращает list?
P.S. И впредь, насколько я понял правила форума, для новой задачи начинайте новую тему.
Отредактировано (Сен. 22, 2010 17:41:18)
Офлайн
maxwellу него код для второго питона, там ещё list
Или в какой-то версии питона xrange заменили на range
>>> xrange
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined
>>> range(10)
range(0, 10)
>>>
Отредактировано (Сен. 23, 2010 03:48:17)
Офлайн
breidosВсем, конечно, итак понятно как ОН ругается, но не мешало бы привести текст ошибки и ваше мнение почему так произошло.
Пишу так, а он ругается
breidosСудя по этому, вам не мешало бы для начала книжку по питону для начинающих почитать – узнать, что такое str, int, map, sum и т.д. А то из предыдущих примеров выдернули кусок кода наобум и думаете он будет работать. Чтобы вам помогли, вы должны сами искать решение.
print sum(map(int, str(n))),
Офлайн