reverseNumber
должен возвращать int
и принимать положительные и отрицательные числа.
Самый простой способ исправить код без обработки отрицательных чисел:
def reverseNumber(n):
if n == 0:
return 0
lastDigit = n%10
n //= 10
return int(str(lastDigit) + str(reverseNumber(n))) if n else lastDigit
for test in (0, 123, 120):
print(test, reverseNumber(test))
Печать :
0 0
123 321
120 21
Да! Обратное значение 120 равно 21, когда вы имеете дело с int
типами, а не с str
типами.
Другая реализация, которая обрабатывает отрицательные числа, использует совершенно другой подход:
У меня есть разбить это на две функции. Функция rev
является функцией генератора, которая предполагает, что она вызывается с положительным, неотрицательным числом и будет рекурсивно выдавать последовательные цифры числа в обратном порядке. reverseNumber
объединит эти числа, преобразует в int
, откорректирует знак и вернет окончательный результат.
def reverseNumber(n):
def rev(n):
assert n >= 0
yield str(n % 10)
n //= 10
if n != 0:
yield from rev(n)
if n == 0: return 0 # special case
x = int(''.join(rev(abs(n))))
return x if n >= 0 else -x
tests = [0, 132, -132, 120]
for test in tests:
print(test, reverseNumber(test))
Печать:
0 0
132 231
-132 -231
120 21