这可能有点令人困惑,但我想做的是接受任何字符串并根据程序用户的输入重新排列字母。例如,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]
并继续?
答案 0 :(得分:2)
你可以split[(i*key) % len(split)]
围绕列表轮换。在modulo上查看更多内容。
答案 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'