我要实现的是一个将字符串递增一个字符的函数,例如:
'AAA' + 1 = 'AAB'
'AAZ' + 1 = 'ABA'
'ZZZ' + 1 = 'AAAA'
我已经为前两种情况实现了功能,但是对于第三种情况我想不出任何解决方案。
这是我的代码:
def new_sku(s):
s = s[::-1]
already_added = False
new_sku = str()
for i in s:
if not already_added:
if (i < 'Z'):
already_added = True
new_sku += chr((ord(i)+1)%65%26 + 65)
else:
new_sku += i
return new_sku[::-1]
有什么建议吗?
最佳答案
如果你正在处理 bijective numeration ,那么你可能有(或应该有)函数来转换成双射表示或从双射表示转换;只需转换为整数、增加它,然后再转换回去,就会容易得多:
def from_bijective(s, digits=string.ascii_uppercase):
return sum(len(digits) ** i * (digits.index(c) + 1)
for i, c in enumerate(reversed(s)))
def to_bijective(n, digits=string.ascii_uppercase):
result = []
while n > 0:
n, mod = divmod(n - 1, len(digits))
result += digits[mod]
return ''.join(reversed(result))
def new_sku(s):
return to_bijective(from_bijective(s) + 1)
关于python - 添加字符在前面添加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17965480/