2017-03-25 11 views
0

私はランダムな文章を形成するプログラムを書くつもりです。これは、forループに繰り返し渡すことができ、random.choice ()、変数、およびリストです。例は次のようになります。私は電気ショック療法..、私のリストの対象者のを形成する組み合わせの、名詞の動詞のループとリストのために使用するランダムな文ジェネレータを修正するのに助けが必要

list_0 = ["string1", "string2", "string3", "string4"] 
variable_0 = random.choice(list_0) 

list_1 = ["string1", "string2", "string3", "string4"] 
variable_1 = random.choice(list_1) 

list_2 = ["string1", "string2", "string3", "string4"] 
variable_2 = random.choice(list_2) 

した後、私はその後から1個のランダムな選択と同等の変数に渡すリストと述べました。この時点では、プログラムが各リストからランダムな単語を選択し、_0 _1と_2の順に印刷するという考え方を印刷するにはいくつかの方法があります。そのため、文はランダムですが文法的になります。 私はすべての変数をリストアップし、しかし、これは一度に一つの選択を印刷しそう

list_3 = [list_0, list_1, list_2] 
random.choice(list_3) 

のようなものランダム化しようとした、と私は、私が試した、全体のランダムな文章を必要

list_3 = [list_0 + list_1 + list_2] 

これはランダムな文章全体を出力しますが、forループの中に一度出力すると、一度だけ停止します。これは何度も評価するように言われていないためです。例:

sleep関数でも、スクリプトは1回の繰り返しの後で止まります。そのため、最初に 'while True'ループを試してみましたが、これは関数を1回以上印刷するよう強制されましたが、出力は別のランダム文ではなく重複していました。例:私はランダム関数だけに1つのランダムな文を渡して見ることができるものから、立ち往生していますどこ

while True:  
    for line in list_3: 
     try: 
     print(line) 
     if line !='\n': 
      do function 
      sleep(10) 
     else: 
      pass 
     except: 
      #do function 
      sleep(2) 

これは私のforループので、whileループは、ループのために再びそれだけで以前印刷し実行したとき文。私のforループに、新しい反復ごとに以前のものとは異なる文を渡すために何かできることはありますか?私はまだ私は非常に新しい助けを愛するだろう。

+0

list_3には1要素しか含まれていないため、random.choice()は1つ以上の結果を返すことはできません。 – DahliaSR

答えて

1

をここで簡潔なバージョンである:

import random 

words = [["Two","Three", "Four"], 
     ["red","yellow","green"], 
     ["cats","dogs","zebras"], 
     ["jumped.", "danced.", "wrote poetry."]] 

for i in range(5): 
    print(' '.join([random.choice(w) for w in words])) 

典型的出力:

Three yellow cats jumped. 
Three yellow zebras jumped. 
Four red zebras jumped. 
Two green zebras danced. 
Four green dogs wrote poetry. 

注内部リストを変数に代入することなく、リストのリストを直接作成する方法。

sentence = [] 
for w in words: 
    sentence.append(random.choice(w)) 

最後に、' '.join()の使用は取るための良い方法です:

コードを理解する鍵は、これは本質的のようなもののためのシンタックスシュガーでリスト内包

[random.choice(w) for w in words] 

を理解しています単語のリストとそれらの間のスペースを一緒に結合する。

+0

これは本当に物事を簡素化する多くの人に感謝、私のコードは私に大きな頭痛を与えていた! – spitnik11

-1

whileループの外側上部のコードでこれを試しはコメントまたは削除

while True: 
    list_0 = ["string1", "string2", "string3", "string4",] 
    variable_0 = random.choice(list) 

    list_1 = ["string1", "string2", "string3", "string4",] 
    variable_1 = random.choice(list) 

    list_2 = ["string1", "string2", "string3", "string4",] 
    variable_2 = random.choice(list) 
    list_3 = [list_0 + list_1 + list_2] 
    for line in list_3: 
     try: 
     print(line) 
     if line !='\n': 
      do function 
      sleep(10) 
     else: 
      pass 
     except: 
      #do function 
      sleep(2) 
+0

私はwhileループで私のコード全体をラップする必要がありますか?私はちょっと混乱していると思います – spitnik11

関連する問題