你应该考虑以下一些分成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。几乎可以肯定的是,使用这些新开发的lambda表达式和其他东西(或者任何Python称为它们)的方法会有更多的“Pythonic”方法,但是,由于代码是基本形式,因此我只是回答了需要进行的最小更改才能使其运行。噢,并警惕负数:-)
每个块中的前导零? – 2010-03-07 01:00:01