<p><em>评论太长了,所以我会把它作为答案,尽管它不是</p>
<p>对不起,请不要误会,但这是我15年来见过的最糟糕的代码。你应该至少再复习一次基础教程,以便更好地掌握所发生的事情,因为我觉得你只是随意地输入一些东西,而不去理解它们的作用。</p>
<p>让我们从头开始:</p>
<pre><code>ma['vals'] = [balloons, flowers, gifts, candy]
</code></pre>
<p>好吧,所以我假设ma是一本字典。你现在就用那本字典了。为什么在那里?</p>
^{pr2}$
<p>现在您只需将word设置为<code>[balloons, flowers, gifts, candy]</code>。为什么不直接做呢?另外,不要把一系列单词称为“word”。这意味着它是一个单词,但你把它列为一个列表。</p>
<pre><code>shuffled = list(word)
</code></pre>
<p>你为什么要写单字?已经是一张单子了。你现在所做的一切都准备好了:</p>
<pre><code>shuffled = [balloons, flowers, gifts, candy]
</code></pre>
<p>你叫它洗牌,其实不然。</p>
<pre><code>random.shuffle(word)
</code></pre>
<p>现在你洗牌。但是你没有使用shuffled变量,而是使用了variable这个词。</p>
<pre><code>shuffled = ''.join(random.sample(word, len(word)))
</code></pre>
<p>现在您将<code>shuffled</code>设置为另一个对象,因此您从未使用过第一个<code>shuffled</code>。另外,从一个和列表一样长的列表中随机抽取一个样本,这和随机抽取列表是一样的,而且这个列表已经被洗牌了。</p>
<pre><code>newval = shuffled
</code></pre>
<p>你为什么这么做?</p>
<p>实际上,您的所有代码都可以压缩为:</p>
<pre><code>newval = [balloons, flowers, gifts, candy]
random.shuffle(newval)
</code></pre>
<p>这将有相同的最终结果:你将有一个随机排列的单词列表。</p>
<p>因此,三分之二的代码最终都没有做任何事情。上面的内容也很清楚为什么代码的行为不像您所想的那样。当你想洗牌一个单词的时候,你可以把一个单词的列表乱排。</p>