Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
reversing a string
#1
Hello,

I was given a homework, the output should look like this:

W
Wo
Wor
Worl
World
World
World H
World He
World Hel
World Hell
World Hello

The teacher suggested this solution:
userInput = 'Hello World'

userInput = userInput.split(' ')

userInput = userInput[::-1]

userInput = ' '.join(userInput)

tmp = ''

for char in userInput:
    tmp += char
    print(tmp)
I dont understand why we need an additional tmp variable. Could someone please explain it to me, or have a better, more pythonic solution?
Reply
#2
You don't need the tmp variable. You could loop over the indexes directly:

for end in range(1, len(userInput) + 1):
    print(userInput[:end])
However, looping over indexes is generally considered very much not Pythonic, so I expect your teacher was trying to avoid giving you bad habits. I'm not seeing a really Pythonic way of doing it (that is, keeping for char in userInput:) without a variable to hold the string as you are building it.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#3
I would say the "pythonic" way, would be to use the itertools module. Though, I doubt your professor would appreciate seeing that lol. Unfortunately, itertools is written in c, not python, so seeing how you could do that yourself doesn't really help: https://github.com/python/cpython/blob/m...le.c#L3424


>>> text = 'Hello World'
>>> text = ' '.join(text.split()[::-1])
>>> text
'World Hello'
>>> import itertools
>>> for permutation in itertools.accumulate(text):
...   print(permutation)
...
W
Wo
Wor
Worl
World
World
World H
World He
World Hel
World Hell
World Hello
That said, if I were to write it in python, I would probably do something like this:
>>> def accum(iterable):
...   iterable = iter(iterable)
...   total = next(iterable)
...   yield total
...   for remaining in iterable:
...     total += remaining
...     yield total
...
>>> text
'World Hello'
>>> list(accum(text))
['W', 'Wo', 'Wor', 'Worl', 'World', 'World ', 'World H', 'World He', 'World Hel', 'World Hell', 'World Hello']
Reply
#4
I like nilamo solution.

One possible way without itertools:
user_input = 'Hello World'
text = ' '.join(user_input.split()[::-1])
tmp = ''
for char in text:
    tmp = ''.join((tmp, char))
    print(tmp)
 
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  reversing strings westbob 4 2,565 Jun-11-2019, 04:11 PM
Last Post: buran
  Reversing a String grkiran2011 1 2,315 Dec-02-2017, 04:43 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020