您不能直接在多個字符使用ord()
,它會出錯誤與錯誤 -
TypeError: ord() expected a character, but string of length 2 found
而且,這將是非常複雜與for
環和range()
要做到這一點,我會建議使用while
循環並檢查,直到開始字符變成結束字符。
做到這一點的一種方法是獲取最後一個元素,檢查它的Z
是否將其更改爲A
並在其之前增加元素。否則將其ord()
增量1
,然後使用chr()
獲取該字符。
例算法上字符的任意大小的作品 -
def resolve(item):
start = int(re.search(r'\d+', item[0]).group())
c = re.search(r'[a-zA-Z]+', item[0]).group()
d = re.search(r'[a-zA-Z]+', item[1]).group()
print(c, d)
s = c
yield s + str(start)
while s != d:
ls = len(s) - 1
news = ""
for i in range(ls,-1,-1):
c = s[i]
if c.upper() == 'Z':
news += 'A'
else:
news += chr(ord(c) + 1)
break
s = s[:i] + news[::-1]
yield s + str(start)
示例/演示 -
>>> def resolve(item):
... start = int(re.search(r'\d+', item[0]).group())
... c = re.search(r'[a-zA-Z]+', item[0]).group()
... d = re.search(r'[a-zA-Z]+', item[1]).group()
... print(c, d)
... s = c
... yield s + str(start)
... while s != d:
... ls = len(s) - 1
... news = ""
... for i in range(ls,-1,-1):
... c = s[i]
... if c.upper() == 'Z':
... news += 'A'
... else:
... news += chr(ord(c) + 1)
... break
... s = s[:i] + news[::-1]
... yield s + str(start)
...
>>>
>>> xx = resolve(['AX95', 'BD95'])
>>>
>>> print(list(xx))
AX BD
['AX95', 'AY95', 'AZ95', 'BA95', 'BB95', 'BC95', 'BD95']
拆分這個分解成更小的問題,而不是試圖解決它的所有功能於一體;一方面,您在當前代碼中有不必要的重複。 – jonrsharpe
你的意思是隻擴展左邊兩位'[A-Z]'指定的? – luoluo
是的。指定開始和結束範圍。 – PyAn