我有一个函数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
。
答案 0 :(得分:6)
您可以将字符串转换为int并使用类似
的内容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
答案 1 :(得分:5)
最快最简单,但肯定不是最清楚:
str(int('9' + self.seq) + 1)[1:]
它的工作原理是在转换为整数之前添加一个前导数字,以保留所有前导零,然后在转换回字符串后剥离该前导数字。它的优点是不需要事先知道需要多少位数。
答案 2 :(得分:3)
使用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'
答案 3 :(得分:1)
您可以使用字符串格式化来执行此操作:
new_s = '{:0>{}}'.format(str(int(s)+1),len(s))
print new_s
答案 4 :(得分:1)
答案很多。这是另一个:
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
如何直接将int作为参数。
答案 5 :(得分:0)
您应该将当前数值存储为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
答案 6 :(得分:0)
最好的办法是,不要将序列保存在字符串中,而是在需要时格式化序列号:
class SeqNo:
def __init__(self):
self.seq = 0
def next(self):
self.seq += 1
return '%10d' % self.seq