How can I increment a char?
In Python 2.x, just use the ord
and chr
functions:
>>> ord('c')99>>> ord('c') + 1100>>> chr(ord('c') + 1)'d'>>>
Python 3.x makes this more organized and interesting, due to its clear distinction between bytes and unicode. By default, a "string" is unicode, so the above works (ord
receives Unicode chars and chr
produces them).
But if you're interested in bytes (such as for processing some binary data stream), things are even simpler:
>>> bstr = bytes('abc', 'utf-8')>>> bstrb'abc'>>> bstr[0]97>>> bytes([97, 98, 99])b'abc'>>> bytes([bstr[0] + 1, 98, 99])b'bbc'
"bad enough not having a traditional for(;;) looper"?? What?
Are you trying to do
import stringfor c in string.lowercase: ...do something with c...
Or perhaps you're using string.uppercase
or string.letters
?
Python doesn't have for(;;)
because there are often better ways to do it. It also doesn't have character math because it's not necessary, either.
I came from PHP, where you can increment char (A to B, Z to AA, AA to AB etc.) using ++ operator. I made a simple function which does the same in Python. You can also change list of chars to whatever (lowercase, uppercase, etc.) is your need.
# Increment char (a -> b, az -> ba)def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'): # Unique and sort chlist = ''.join(sorted(set(str(chlist)))) chlen = len(chlist) if not chlen: return '' text = str(text) # Replace all chars but chlist text = re.sub('[^' + chlist + ']', '', text) if not len(text): return chlist[0] # Increment inc = '' over = False for i in range(1, len(text)+1): lchar = text[-i] pos = chlist.find(lchar) + 1 if pos < chlen: inc = chlist[pos] + inc over = False break else: inc = chlist[0] + inc over = True if over: inc += chlist[0] result = text[0:-len(inc)] + inc return result