你应该把下面的数字分成 3 个大小的块:
1000005 -> 100 000 5
你有两个问题。首先,如果你把这些 整数 重新组合在一起,你会得到:
100 0 5 -> 100005
(即中间的一个是 0,而不是 000)这不是你开始的。第二个问题是您不确定最后一部分的大小。
我会确保您首先使用长度是部分大小的精确倍数的字符串,以便您知道准确每个部分应该有多大:
def split_number (num, part_size):
string = str(num)
string_size = len(string)
while string_size % part_size != 0:
string = "0%s"%(string)
string_size = string_size + 1
arr = []
pointer = 0
while pointer < string_size:
e = pointer + part_size
arr.append(int(string[pointer:e]))
pointer += part_size
return arr
其次,确保将各部分放回原处,并为每个部分设置正确的长度(当然要确保不要在第一部分放置前导零):
def join_number(arr, part_size):
fmt_str = "%%s%%0%dd"%(part_size)
num = arr[0]
for x in arr[1:]:
num = fmt_str%(num,int(x))
return int(num)
将所有这些结合在一起,以下完整的程序:
#!/usr/bin/python
def split_number (num, part_size):
string = str(num)
string_size = len(string)
while string_size % part_size != 0:
string = "0%s"%(string)
string_size = string_size + 1
arr = []
pointer = 0
while pointer < string_size:
e = pointer + part_size
arr.append(int(string[pointer:e]))
pointer += part_size
return arr
def join_number(arr, part_size):
fmt_str = "%%s%%0%dd"%(part_size)
num = arr[0]
for x in arr[1:]:
num = fmt_str%(num,int(x))
return int(num)
x = 1000005
print x
y = split_number(x,3)
print y
z = join_number(y,3)
print z
产生输出:
1000005
[1, 0, 5]
1000005
这表明它会回到一起。
请记住,我已经有几年没有使用 Python 了。几乎可以肯定有一种更“Pythonic”的方式来处理那些新奇的 lambda 和事物(或 Python 所称的任何东西),但是,由于您的代码是基本形式,我只是回答了使其工作所需的最小更改.哦,是的,小心负数:-)