2

リストに含まれるさまざまな単語を一定量含む文字列を作成しようとしていますが、使用するコードでは、印刷される単語ごとに異なる単語ではなく、ランダムに 1 つの単語のみを使用します。

これは私のコードです:

import random

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

出力例は次のようになります。

hellohellohellohellohello

予想される出力の例は次のようになります。

appleyeahhellonopesomething

誰が私が間違っているのか教えてもらえますか?

4

5 に答える 5

7

random.choice(words) * 5は 1 回だけ実行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

5回呼び出しrandom.choice(words)ているのではなく、出力を取得しrandom.choice(words)てから5回掛けています。文字列の場合、文字列を繰り返すだけです。

"abc" * 3あなたに与えるだろう"abcabcabc"

したがって、最初にランダムに選択した単語に応じて、5 回繰り返されます。

于 2012-06-23T03:24:00.947 に答える
2

文字列を「乗算」すると、文字列が複数回出力されます。たとえば、print '=' * 3030 の行を出力します。これ"="が 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ステートメントが単語の間に入れるスペースを避けるために使用することに注意してください。

たとえば、2 回の実行から:

yeahsomethinghelloyeahlalala

somethingyeahsomethinglalalanope

choice()

空でないシーケンス seq からランダムな要素を返します。seq が空の場合、IndexError が発生します。

もちろん Python 3.x では、print代わりに を使用しsys.stdout.writeて、そのend値を に設定できます''。すなわち、

print(random.choice(words), end='')
于 2012-06-23T03:26:17.017 に答える