我正在尝试在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)
答案 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'