2013-11-12 2 views
5

Я пытаюсь создать программу, которая циклически проходит через строку. Это то, что у меня есть до сих пор.Python - Пересечение строки

def main(): 
     name = "firstname lastname" 

     for i in name: 
      print(name) 
      name = name[1::] 
main() 

Это просто дает мне

firstname lastname 
irstname lastname 
rstname lastname 
stname lastname 
tname lastname 

и так далее до последней буквы.

Этот вид делает то, что я хочу, но не полностью.

Что я хочу, чтобы эта программа была предназначена для печати чего-то подобного.

firstname lastname 
irstname lastname f 
rstname lastname fi 
stname lastname fir 
tname lastname firs 
name lastname first 
ame lastname firstn 
me lastname firstna 

и т. Д. ... циклическое перемещение по шнуру, но я не могу его получить. Любая помощь пожалуйста.

Заранее спасибо

+0

'имя = имя [1 ::] + имя "% S" % [0]' –

ответ

1
def main(): 
    name = "firstname lastname" 

    for i in range(len(name)): 
     print(name[i:] + name[:i]) 
main() 

Строгание это замечательная вещь. :)

+0

Совершенная !, ничего себе я не могу поверить, я не думал об этом , Спасибо, сначала я пробовал эту точную вещь, но не len (name) в диапазоне циклов.Спасибо! – user1919840

0
>>> for i in range(len(name)): 
...  print(name[i:] + " " + name[:i]) 
... 
firstname lastname 
irstname lastname f 
rstname lastname fi 
stname lastname fir 
tname lastname firs 
name lastname first 
ame lastname firstn 
me lastname firstna 
e lastname firstnam 
lastname firstname 
lastname firstname 
astname firstname l 
stname firstname la 
tname firstname las 
name firstname last 
ame firstname lastn 
me firstname lastna 
e firstname lastnam 
3

Как насчет использования double ended queue. Они имеют специальный метод поворота для такого рода вещи:

from collections import deque 
s = "firstname lastname" 
d = deque(s) 
for _ in s: 
    print(''.join(d)) 
    d.rotate() 

Вы можете использовать .rotate(-1), если вы хотите, чтобы спина в другом направлении.

0

Это похоже на работу. Ваш срез массива не вращает строку, вам нужно добавить первый символ обратно в строку, иначе он будет короче на каждой итерации в цикле.

Вот пост, который объясняет срез массива обозначения: Explain Python's slice notation

def main(): 
    name = "firstname lastname " 

    for i in name: 
     print(name) 
     #name = name[1::] 
     name = name[1:] + name[0] 
main() 
0

Вот отличный маленький один лайнер, который делает это слишком (где x это строка, которую вы хотите обработать):

"\n".join([x[i:]+x[:i] for i in range(len(x))]) 

Разбивка:

  • "\n".join(...) - принимает массив и соединяет элементы с \n между каждым элементом
  • [ ... for i in ... ] - это список понимание, что делает список перебирая что-то еще
  • x[i:]+x[:i] - принимает элементы из i и вверх, а затем принимает все элементов до i и помещает их в новый список
  • range(len(x)) - Производит итерацию целых чисел от 0 до длины x.
2
from itertools import cycle 
import time 
name = "test string" 
my_cool_cycle = [cycle(name[i:]+name[:i]) for i in range(len(name))] 
while True: 
    print "".join(map(next,my_cool_cycle)) 
    time.sleep(1) 

просто для удовольствия: P

Смежные вопросы