我写了一个代码来反转 Python 中的给定整数。预期的输入和输出如下:
(1)
输入:123
输出:321
(2)
输入:-123
输出:-321
def reverse(num):
result = 0
repeat = len(str(num))
original_num = num
if original_num < 0:
num *= -1
else:
pass
for i in range(repeat):
mod = num % 10
num //= 10
result = result * 10 + mod
if original_num < 0:
result *= -1
return result
Run Code Online (Sandbox Code Playgroud)
当输入为正时,输出与我预期的一样。但是当输入为负时,结果在输出的末尾添加了一个意想不到的0,所以当输入为 时-123,输出为-3210。
有人能告诉我这个错误是从哪里来的吗?
repeat = len(str(num))您在更改负数的符号之前已设置,如果 num 为负数,则应将其递减。在循环的最后一次迭代中for(如果 num 为负数),mod将始终为零,因此,如果 num 为负数,您将始终附加零。
如果我要解决这个问题,那么我可能会这样写:
def reverse(num):
sign = num >= 0 # True if num is +ve. False if num is -ve
num = abs(num)
repeat = len(str(num))
result = 0
for i in range(repeat):
mod = num % 10
num //= 10
result = result * 10 + mod
return result if sign else -result
print(reverse(123))
print(reverse(-123))
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以解决这个问题,它更紧凑:
def revdigits(num):
reverseStr = lambda s: "".join(reversed(s))
digits = reverseStr(str(num)) if num >= 0 else ("-" + reverseStr(str(num)[1:]))
return int(digits)
num = 123
print(revdigits(num))
print(revdigits(-num))
Run Code Online (Sandbox Code Playgroud)
输出:
321
-321
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
400 次 |
| 最近记录: |