Le problème est que vous pop
éléments de l'original et ainsi changer la longueur de t Il liste, donc la boucle s'arrêtera à la moitié des éléments.
Typiquement, cela est résolu en créant une copie temporaire:
def reverse_string(a_str):
straight=list(a_str)
reverse=[]
for i in straight[:]: # iterate over a shallow copy of "straight"
reverse.append(straight.pop())
return ''.join(reverse)
print(reverse_string('Why is it not reversing completely?'))
# ?yletelpmoc gnisrever ton ti si yhW
Toutefois, en cas de vous renverser pouvez utiliser déjà des alternatives existantes (plus facile):
Slicing:
>>> a_str = 'Why is it not reversing completely?'
>>> a_str[::-1]
'?yletelpmoc gnisrever ton ti si yhW'
ou le reversed
itérateur:
>>> ''.join(reversed(a_str))
'?yletelpmoc gnisrever ton ti si yhW'
Merci @JohnColeman pour la clarification. J'étais juste curieux de savoir pourquoi cette logique échoue. oui, c'est une mauvaise idée; le défi du code du site avait «str» et je ne l'ai pas changé – Sri