定义一个名为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
答案 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)
这里有多个问题:
for eo in ...
将替换eo
参数;除t
未定义,因此会给出NameError
; res=
是SyntaxError
;和return res
,因为它缩进得太远了。相反,您可以执行以下操作:
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 = ...
相同的水平!)。
注意:
%
将索引保持在vowels
的适当范围内;和enumerate
从字符串vowel
及其vowels
中获取字符index
。或者,更有效率:
dict
离子映射字符; list
和eo
构建dict
个替换字符;和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)