Python: Jak mogę zwiększyć znak?

Jestem nowy w Pythonie, pochodzącym z Javy i C. Jak mogę zwiększyć znak? W Javie lub C, znaki i ints są praktycznie wymienne, a w niektórych pętlach bardzo przydatne jest dla mnie wykonywanie znaków przyrostowych i indeksowanie tablic za pomocą znaków.

Jak mogę to zrobić w Pythonie? Wystarczy, że nie mam tradycyjnego loopera (;;) - czy jest jakiś sposób, aby osiągnąć to, co chcę osiągnąć, bez konieczności ponownego przemyślenia całej mojej strategii?

Każda pomoc mile widziana.

Author: SilentGhost, 2010-01-28

3 answers

W Pythonie 2.x, wystarczy użyć funkcji ord i chr:

>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>> 

Python 3.x sprawia, że jest to bardziej zorganizowane i interesujące, ze względu na wyraźne rozróżnienie między bajtami i unicode. Domyślnie," string " jest unicode, więc powyższe działa (ord odbiera znaki Unicode i chr wytwarza je).

Ale jeśli interesują Cię bajty (np. do przetwarzania jakiegoś binarnego strumienia danych), rzeczy są jeszcze prostsze:

>>> bstr = b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
 149
Author: Eli Bendersky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-24 17:59:56

"wystarczająco źle nie mieć tradycyjnego dla (;;) looper"?? Co?

Czy próbujesz zrobić

import string
for c in string.lowercase:
    ...do something with c...

A może używasz string.uppercase lub string.letters?

Python nie ma for(;;), ponieważ często są lepsze sposoby, aby to zrobić. Nie ma również matematyki postaci, ponieważ nie jest to konieczne.

 13
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-28 18:38:50

Pochodzę z PHP, gdzie można zwiększyć char (a do B, Z do AA, AA do AB itp.) za pomocą operatora++. Zrobiłem prostą funkcję, która robi to samo w Pythonie. Możesz również zmienić listę znaków na dowolne (małe, wielkie, itp.) jest twoją potrzebą.

# 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
 0
Author: xpuu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-07 15:01:09