-1

这是我的编码:

word = ma['vals']
shuffled = list(word)                   
random.shuffle(word)
shuffled = ''.join(random.sample(word, len(word)))                      
newval = shuffled           

结果将是BALLOONSFLOWERSGIFTSFLOWERSCANDYFLOWERSBALLOONSBALLOONS。当我希望结果为例如如果我正在洗牌gifts时,结果将是stgfi

4

3 回答 3

3

这对于评论来说太长了,所以我会把它作为答案,虽然它不是。

对不起,请不要误会,但这是我 15 年来见过的最糟糕的代码。您可能应该至少再次阅读基本教程,以更好地掌握正在发生的事情,因为这对我来说就像您只是随机输入内容而没有尝试理解它们的作用。

让我们从头开始:

ma['vals'] = [balloons, flowers, gifts, candy]

好的,所以我假设 ma 是一本字典。您在代码中的任何地方都没有使用该字典。为什么会在那里?

word = ma['vals']

现在您只需将 word 设置为[balloons, flowers, gifts, candy]. 为什么不直接这样做呢?另外,不要将单词列表称为“单词”。这意味着它是一个词,但你把它列成了一个列表。

shuffled = list(word) 

你为什么要做list(word)?已经是清单了。您现在所做的一切都已设置:

shuffled = [balloons, flowers, gifts, candy]

你称它为洗牌,其实不是。

random.shuffle(word)

现在你洗牌。但是你没有使用 shuffled 变量,你使用了变量这个词。

shuffled = ''.join(random.sample(word, len(word)))   

现在你设置shuffled了另一件事,所以你从来没有使用过第一个shuffled. 此外,从与列表一样长的列表中随机抽取样本,与打乱它是一样的,并且列表已经打乱了。

newval = shuffled

你为什么要这么做?

实际上,您的所有代码都可以压缩为:

newval = [balloons, flowers, gifts, candy]
random.shuffle(newval)

这将具有相同的最终结果:您将获得一个随机打乱的单词列表。

所以三分之二的代码实际上最终什么都不。上面也很清楚为什么你的代码不像你想象的那样表现。当您想要随机播放一个单词时,您可以随机播放一个单词列表。

于 2013-04-30T06:16:22.510 回答
1

如果要随机选择一个单词,然后随机打乱该单词的字母:

In [27]: letters = list(random.choice(word))

In [28]: random.shuffle(letters)

In [29]: ''.join(letters)
Out[29]: 'blanolos'

在这里,word与您的脚本中的变量相同(即单词列表)。

于 2013-04-30T06:16:24.567 回答
1

您必须从字符串创建一个列表。例如,在您的情况下,字符串“balloons”将由ma["vals"][0]. 然后,您可以通过调用list和传入字符串将其转换为列表。random函数的命名可选参数random.shuffle是排序所基于的函数。random.shuffle修改传递到random.shuffle适当位置的列表,因此您调用join列表而不是调用的结果random.shuffle

>>> wordList = list(ma["vals"][0])) #"balloons"
>>> random.shuffle(wordList,random=random.random)
>>> ''.join(wordList)
'oboanlls'
于 2013-04-30T06:22:03.007 回答