Karan Thakkar
Karan Thakkar

Reputation: 1027

How to preserve and reverse a string?

Write a function that accepts a string of words separated by spaces consisting of alphabetic characters and returns a string such that each word in the input string is reversed while the order of the words in the input string is preserved. Capitalization does matter here. The length of the input string must be equal to the length of the output string i.e. there should be no trailing or leading spaces in your output string. For example if:

input_string = “this is a sample test”

then the function should return a string such as:

"siht si a elpmas tset"

This is my code:

def preserve_and_reverse (input_str):
    list = input_str.split()
    print (list)
    reverse_character = ""
    for i in range (0, len(input_str)):
        split_list = list[0:(i + 1)]
        print (split_list) 
        for j in split_list_advance:
            reverse_character = reverse_character + split_list[j]
        output_str = output_str.append(reverse_character)
    output = output_str.replace("", " ")
    print (output)

#Main Program
input_str = input("Enter a string: ")
result = preserve_and_reverse (input_str)
print (result)

I am not getting anywhere with the code. Should I try a different approach like traverse each character and when I encounter a white-space just slice the string and then perform a reverse? Any help would be appreciated.

Upvotes: 1

Views: 4777

Answers (6)

ABHINAV PRATIK
ABHINAV PRATIK

Reputation: 1

def sample(string):
    list=[]
    string1=string.split()
    for i in string1:
        list.append(i[::-1])
    print(" ".join(list))

if __name__=="__main__":
    input=input("Enter string: ")
    sample(input)

Upvotes: -1

Noctis Skytower
Noctis Skytower

Reputation: 21991

All of the other answers so far ignore what happens when extra spaces are between words or at either end of the input string. Please test your code to verify that is works properly. The main function provided below has a few tests that you may want to use to verify your function is working properly, and you may want to add more tests if you find that your code is not behaving correctly:

def main():
    print('Running test 1 ...')
    text = 'this is a sample test'
    par = preserve_and_reverse(text)
    assert par == 'siht si a elpmas tset'
    print('Running test 2 ...')
    text = 'This is a sample TEST'
    par = preserve_and_reverse(text)
    assert par == 'sihT si a elpmas TSET'
    print('Running test 3 ...')
    text = 'This string  has   some    extra     spaces'
    par = preserve_and_reverse(text)
    assert par == 'sihT gnirts  sah   emos    artxe     secaps'
    print('Running test 4 ...')
    text = ' check  spaces   at    string     ends      '
    par = preserve_and_reverse(text)
    assert par == ' kcehc  secaps   ta    gnirts     sdne      '
    print('Done!')


def preserve_and_reverse(text):
    return ' '.join(word[::-1] for word in text.split(' '))


if __name__ == '__main__':
    main()

Upvotes: 0

Ian
Ian

Reputation: 30813

Something like this will do (step-by-step):

input_string = "this is a sample test"
words = input_string.split()
nwords = []
for i in words:
    rword = ""
    for c in reversed(word):
        rword += c
    nwords.append(rword)
output_string = " ".join(nwords)    
print(output_string)

Result:

siht si a elpmas tset

Step by step explanation:

  1. You split your input text into list of string:

     words = input_string.split()
    
  2. You iterate over the words

     for word in words):
    
  3. For each word, you prepare a reversed word rword and build up the reversed word by adding up character from the old word but reversed:

     rword = ""
     for c in reversed(word):
         rword += c
     nwords.append(rword)
    
  4. you rejoin the reversed words - but in order and print it:

     output_string = " ".join(nwords)    
     print(output_string)
    

Or, more simply:

input_string = "this is a sample test"
words = input_string.split()
output_string = ""
for word in words:
    for c in reversed(word):
        output_string += c
    output_string += " "
print(output_string)

Upvotes: 1

Iron Fist
Iron Fist

Reputation: 10951

Split over spaces, reverse each string through map with [::-1] then join them back with
' '.join

>>> s = 'this is a sample test'
>>> 
>>> ' '.join(map(lambda s:s[::-1], s.split()))
'siht si a elpmas tset'

Upvotes: 6

gizlmo
gizlmo

Reputation: 1922

This is how I would have done it:

def preserve_and_reverse(input_str):

    # Split the String into an Array
    list_ = input_str.split(" ")

    return_str = ""

    # For Each String in the Array
    for item in list_:

        # Add Reversed String to Return String
        return_str += item[::-1] + " "

    # Return String without leading/trailing spaces
    return return_str.strip()

# Main Program
string_input = input("Enter a string: ")
result = preserve_and_reverse(string_input.strip())
print(result)

Upvotes: 2

Alexander
Alexander

Reputation: 109510

word[::-1] reverses the order of the string variable named word which is obtained by iterating through each split word in the sentence.

>>> ' '.join(word[::-1] for word in input_string.split())
'siht si a elpmas tset'

Step by step:

>>> input_string.split()
['this', 'is', 'a', 'sample', 'test']

>>> [word[::-1] for word in input_string.split()]
['siht', 'si', 'a', 'elpmas', 'tset']

>>> ' '.join(word[::-1] for word in input_string.split())
'siht si a elpmas tset'

Upvotes: 0

Related Questions