2014-02-22 130 views
1

這可能有點令人困惑,但我想要做的是採取任何字符串並根據來自程序用戶的輸入重新排列字母。例如,line =「Romeo and Juliet」,key = 3。編碼行將從行[0] R開始,然後將3個字符向下移動到E,然後是A,然後是空格。然後,一旦我到達列表的末尾,它會迴圈並從行[1]開始,添加3,依此類推,直到所有字符都被使用。所以最終結果將是「Rea ltoonJim due」。我假設這將使用循環,這是我堅持的部分。這是我當前的代碼:重新排列列表中的字母

key = int(input("Enter the key: ")) 
sent = input("Enter a sentence: ") 
print()# for turnin 
print() 

print("With a key of:",key) 
print("Original sentence:",sent) 
print() 

split = list(sent) 

for i in range(len(split)): 
    print(split[0+i*key]) 

所以我有列表設置,這一點讓我說,我需要的前幾個字母,但我得到一個錯誤:一旦到達最終 IndexError: list index out of range.

所以性格,我將如何獲得它回到split[1]並繼續?

回答

1

字符切片可以採取 「跳躍」 的因素,所以:

>>> s = 'Romeo and Juliet' 
>>> s[0::3] # every 3rd letter starting from 0 
'Rea lt' 
>>> s[1::3] # every 3rd letter starting from 1 
'oonJi' 

假如把它放在一個循環,並加入他們一起:

>>> ''.join(s[i::3] for i in range(3)) 
'Rea ltoonJim due' 

作爲一般的功能:

>>> def rearrange(s,skip): 
...  return ''.join(s[i::skip] for i in range(skip)) 
... 
>>> rearrange(s,3) 
'Rea ltoonJim due' 
>>> rearrange(s,5) 
'R Jtoaumnledio e' 
+0

這個伎倆。非常感謝! – user3330472

2

你可以做split[(i*key) % len(split)]在列表中旋轉。查看更多modulo