如何在Python中递增数字字符串 '0000000001'?
我有一个函数叫做 getNextSeqNo()
。我希望每次调用这个函数的时候,它能把一个数字字符串加一,比如从 0000000000
变成 0000000001
,然后再变成 0000000002
。我该怎么做呢?
我已经这样写了:
def __init__(self) :
self.seq = '0000000000'
def getNextSeqNo(self) :
self.seq = str(int(self.seq) +1)
return(self.seq)
但是我得到的输出是 1,而不是 0000000001
。
7 个回答
1
你应该把当前的数字值存储为一个 int
类型,而不是字符串,然后根据需要动态生成字符串。
>>> i = 0
>>> "{0:010d}".format(i)
'0000000000'
>>> i += 1
>>> "{0:010d}".format(i)
'0000000001'
把数字值存成字符串形式只是因为你想这样展示(或者在某些需要字符串的地方使用),这其实是个坏主意。
这样的话,getNextSeqNo
就变成这样:
def getNextSeqNo(self):
ret = "{0:010d}".format(self._seq_i)
self._seq_i += 1
return ret
3
这里有很多答案。再给你一个:
import string
seq = 1
string.zfill(seq, 10)
# '0000000001'
# works with strings too:
string.zfill('00001', 10)
# '0000000001'
或者
seq = 1
str(seq).zfill(10)
# '0000000001'
注意,string.zfill
这个函数直接接受一个整数作为参数。
4
用 format()
来格式化你的数字:
self.seq = format(int(self.seq) + 1, '010d')
更好的方法是,不要存储字符串,而是存储一个整数,然后返回格式化后的版本:
def __init__(self):
self.seq = 0
def getNextSeqNo(self):
self.seq += 1
return format(self.seq, '010d')
使用 010d
格式化会把你的整数输出为一个长度为10的字符串,前面用0填充:
>>> format(0, '010d')
'0000000000'
>>> format(42, '010d')
'0000000042'
6
最快最简单的方法,虽然不一定是最清晰的:
str(int('9' + self.seq) + 1)[1:]
这个方法的原理是,在转换成整数之前,先在前面加一个数字,这样可以保留所有的前导零。然后在转换回字符串后,再把那个加上的数字去掉。这个方法的好处是,你不需要提前知道需要多少位数字。
9
你可以把这个字符串转换成一个整数,然后用类似下面的代码:
self.seq = '%010d' % (int(self.seq) + 1)
return self.seq
如果你不需要 self.seq
是一个字符串的话,你可以这样做:
def __init__(self) :
self.seq = 0
def getNextSeqNo(self) :
self.seq += 1
return '%010d' % self.seq