擅长:python、mysql、java
<p>你的代码有两个问题。首先,正如已经指出的,<code>frase2[i] +=</code>必须是<code>frase2 += ...</code>,因为<code>frase2[i]</code>还不存在。您希望作为一个整体附加到字符串,而不是附加到该特定字符。其次,在循环的每个迭代中设置<code>frase2 = ""</code>。在循环开始前移动那条线!你知道吗</p>
<p>接下来,您可以通过直接迭代字符来改进代码,使用<code>for</code>循环代替<code>while</code>,使用比较链代替那些复杂的<code>and</code>和<code>or</code>语句:</p>
<pre><code>def copia(frase):
frase2 = ""
for c in frase:
if 'a' <= c <= 'z' or 'A' <= c <= 'Z':
frase2 += c
else:
frase2 += " "
return frase2
</code></pre>
<p>或者您甚至可以使用<a href="https://docs.python.org/3/library/stdtypes.html#str.isalpha" rel="nofollow noreferrer">^{<cd9>}</a>(不完全相同,但可能更像您真正想要的,例如,还允许重音字符),使用三元<code>a if c else b</code>,并将循环移动到<a href="https://docs.python.org/3/library/stdtypes.html#str.isalpha" rel="nofollow noreferrer">^{<cd11>}</a>中的生成器表达式中:</p>
<pre><code>def copia(frase):
return ''.join(c if c.isalpha() else " " for c in frase)
</code></pre>