Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的字母移位程序_Python_List_Shift_Slice - Fatal编程技术网

python中的字母移位程序

python中的字母移位程序,python,list,shift,slice,Python,List,Shift,Slice,假设我有一个字母表列表: ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] 让我们假设移位位置是 0,2,19 如果输入是字符串 string=“xyz” 我想用上面的移位位置0,2,19来移位这3个字符 与shift'x'0次向右移动一样,shift'y'2次向右移动,shiftz19次向右移动 唯一想到的是类

假设我有一个字母表列表:

ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
让我们假设移位位置是

0,2,19

如果输入是字符串 string=“xyz”

我想用上面的移位位置0,2,19来移位这3个字符

与shift
'x'
0次向右移动一样,shift
'y'
2次向右移动,shift
z
19次向右移动

唯一想到的是类似列表的
index()
函数

我还看到另一个问题。如果我将
'z'
向右移动19次,我将得到一个
列表索引超出范围的错误。如果
'z'
向右移动19次,我希望它变成
's'
,这将是19次移动,在列表中循环并从头开始。与
'y'
相同,如果我将其向右移动两次,我希望它变成
'a'
等等


关于使用什么有什么建议吗?

编辑:我刚刚意识到我可能在回答一个完全不同的问题,因为我的大脑没有正确理解“移位”这个词。因此,我不是在生成新字母,而是在生成一个全新的字母表。请随意指点并大笑

为了处理超出范围的问题,您需要使用模函数
%
使数字“环绕”。您可以将其与切片结合使用,以实现轮班

ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

inputstring = "XYZ"

def shift(inputstr, shift1, shift2, shift3):
  new_alphabet = list(ALPHABET)
  shifts = [shift1, shift2, shift3]

  for i in range(0,3):
    inputchar = inputstr[i]
    i1 = new_alphabet.index(inputchar)
    i1_adjust = (i1 + shifts[i]) % len(new_alphabet)

    temp_alphabet = new_alphabet[:i1] + new_alphabet[i1+1:]
    new_alphabet = temp_alphabet[:i1_adjust] + [inputchar] + temp_alphabet[i1_adjust:]
    print new_alphabet

# We call it here.
shift(inputstring,0,2,19)

我们基本上是找到我们角色的索引,并将移位量添加到其中。然后我们把这个字符从字母表中拉出来,沿着
i1\u调整
空格数到新的位置。我们把字母表在那个位置分开,插入字符,然后把它粘在一起。如果将shift1、shift2、shift3更改为移位位置列表,代码可能会更优雅,但概念证明就在那里。

因此,我的方法比声音防御更基本,但当您输入三个字母(如“xyz”)时,它工作得非常好。(我猜你可以拿出一张支票来确认他们是这么做的)

我使用的主要工具是索引函数,它将匹配列表中的项目,并为我提供该项目的放置编号。然后我把这个数字加在你给的数字上。然后我把它除以长度,取剩余的。我不在乎它被分成多少次,我只想要剩下的,因为这告诉我它在字母表中的位置。然后我替换字母并打印出来

ALPHABET = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']


print "Please enter three letters"
x = list(raw_input("> ").upper())


length = len(ALPHABET)


first_letter = ALPHABET.index(x[0])
first_letter = (first_letter + 0) % length

x[0] = ALPHABET[first_letter]

second_letter = ALPHABET.index(x[1])
second_letter = (second_letter + 2) % length

x[1] = ALPHABET[second_letter]

third_letter = ALPHABET.index(x[2])
third_letter = (third_letter + 19) % length

x[2] = ALPHABET[third_letter]





print ''.join(x)

我可以这样解决吗:如果您不喜欢评论中的此解决方案,请告诉我,我将删除它。(而不是投反对票)

#/usr/bin/python
alpha=['A','B','C','D','E','F','G','H','I','\
‘J’、‘K’、‘L’、‘M’、‘N’、‘O’、‘P’、‘Q’、‘R’\
‘S’、‘T’、‘U’、‘V’、‘W’、‘X’、‘Y’、‘Z’]
def shift_right(字符、shift_inx):
总计=长度(α)
nxt_inx=α索引(char)+移位inx

如果nxt_inx,我建议使用模算子来解决越界的问题,那该怎么做呢?试着做一些你自己的研究own@robertrocha模运算符返回除法运算的剩余部分;e、 g.
19%2=1(19/2=8余数1)
这只是一个从头到尾连接的列表。你要完成的技术任务是:。正如你所看到的,它使用了Revan建议的module操作符,我知道如果有余数,则modules返回余数。这里的目的是什么?让我们以第三个字母为例。如果我在第三个字母中输入y,然后我们再添加19个位置,我们可能会遇到问题,因为我们在列表的末尾。我们取25,加19,得到44。如果我们以44比26获胜,我们将得到18分。虽然我们应该使用模数,而不是减法。这里给出了相同的答案,但是如果你想把位置移动128,我们就会遇到减法的麻烦。余数更好,因此您可以在多个场景中使用它。在
second_letter=(second_letter+2)%length
中,当使用python shell计算
second_letter=(second_letter+2)%length
时,结果应该是1,如下(25+2)%6给了我一个1如何使用%来包装单词在这种情况下,如果nxt\u inx,您不需要添加

#!/usr/bin/python

alpha = ['A','B','C','D','E','F','G','H','I',\
        'J','K','L','M','N','O','P','Q','R',\
        'S','T','U','V','W','X','Y','Z']

def shift_right(char, shift_inx):

    dic1 = dict(zip(alpha, range(26)))
    dic2 = dict(zip(range(26), alpha))

    total = len(alpha)

    nxt_inx = dic1[char] + shift_inx

    if nxt_inx <= 25:
        return dic2[nxt_inx]
    else:
        return dic2[nxt_inx % total]

def main():
    for x,y in [('X', 0), ('Y', 2), ('Z', 19)]:
        print '%s => %s => %s' % ( x, y, shift_right(x, y))

if __name__ == '__main__':
    main()
X => 0 => X
Y => 2 => A
Z => 19 => S
#!/usr/bin/python

alpha = ['A','B','C','D','E','F','G','H','I',\
        'J','K','L','M','N','O','P','Q','R',\
        'S','T','U','V','W','X','Y','Z']

def shift_right(char, shift_inx):

    total = len(alpha)

    nxt_inx = alpha.index(char) + shift_inx

    if nxt_inx <= 25:
        return alpha[nxt_inx]
    else:
        return alpha[nxt_inx % total]

def main():
    for x,y in [('X', 0), ('Y', 2), ('Z', 20)]:
        print '%s => %s => %s' % ( x, y, shift_right(x, y))

if __name__ == '__main__':
    main()