Другое, более длинное, но, возможно, более читаемое и гибкое решение:
def toval(s):
"""Converts an 'azz' string into a number"""
v = 0
for c in s.lower():
v = v * 26 + ord(c) - ord('a')
return v
def tostr(v, minlen=0):
"""Converts a number into 'azz' string"""
s = ''
while v or len(s) < minlen:
s = chr(ord('a') + v % 26) + s
v /= 26
return s
def next(s, minlen=0):
return tostr(toval(s) + 1, minlen)
s = ""
for i in range(100):
s = next(s, 5)
print s
Вы переводите строку в число, где каждая буква представляет собой цифру в базе 26, увеличиваете число на единицу и конвертируете число обратно в строку. Таким образом, вы можете выполнять произвольную математику для значений, представленных в виде буквенных строк.
Параметр '' minlen '' определяет, сколько цифр будет иметь результат (так как 0 == a == aaaaa).