如何使用for循环使用python替换索引

时间:2014-04-10 16:11:36

标签: python python-2.7

定义一个名为encrypt的函数,它将一个字符串(即当前目录中的文本文件的名称)作为输入。然后该函数应该打印该文件的加密内容。

这里的文本加密是通过将元音的每个出现替换为列表中的下一个元素来完成的。所以' a'取而代之的是' e' e'被' i'取代,等等和' u'取而代之的是' a'。此外,每个辅音都被替换为列表中的下一个辅音&#; bcdfghjklmnpqrstvwxyz'所以' b'取而代之的是' c'' c'通过' d'等等,最后' z'被'替换为'。对于大写字母,相同的替换逻辑成立。请注意,非字母字符应以原始形式出现而不进行修改。

def encrypt (eo):
    vowel = 'aeiou'
    con = 'bcdfghjklmnpqrstvwxyz'
    for eo in vowel (t[i+1]):
        res=
        return res

3 个答案:

答案 0 :(得分:1)

这段代码可能很有用。注意元音和内容。我在每个变量元音和com中添加了一个字母以避免模运算。假设eo是输入字符串。

 def encrypt (eo):
    vowel = 'aeioua'
    con = 'bcdfghjklmnpqrstvwxyzb'
    encrytTable = vowel + con
    res = ""
    for letter in eo:
        res += encrytTable[encrytTable.find(letter)+1]
    return res

如果eo是输入文件名,则需要一些文件读取操作,如:

>>> fh = open(eo)
>>> fh.read()
>>> fh.>>> fh.close()

更有效的方法是预先计算一个encryptTable数组并使用该表以线性方式替换origianl输入。在下面的代码中,我假设您的输入仅包含小写字母。 Abd如果移位距离不是1,则需要修改代码。预先计算:

>>> vowel = 'aeioua'
>>> con = 'bcdfghjklmnpqrstvwxyzb'
>>> encryptTable = []
>>> for i in xrange(97,123):
        temp = chr(i)
            if temp in vowel:
                encryptTable.append(vowel[vowel.find(temp)+1])
            else:
                encryptTable.append(con[con.find(temp)+1])
>>> encryptTable
['e', 'c', 'd', 'f', 'i', 'g', 'h', 'j', 'o', 'k', 'l', 'm', 'n', 'p', 'u', 'q', 'r', 's', 't', 'v', 'a', 'w', 'x', 'y', 'z', 'b']

然后替换内容:

>>> plain = "helloworld"
>>> encrypted = "".join([encryptTable[ord(i)-ord('a')] for i in plain])
>>> encrypted
'jimmuxusmf'

答案 1 :(得分:0)

这里有多个问题:

  1. for eo in ...将替换eo参数;除
  2. t未定义,因此会给出NameError;
  3. res=SyntaxError;和
  4. 即使修复了上述所有问题,第一个字符也会发生return res,因为它缩进得太远了。
  5. 相反,您可以执行以下操作:

    def encrypt(eo):
        vowels = "aeiou"
        for index, vowel in enumerate(vowels): # iterate through the five vowels
            new_v = vowels[(index + 1) % len(vowels)] # determine replacement
            eo = eo.replace(vowel, new_v) # do replacement
    

    然后你可以为辅音做同样的事情,然后return eo(它应该缩进到与vowels = ...相同的水平!)。

    注意:

    1. 使用%将索引保持在vowels的适当范围内;和
    2. 使用enumerate从字符串vowel及其vowels中获取字符index
    3. 或者,更有效率:

      1. 在字符输出中构建dict离子映射字符;
      2. 使用输入listeo构建dict个替换字符;和
      3. str.join输出字符和return它。

答案 2 :(得分:0)

def encrypt(s):
    vowels = 'aeiou'
    vowelReps = dict(zip(vowels, vowels[1:]+vowels[0]))
    cons = 'bcdfghjklmnpqrstvwxyz'
    consReps = dict(zip(cons, cons[1:]+cons[0]))
    answer = []
    for char in s:
        if char.lower() in vowelReps:
            answer.append(vowelReps[char.lower()]
        else:
            answer.append(consReps[char.lower()]
        if char.isupper():
            answer[-1] = answer[-1].upper()
    return ''.join(answer)