Je connais Python, venant de Java et de C. Comment incrémenter un caractère? En Java ou en C, les caractères et les entiers sont pratiquement interchangeables, et dans certaines boucles, il m'est très utile de pouvoir incrémenter des caractères et indexer des tableaux par des caractères.
Comment puis-je faire cela en Python? C’est déjà assez grave de ne pas avoir un traditionnel pour (;;) looper. Y at-il un moyen de réaliser ce que je veux réaliser sans avoir à repenser toute ma stratégie?
Toute aide appréciée.
Dans Python 2.x, utilisez simplement les fonctions ord
et chr
:
>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>>
Python 3.x rend cela plus organisé et intéressant, en raison de sa distinction claire entre octets et unicode. Par défaut, une "chaîne" est unicode, donc ce qui précède fonctionne (ord
reçoit les caractères Unicode et chr
les produit).
Mais si les octets vous intéressent (comme pour le traitement de certains flux de données binaires), les choses sont encore plus simples:
>>> bstr = b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
"assez mauvais de ne pas avoir un traditionnel pour (;;) looper" ?? Quoi?
Essayez-vous de faire
import string
for c in string.lowercase:
...do something with c...
Ou peut-être utilisez-vous string.uppercase
ou string.letters
?
Python n'a pas for(;;)
car il existe souvent de meilleures façons de le faire. Il n’a pas non plus de maths de caractères car ce n’est pas nécessaire non plus.
def doubleChar(str):
result = ''
for char in str:
result += char * 2
return result
print(doubleChar("amar"))
sortie:
aammaarr
Je viens de PHP, où vous pouvez incrémenter char (A à B, Z à AA, AA à AB, etc.) en utilisant l'opérateur ++. J'ai créé une fonction simple qui fait la même chose en Python. Vous pouvez également modifier la liste des caractères en fonction de vos besoins (minuscules, majuscules, etc.).
# 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