9

I am having a small problem in my code. I am trying to reverse the words and the character of a string. For example "the dog ran" would become "ehT god nar"

The code almost works. It just does not add spaces. How would you do that?

def reverseEachWord(str):
  reverseWord=""
  list=str.split()
  for word in list:
    word=word[::-1]
    reverseWord=reverseWord+word+""
  return reverseWord 
Bhargav Rao
  • 50,140
  • 28
  • 121
  • 140
Neal Wang
  • 1,177
  • 3
  • 10
  • 9
  • "The code almost works. It just does not add spaces. How would you do that? " It's a little confusing to me how the question could have been asked. Where the original code says `reverseWord=reverseWord+word+""` - one has to wonder, what was the intended purpose of the `+""` part? Did OP try using anything else there? – Karl Knechtel Dec 30 '22 at 00:19

7 Answers7

15

You are on the right track. The main issue is that "" is an empty string, not a space (and even if you fix this, you probably don't want a space after the final word).

Here is how you can do this more concisely:

>>> s='The dog ran'
>>> ' '.join(w[::-1] for w in s.split())
'ehT god nar'
NPE
  • 486,780
  • 108
  • 951
  • 1,012
4
def reversed_words(sequence):
    return ' '.join(word[::-1] for word in sequence.split())

>>> s = "The dog ran"
>>> reversed_words(s)
... 'ehT god nar'
Rob Cowie
  • 22,259
  • 6
  • 62
  • 56
3
name=input('Enter first and last name:')
for n in name.split():
    print(n[::-1],end=' ')
sanx84
  • 31
  • 1
  • 4
    In general "code only" answers are considered to be bad practice. Please open up a little bit what your code does and how it helps to solve the problem. – quinz Sep 20 '17 at 11:53
2

You can also deal with noise in the string using the re module:

>>> import re
>>> s = "The \n\tdog \t\nran"
>>> " ".join(w[::-1] for w in re.split(r"\s+", s))
'ehT god nar'

Or if you don't care:

>>> s = "The dog ran"
>>> re.sub(r"\w+", lambda w: w.group(0)[len(w.group(0))::-1], s)
'Teh god nar'
RMPR
  • 3,368
  • 4
  • 19
  • 31
1
def reverse_words(sentence):        
     return " ".join((lambda x : [i[::-1] for i in x])(sentence.split(" ")))
A.Raouf
  • 2,171
  • 1
  • 24
  • 36
1

Another way to go about it is by adding a space to your words reverseWord=reverseWord+word+" " and removing the space at the end of your output by using .strip()

def reverse_words(str):
  reverseWord = ""
  list = str.split()
  for word in list:
    word = word[::-1]
    reverseWord = reverseWord + word + " "
  return reverseWord.strip()

check out this post on how it's used

Moses Okemwa
  • 173
  • 7
1

Here is a solution without using join / split :

def reverse(sentence):
    answer = ''
    temp = ''
    for char in sentence:
        if char != ' ':
            temp += char
            continue
        rev = ''
        for i in range(len(temp)):
            rev += temp[len(temp)-i-1]
        answer += rev + ' '
        temp = ''
    return answer + temp
reverse("This is a string to try")
Gino Mempin
  • 25,369
  • 29
  • 96
  • 135
ssulav
  • 69
  • 4