2017-09-22 13 views
2

私はこの問題を、Pythonを使ったIntro to Programming for Pythonクラスのために数日間作業してきました。目標は、ユーザーが入力した単語のリストからランダムなムービータイトルを生成するプログラムを作成することです。出力は次のようになります。関数内のforループを繰り返すPython 3

Please enter a list of words: ["Space", "Show", "Adventure", "Story", 
"Love", "Wild", "Life"] 

Please enter a number of movies you'd like to generate: 3 

出力:Randoplexへ

ようこそ!現在上映される映画です:

アドベンチャー生活空間

ショーラブストーリー

ワイルドスペースライフ

私は、ランダムなタイトルを生成することができたが、ベースの異なるタイトルを生成するために、とにかく見つけることができませんユーザーが入力した番号を入力します。

import random 

def random_movies(word_list = eval(input("Please enter a list of words:"))): 

    for word in word_list: 
     titles = ' '.join(random.choice(word_list) for i in range(3)) 
    return titles 

def repeat(): 

    titles = random_movies() 
    movie_num = eval(input("Please enter the number of movies you'd like to generate:")) 

for i in range(movie_num): 
    random_movies() 
    print(titles) 

titles1 = repeat() 
print("Welcome to Randoplex! Currently playing movies are:") 
print() 
print(titles1) 

これは私は、ユーザーが入力した値movie_numに同じランダム化されたタイトルを印刷することができます:これは私が得ている最も近いです。しかし、私はちょうど複数の異なるランダム映画のタイトルを作成する方法を見つけることができません。私は多くの異なる方法でrange()機能を使用しようとしており、アドバイスのためにインターネット上をすべて見てきました。私は本当にこの時点で他に何を試していいのかわかりません。どんな助けでも大いに感謝します。私のクラスは非常に初歩的なものであることは言うまでもなく、私たちは "while"ループにまだ紹介されておらず、そのためにそれらを使用することは許されていないと思います。前もって感謝します。

+0

通常は 'eval()'を使用するのは、入力が間違っているように一般的には良い考えではなく、 'error'を得るでしょう、ユーザに' spaces'と 'split'で区切られた単語を入力させる方が良いでしょう。それは、最後の文字までリストの 'for-loop'と' append'を実行するだけです... –

答えて

0

これはお探しのものですか?

import random 

def random_movies(word_list): 
    for word in word_list: 
     titles = ' '.join(random.choice(word_list.split()) for i in range(3)) 
     return titles 

word_list = input("Please enter a list of words:") 
movie_num = int(input("Please enter the number of movies you'd like to generate:")) 

print("Welcome to Randoplex! Currently playing movies are:") 

for i in range(movie_num): 
    print(random_movies(word_list)) 
+1

forループの 'print'関数で括弧を忘れてしまいました:) – MushroomMauLa

+0

@MushroomMauLa彼はPython 2にあります – kaza

+1

@bulbusでも、前に – MushroomMauLa

0

機能は正常に動作しますが、ムービータイトルを印刷するforループでは、変数を新しく生成されたムービータイトルに再割り当てすることを忘れてしまいました。異なるタイトルが生成されますが、最初のタイトルのみが印刷されます。

import random 

def random_movie(word_list = eval(input("Please enter a list of words:"))): 
    for word in word_list: 
     title = ' '.join(random.choice(word_list) for i in range(3)) 
     return title 

def repeat(): 
    movie_num = eval(input("Please enter the number of movies you'd like to generate:")) 
    for i in range(movie_num): 
     title = random_movie() 
     print(title) 

print("Welcome to Randoplex! Currently playing movies are: ") 
print() 
repeat() 
+0

これは非常に役に立ちました。あなた! –

+0

お手伝いいただきありがとうございます。また、スタックオーバーフローを歓迎します。この答えや他の誰かがあなたの問題を解決した場合は、それを受け入れたものとしてマークしてください。 – DobromirM

-1

他の方法でも同様の結果が得られます。

import itertools 
import random 
noofmovies = 3 
movies = ["Space", "Show", "Adventure", "Story", "Love", "Wild", "Life"] 
newmovies = [] 
def random_movie(movies): 

    for r in range(2,len(movies)): 
     for elem in itertools.combinations(movies, r): 
      newmovies.append(" ".join(elem)) 


def repeat(): 
    random.shuffle(newmovies) 
    for elem in newmovies[0:noofmovies]: 
     print (elem) 


print("Welcome to Randoplex! Currently playing movies are: ") 
random_movie(movies) 
repeat() 

出力:あなたが唯一の3映画の名は常に参加させたい場合には

Show Adventure Story Wild Life 
Story Wild Life 
Show Adventure Story Love Wild Life 

、範囲内のR(2、LEN(ムービー))のために削除:3

にループと打ちR
+0

作業中の対話型入力を削除してハードコードするのはなぜですか?これが一歩後退のように見える場合... – DobromirM

関連する問題