Python 使用shift加密文件
不知道我做错了什么?程序要求输入文件名并读取文件,但当要打印编码的消息时,它显示为空。我遗漏了什么,好像我将短语更改为普通的原始输入(“输入消息”),代码将正常工作,但这不是从txt文件读取Python 使用shift加密文件,python,file,Python,File,不知道我做错了什么?程序要求输入文件名并读取文件,但当要打印编码的消息时,它显示为空。我遗漏了什么,好像我将短语更改为普通的原始输入(“输入消息”),代码将正常工作,但这不是从txt文件读取 letters = "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"] cshift = int(input("Enter a number: "))
letters = "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"]
cshift = int(input("Enter a number: "))
phrase = open(raw_input("file name: "), 'r')
newPhrase = ""
for l in phrase:
if l in letters:
pos = letters.index(l) + cshift
if pos > 25:
pos = pos-26
newPhrase += letters[pos]
else:
newPhrase += " "
print(newPhrase)
open
函数不返回字符串,而是返回可从中读取字符串的已打开文件的句柄。您应该在Python中搜索有关如何将文件读入字符串的信息,然后在REPL中尝试,以确保它返回的是字符串而不是其他内容。这里的问题是此行的for循环:
for l in phrase:
将返回完整的行,而不是单个字符
因此,您还必须循环遍历这些行中的单个字符,或者读取文件二进制文件,或者在文件对象上使用每次读取一个字符的函数
您可以简单地执行以下操作:
for line in phrase:
for l in line:
... rest of your code here
短语
是一个文件对象。您没有从中读取任何数据。@TomZych是的,他正在枚举数据。不幸的是,枚举文件句柄会给他文件的行数,而不是文件的字符。@LasseV.Karlsen哇,你说得对。但是l
将是一行,OP将其视为一个字符。夜间经过的编辑:)他正在读取文件的行,这不是问题。问题不在于他没有读取文件,问题在于他正在读取文件的行。还有其他方法可以做到这一点,但我认为OP应该将名为phrase
的变量设置为包含该短语的字符串,而不是文件句柄。然后代码会工作,变量会有一个合理的名称。我同意这一点。更清晰的命名可以避免将来的混淆。