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?
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.
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']
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)