Python:具有一些规则的字母数字序列号

时间:2013-04-09 14:50:53

标签: python

我正在尝试在Python中创建一个字母数字序列号,序列号由以下规则管理:

3位字母数字系列 允许值1-9(不包括零)和A-Z(所有大写字母排除I和O) 在获得输入数字后,代码应该能够提供下一个数字。

例如:如果输入数字11D则输出数字应为11E,如果输入数字为119,则输出应为12A而不是120.如果此描述足以说明我的要求,请告诉我。< / p>

我目前正在使用下面提到的代码:

def next_string(self, s):
    strip_zs = s.rstrip('z')
    if strip_zs:
        return strip_zs[:-1] + chr(ord(strip_zs[-1]) + 1) + 'a' * (len(s) - len(strip_zs))
    else:
        return 'a' * (len(s) + 1)

1 个答案:

答案 0 :(得分:0)

您可以使用递归执行此任务:

def next_string(s):
    if len(s) == 0:
        return '1'
    head = s[0:-1]
    tail = s[-1]
    if tail == 'Z':
        return next_string(head) + '1'
    if tail == '9':
        return head+'A'
    if tail == 'H':
        return head+'J'
    if tail == 'N':
        return head+'P'
    return head + chr(ord(tail)+1)

这可能不是最pythonic的代码,但这显示了如何思考它。

>>> next_string('11A')
'11B'
>>> next_string('11A')
'11B'
>>> next_string('11Z')
'121'
>>> next_string('119')
'11A'
>>> next_string('1')
'2'
>>> next_string('ZZ')
'111'
>>> next_string('ZZ1')
'ZZ2'
>>> next_string('ZZ9')
'ZZA'
>>> next_string('ZZH')
'ZZJ'