<p>根据您提供的代码,我发现以下奇怪之处:</p>
<pre><code>szyfr = "SOME SENTENCE WHATEVER"
def split(szyfr):
return [char for char in szyfr]
szyfr = split(szyfr)
</code></pre>
<p>似乎您正在尝试从字符串构建列表,可以简单地如下所示:</p>
<pre><code>>>> s = "hola"
>>> l1 = list(s)
>>> l1
['h', 'o', 'l', 'a']
</code></pre>
<p>因此,在您的具体案例中:</p>
<pre><code>szyfr = "SOME SENTENCE WHATEVER"
szyfr = list(szyfr)
</code></pre>
<p>不过,实际上并不需要它,因为您可以直接管理字符串,就像它是一个列表一样,使用<strong>for</strong></p>
<p>现在,您需要替换特定字典后面的字符。我发现您的解决方案太复杂,而您只需要:</p>
<pre><code>diction = {
"A" : "Z",
"Y" : "B",
"C" : "X",
"W" : "E",
"E" : "V",
"U" : "F",
"G" : "T",
"S" : "H",
"I" : "R",
"Q" : "J",
"K" : "P",
"O" : "L",
"M" : "N",
" " : " "
}
sentence_to_code = input("Give me a sentence: ").strip().upper()
toret = ""
for ch in sentence_to_code:
coded_ch = diction.get(ch)
if not coded_ch:
coded_ch = ch
toret += coded_ch
print(toret)
</code></pre>
<p>如果您没有为所有可能的字符定义对应符,那么使用字典的<em>get(k)</em>方法是明智的,该方法在未找到键<em>k</em>时返回<strong>None</strong></p>
<p>必须考虑到,<em>get(k)</em>方法在找不到键的情况下具有返回值的默认参数,因此您可以使用<em>get(k,default_return_value)</em>,这让我们可以进一步简化代码:</p>
<pre><code>diction = {
"A" : "Z",
"Y" : "B",
"C" : "X",
"W" : "E",
"E" : "V",
"U" : "F",
"G" : "T",
"S" : "H",
"I" : "R",
"Q" : "J",
"K" : "P",
"O" : "L",
"M" : "N",
" " : " "
}
sentence_to_code = input("Give me a sentence: ").strip().upper()
toret = "".join([diction.get(ch, ch) for ch in sentence_to_code])
print(toret)
</code></pre>
<p>现在我们使用列表理解,因为我们不再需要条件。调用<code>diction.get(ch, ch)</code>返回<em>ch</em>或相应的编码字符,如果在字典中找不到,则返回<em>ch</em>本身。通过调用<a href="https://docs.python.org/3/library/stdtypes.html?highlight=str%20join#str.join" rel="nofollow noreferrer">str.join()</a>,即<code>"".join(...)</code>,我们将列表转换回字符串</p>