你應該考慮以下一些分成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