基本的python加密卡住了

时间:2015-05-10 10:10:35

标签: python text python-2.x

我坚持这个问题:

  

编写程序来加密文件。您应该从终端读取文件名,然后读取该文件的内容。

     

然后按如下方式进行加密:a转换为zb转换为y,依此类推。类似地,对于大写字符。非字母字符保持不变。

这是我到目前为止所做的:

fname = raw_input("Enter name of file you want to encrypt: ")
fhand = open(fname + ".txt", "r")
a = fhand.read()

for i in range(0, len(a)):
    if a[i].isalpha():
        a[i] = chr(ord(a[i]) - 26)

2 个答案:

答案 0 :(得分:4)

不是一个完整的答案,但只是提示,以帮助您自己编写最终代码。

  • 读取文件的内容 - 除非你有充分的理由不这样做(课程仍未完成,旧的Python版本......)你应该使用{{1无论可能发生什么,保证正确关闭文件的构造:

    with
  • 'a'被转换为'z''b'变为'y',依此类推:你应该控制char在with open(fname+".txt","r") as fhand: a = fhand.read() ... 和{{1}之间仅在以下情况下进行转换:

    'a'
  • 同样适用于大写字母。非字母保留原样:对'z'if c >= 'a' and c <='z': c = 'z' + 'a' - c # 'z' - new_c = c-'a' : a=>z, ...

  • 之间的字符执行相同操作
  • Python字符串是一个不可变的序列!不要使用'A',而是构建一个新字符串并为其添加字符(*):

    'Z'

混合使用它不应该很难构建你的脚本。

(*)或者,您可以在字符列表中转换初始字符串,替换列表中的字符,然后a[i] = ...列表以构建字符串。留下作为一项新练习: - )

答案 1 :(得分:1)

@Serge Ballesta写了一个处理文件的好方法。

至于转换,Python有自己很酷的方式。这是一个例子:

from string import maketrans, ascii_lowercase
cypher = maketrans(ascii_lowercase, ascii_lowercase[::-1])
print 'abcde'.translate(cypher)

将输出zyxwv

string.maketrans使用相同长度的字符串参数,以便为您稍后进行的转换生成一个密码。在上面的例子中,我将第一个参数的所有小写ascii字符,第二个参数反过来。

在Python3中,您可以使用bytes.maketrans