I am trying to switch the first character in a string and move it to the end of the string. It needs to repeat the rotation a number of n times.
For example, rotateLef
The only problem with the code you have posted is the fact that you're trying to use "str" as a name for a string. This is the name of a built in function in Python, and that's why you're getting errors. See more: http://docs.python.org/library/functions.html#str You cannot use that as a name for something.
Changing the name of the string you pass rotateLeft will solve your problem.
def rotateLeft(string,n):
rotated=""
rotated=string[n:]+string[:n]
return rotated
You can shorten it to
def rotate(strg,n):
return strg[n:] + strg[:n]
and simply use negative indices to rotate "to the right":
>>> rotate("hello", 2)
'llohe'
>>> rotate("hello", -1)
'ohell'
>>> rotate("hello", 1)
'elloh'
>>> rotate("hello", 4)
'ohell'
>>> rotate("hello", -3)
'llohe'
>>> rotate("hello", 6) # same with -6: no change if n > len(strg)
'hello'
If you want to keep rotating even after exceeding the length of the string, use
def rotate(strg,n):
n = n % len(strg)
return strg[n:] + strg[:n]
so you get
>>> rotate("hello", 1)
'elloh'
>>> rotate("hello", 6)
'elloh'
I know this is old, but you can use collections.deque:
from collections import deque
s = 'Impending doom approaches!'
d = deque(s)
d.rotate(11)
print(''.join(d))
>>> approaches!Impending doom
d.rotate(-21)
print(''.join(d))
>>> doom approaches!Impending