J'ai cherché comment faire cela en python et je ne trouve pas de réponse. Si vous avez une chaîne:

>>> value = 'abc' 

Comment incrémenteriez-vous tous les caractères d'une chaîne de 1? L'entrée que je recherche est donc:

>>> value = 'bcd' 

Je sais que je peux le faire avec un caractère en utilisant ord et chr:

>>> value = 'a'
>>> print (chr(ord(value)+1)) 
>>> b

Mais ord() et chr() ne peuvent prendre qu'un seul caractère. Si j'ai utilisé la même déclaration ci-dessus avec une chaîne de plusieurs caractères. J'obtiendrais l'erreur:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 3 found 

Y a-t-il un moyen de faire cela?

7
brazjul 6 mars 2016 à 01:24

4 réponses

Meilleure réponse

Vous pouvez utiliser une expression de générateur avec ''.join() comme suit:

In [153]: value = 'abc'

In [154]: value_altered = ''.join(chr(ord(letter)+1) for letter in value)

In [155]: value_altered
Out[155]: 'bcd'

Le générateur parcourt chaque letter de la chaîne value et l'incrémente d'une unité en utilisant la méthodologie chr(ord(letter)+1) suggérée dans votre question. Il utilise ensuite ''.join() pour reconvertir les lettres du générateur en chaîne.

11
gtlambert 5 mars 2016 à 23:26

Comme gtllambert m'a battu à ma réponse d'origine, je poste une solution alternative. Vous pouvez également utiliser map et une expression lambda pour y parvenir. L'expression lambda utilise chr et ord pour incrémenter chaque caractère de un et chr est utilisée pour le reconvertir en caractère.

value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
8
gtlambert 5 mars 2016 à 22:39

Un code très simple sur quatre lignes:

finalMessage=""
for x in range (0,len(value)):
    finalMessage+=(chr(ord(value[x])+1))
print(finalMessage)

Il parcourt chaque lettre de la chaîne et en ajoute une, mais cela ne fonctionne pas avec "z", vous pouvez donc faire:

value="abc testing testing, or sdrshmf"
finalMessage=""
for x in range(0,len(value)):
    if ord(value[x]) in range(97,123):
        finalMessage+=(chr(((ord(value[x])-96)%26)+97))
    elif ord(value[x]) in range(65,91):
        finalMessage+=(chr(((ord(value[x])-64)%26)+65))
    else:
        finalMessage+=value[x]
print(finalMessage)
0
That One Random Scrub 5 mars 2016 à 23:18
value = 'abc'
newVar=(chr(ord(value[0])+1))
newVar1=(chr(ord(value[1])+1))
newVar2=(chr(ord(value[2])+1))
value=newVar+newVar1+newVar2
print(value)

Voici ce que j'ai trouvé ne peut pas croire que cela a réellement fonctionné merci pour le défi en utilisant python 3

1
mike S 6 sept. 2016 à 00:09