我坚持这个问题:
编写程序来加密文件。您应该从终端读取文件名,然后读取该文件的内容。
然后按如下方式进行加密:
a
转换为z
,b
转换为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)
答案 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
。