• doesn`t work with regular and reverse words

Question related to mission Backward Each Word



In a given string you should reverse every word, but the words should stay in their places. Input: A string. Output: A string. Precondition: The line consists only from alphabetical symbols and spaces.

I tried this one:

text: ('Hello      world') #with many spaces between words

li2:   ['Hello', 'world']

li:  ['olleH', 'dlrow']

and then replace in original text:

text = text.replace(li2[i],li[i])


def backward_string_by_word(text: str) -> str:
    li = []
    li2 = text.split()
    #revers all words
    for a in text.split():
    #word replacement in text
    for i in range(0,len(li2)):
       text = text.replace(li2[i],li[i])
    return text


This code works in all asserts:

assert backward_string_by_word('') == ''
assert backward_string_by_word('world') == 'dlrow'
assert backward_string_by_word('hello world') == 'olleh dlrow'
assert backward_string_by_word('hello   world') == 'olleh   dlrow'
assert backward_string_by_word('welcome to a game') == 'emoclew ot a emag'

But code does not work if string has a regular word and its reverse:

(backward_string_by_word('iH    Hi')) == 'iH    iH'
(backward_string_by_word('Hello olleH')) == 'Hello Hello'
(backward_string_by_word('Hello 2olleH')) == 'olleH Hello2'
(backward_string_by_word('Hello olleH hi ih yes s2ey code')) =='Hello Hello hi hi sey ye2s edoc'

What do I need to know to understand the cause of the problem or what am I doing wrong?