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
if not already_added: # carry still left?
new_sku += 'A'
return new_sku[::-1]
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)
怎么样?在
样品运行:-
^{pr2}$如果您处理的是bijective numeration,那么您可能有(或应该有)函数来转换成/来自双射表示;只需将其转换为一个整数,增加它,然后再转换回原来的值就容易得多了:
你得想想“AAA”、“ZZZ”。。。作为您操作的值的表示。在
首先,解析值:
然后,增加价值:
^{pr2}$编辑
最终值由以下公式得出:
缺少零的表示要求传递给divmod的值在每一个回合递减,我还没有找到一种处理列表理解的方法。在
编辑
可以使用},而不是}
string.ascii_uppercase.index()
和{ord()
和{相关问题 更多 >
编程相关推荐