2012-06-23 219 views
2

我试图创建一个字符串,其中包含一组不同单词,我将其包含在一个列表中,但是,我使用的代码仅随机使用一个单词,而不是打印每个单词的不同单词。生成随机单词

这是我的代码:

import random 

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

一个例子输出为:

hellohellohellohellohello

一个例子预期输出是:

appleyeahhellonopesomething

谁能告诉我正在做什么NG?

+1

“倍增” 的字符串将多次打印字符串。例如,'print'='* 30'会打印一条30“=”的线,这就是为什么你会得到5次“hello” – Levon

回答

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 
+0

是否将_ _称为匿名变量? (我知道我们不需要变量本身的价值,它实际上只是一个未命名的占位符),所以我想知道正确的术语。 – Levon

+0

@Levon我不知道你刚刚对'_'所说的话。 – jamylak

+0

好吧,我只是想弄清楚这个“官方”的名字:) – Levon

3

你是不是叫random.choice(words) 5次,你得到的random.choice(words)输出,然后在5次相乘。对于字符串,它只是重复字符串。

"abc" * 3会给你"abcabcabc"

所以根据您的随机选择的第一个字,它只是被重复5次。

2

“乘”字符串将多次打印该字符串。例如,print '=' * 30会打印一行30 "=",这就是为什么你得到5次"hello" - 它重复5次随机选择的单词。使用choice()会给你一组5个随机选择。请注意,我们使用sys.std.write来避免连续的print语句将放在单词之间的空格。

例如,从两个运行:

yeahsomethinghelloyeahlalala 

somethingyeahsomethinglalalanope 

choice()

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

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

print(random.choice(words), end='') 
5

如果你不想重复从最初的名单的话做,那么你可以使用sample

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

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

结果:

>>> word 
'yeahhellosomethingapplenope' 
1
import random 
WORDS = ("Python","Java","C++","Swift","Assembly") 
for letter in WORDS: 
    position = random.randrange(len(WORDS)) 
    word = WORDS[position] 
    print(word)