Код для задачи зацикливается, не могу понять почему

Всем доброго времени суток! Краткое условие задачи: на вход подается натуральное число, нужно посчитать его "разностный корень". То есть, если число находится в промежутке [0;9], то корень равен самому числу. Если это число 2693, например, то корень считается как модуль разности соседних цифр. |2-6||6-9||9-3|= 436, поскольку число 436 еще не однозначное, нужно проделать это еще раз. |4-3||3-6|=13 и еще раз |1-3|=2. 2 это окончательный ответ. Написал код, но он зацикливается

n = input()
s=''
if int(n)>=0 and int(n)<=9:
    print(n)
else:
    while int(n)>9:
        for i in range(len(n)-1):
            s+= str(abs(int(n[i])-int(n[i+1])))
        n = n.replace(n,s)
    print(n)

Буду благодарен за помощь!


Ответы (3 шт):

Автор решения: handowl
n = input()
if int(n)>=0 and int(n)<=9:
    print(n)
else:
    while int(n)>9:
        s = ''
        for i in range(len(n)-1):
            s+= str(abs(int(n[i])-int(n[i+1])))
        n = s
    print(n.strip('0'))

Надо обнулять s

→ Ссылка
Автор решения: GrAnd

s надо очищать перед каждым подходом, т.е. в начале цикла while.
В конце цикла вместо невнятного replace сделать простое присвоение.
Ну и if с обвязкой там вообще лишний.

Да и вообще:

n = input()
while int(n)>9:
    n = n.lstrip("0")
    n = "".join(str(abs(int(a)-int(b))) for a,b in zip(n, n[1:]))
print(n)
→ Ссылка
Автор решения: Lecron

По мотивам решения @GrAnd, без постоянного преобразования строка-число-строка

n = input()
n = [int(d) for d in n]
while len(n) > 1:
    if n[0] == 0: n = n[1:]
    n = [abs(a-b) for a,b in zip(n, n[1:])]
print(n[0])
→ Ссылка