2

我正在尝试创建一个字符串,该字符串在列表中包含一定数量的不同单词,但是我使用的代码仅随机使用一个单词,而不是每个打印的单词都使用不同的单词。

这是我的代码:

import random

words = ['hello', 'apple', 'something', 'yeah', 'nope', 'lalala']
print random.choice(words) * 5

一个示例输出是:

hellohellohellohellohello

一个示例预期输出将是:

appleyeahhellonopesomething

谁能告诉我我做错了什么?

4

5 回答 5

7

random.choice(words) * 5只执行random.choice一次,然后将结果乘以 5,导致重复相同的字符串。

>>> import random
>>> words = ['hello', 'apple', 'something', 'yeah', 'nope', 'lalala']
>>> print ''.join(random.choice(words) for _ in range(5))
applesomethinghellohellolalala
于 2012-06-23T03:20:56.063 回答
6

如果您不想重复原始列表中的单词,则可以使用sample.

import random as rn
words = ['hello', 'apple', 'something', 'yeah', 'nope', 'lalala']

word = ''.join(rn.sample(words, 5))

结果:

>>> word
'yeahhellosomethingapplenope'
于 2012-06-23T03:43:09.280 回答
3

你不是调用random.choice(words)5 次,而是得到一个输出,random.choice(words)然后乘以 5 次。使用字符串,它只是重复字符串。

"abc" * 3会给你"abcabcabc"

因此,首先取决于您随机选择的单词,它只会重复 5 次。

于 2012-06-23T03:24:00.947 回答
2

“乘以”一个字符串将多次打印该字符串。例如,print '=' * 30将打印一行 30 "=",这就是为什么你得到 5 次"hello"- 它重复随机选择的单词 5 次。

import random, sys
words = ['hello', 'apple', 'something', 'yeah', 'nope', 'lalala']

for i in range(5):
    sys.stdout.write(random.choice(words)) 

使用choice()将为您提供一组5 个随机选择。请注意,我们使用sys.std.write以避免连续print语句在单词之间放置空格。

例如,从两次运行:

yeahsomethinghelloyeahlalala

somethingyeahsomethinglalalanope

choice()

从非空序列 seq 返回一个随机元素。如果 seq 为空,则引发 IndexError。

当然,在 Python 3.x 中,我们可以使用print代替sys.stdout.write并将其end值设置为''. IE,

print(random.choice(words), end='')
于 2012-06-23T03:26:17.017 回答
1
import random
WORDS = ("Python","Java","C++","Swift","Assembly")
for letter in WORDS:
    position = random.randrange(len(WORDS))
    word = WORDS[position]
    print(word)
于 2014-09-17T03:37:49.443 回答