<pre><code>def append(string,chars): ##append list to a string
q = 0
while q < len(string):
if string[q] == " " and chars[q] != " ":
string[q] = chars[q]
q+=1
</code></pre>
<p>这不会显式返回值,因此隐式返回<code>None</code></p>
<p>(名称<code>string</code>在这里也是一个非常糟糕的选择:首先,您希望传递的是一个列表而不是一个字符串(因为正如您之前所了解的,您无法修改这样的字符串),其次它隐藏了导入的<code>string</code>模块。但是,您的代码没有使用<code>string</code>模块,因此您不应该<code>import</code>(首先,这是一个问题。)</p>
<pre><code>str = (append(current, printmatches(word,char)))
</code></pre>
<p>现在<code>str</code>是<code>None</code>,因为它是<code>append</code>调用的结果</p>
<pre><code>if (convertlist(str) == word):
</code></pre>
<p>现在,我们尝试使用<code>None</code>来<code>convertlist</code>,这当然不起作用,因为我们希望传入一个列表</p>
<pre><code>def convertlist(x):
q = " "
a = 0
while (a < len(x)):
q+=x[a]
a+=1
return (q)
</code></pre>
<p>。。。因此这里<code>len</code>对<code>None</code>无效</p>
<hr/>
<p>从函数中获取信息的自然方式是<code>return</code>该信息。在<code>append</code>中创建一个新字符串,并<code>return</code>它;然后你就可以用你想用的方法来使用结果了。另外,由于您正在创建一个新对象,因此实际上可以再次传入字符串</p>
<p>除了,我不知道为什么这个函数被称为<code>append</code>,因为尽管有注释,它似乎并不打算做任何这样的事情</p>