Код для задачи зацикливается, не могу понять почему
Всем доброго времени суток! Краткое условие задачи: на вход подается натуральное число, нужно посчитать его "разностный корень". То есть, если число находится в промежутке [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 шт):
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
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)
По мотивам решения @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])