擅长:python、mysql、java
<pre><code>caeser.encrypt(source)
</code></pre>
<p>进入</p>
^{pr2}$
<p><code>source</code>是一个file对象-这个代码“工作”(不加密任何东西)这一事实很有趣-结果是在迭代之前,您在源代码上调用<code>list()</code>,这将它转换为文件中的一个<strong>行列表。而不是通常的<code>list(string)</code>的结果,这是一个字符列表。因此,当它试图加密每个chracter时,它会发现一整行与您设置的任何替换项都不匹配。在</p>
<p>同样,正如其他人指出的那样,您忘记在代码中包含plainset,但这并不重要。在</p>
<p>一些关于你的代码的随机注释(可能是吹毛求疵,呵呵)</p>
<ul>
<li>你把“凯撒”打错了</li>
<li>您使用的习惯用法在python中效率低下(通常称为“非pythonic”),其中一些可能来自于使用其他语言(如C)的经验。
<ul>
<li>那些while循环可以是<code>for item in string:</code>-字符串已经作为字节列表工作,就像您试图转换的那样。在</li>
<li>写入outfile的行可以是<code>outfile.write(self._encoded)</code></li>
</ul></li>
<li>这两个函数非常相似,几乎是复制粘贴的代码。尝试编写第三个函数,它共享两者的功能,但有两个“模式”,即加密和解密。例如,您可以根据模式,在密码列表或普通列表上运行</li>
<li>我知道您这样做是为了练习,但标准库中包含<a href="http://www.tutorialspoint.com/python/string_maketrans.htm" rel="nofollow">these functions</a>用于此类替换。包括电池!在</li>
</ul>
<p><strong>编辑</strong>:如果有人想知道这些文件函数做什么以及它们为什么工作,他们会在while循环中调用<code>raw_input()</code>,直到有合适的文件可以返回。<code>openFileWriteRobust()</code>有一个参数,该参数是用户不输入任何内容时的默认值。代码链接在操作站上。在</p>