2

我正在尝试在 Python 中创建一个字母数字序列号,该序列号受以下规则约束:

3 位字母数字系列 允许值 1-9(不包括零)和 AZ(所有大写字母,不包括 I 和 O) 代码在得到输入数字后应该能够给出下一个数字。

例如:如果输入数字 11D,那么输出数字应该是 11E,如果输入数字是 119,那么输出应该是 12A 而不是 120。请让我知道这个描述是否足以解释我的要求。

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

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)
4

1 回答 1

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'
于 2013-04-09T15:21:25.877 回答