Python에서 다음 문자열을 영숫자 순서로 얻으려면 어떻게해야합니까?
문제
문자열이 주어지면 영숫자 순서 (또는 알파벳 순서)에서 다음으로 돌아 오는 간단한 프로그램이 필요합니다.
f("aaa")="aab"
f("aaZ")="aba"
등등.
이미 모듈 중 하나에 기능이 있습니까?
해결책
나는 이것을 할 내장 기능이 있다고 생각하지 않습니다. 다음은 작동해야합니다.
def next_string(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)
설명 : 당신은 마지막 캐릭터를 찾지 못합니다. z
, 그것을 증가시키고, 그 뒤에 모든 문자를 교체하십시오. a
'에스. 전체 문자열 인 경우 z
S, 그 다음 모든 문자열을 반환하십시오 a
더 길다.
다른 팁
답은 답입니다 이것을 Perl에서 Python으로 어떻게 번역 하시겠습니까? 충분한? 당신이 요구하는 것을 100%가 아니라 가까이 ...
다르고 길지만 더 읽기 쉽고 유연한 솔루션 :
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 이후).
Python은 Ruby가 가진 것을 가지고 있지 않다는 것을 짜증납니다. String#next
여기에 알파 수문 문자열을 다루는 뻔뻔스러운 솔루션이 있습니다.
def next_string(s):
a1 = range(65, 91) # capital letters
a2 = range(97, 123) # letters
a3 = range(48, 58) # numbers
char = ord(s[-1])
for a in [a1, a2, a3]:
if char in a:
if char + 1 in a:
return s[:-1] + chr(char + 1)
else:
ns = next_string(s[:-1]) if s[:-1] else chr(a[0])
return ns + chr(a[0])
print next_string('abc') # abd
print next_string('123') # 124
print next_string('ABC') # ABD
# all together now
print next_string('a0') # a1
print next_string('1a') # 1b
print next_string('9A') # 9B
# with carry-over
print next_string('9') # 00
print next_string('z') # aa
print next_string('Z') # AA
# cascading carry-over
print next_string('a9') # b0
print next_string('0z') # 1a
print next_string('Z9') # AA0
print next_string('199') # 200
print next_string('azz') # baa
print next_string('Zz9') # AAa0
print next_string('$a') # $b
print next_string('$_') # None... fix it yourself
별로. 나에게 작용합니다.
제휴하지 않습니다 StackOverflow