2017-09-22 3 views
2

Ich habe an diesem Problem für eine Einführung in die Programmierung mit Python-Klasse seit Tagen gearbeitet. Das Ziel besteht darin, ein Programm zu erstellen, das zufällige Filmtitel aus einer Liste benutzerdefinierter Wörter generiert. Die Ausgabe sollte wie folgt aussehen:For-Schleife innerhalb einer Funktion wiederholen 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 

Ausgang:

Willkommen bei Randoplex! Derzeit spielt Filme sind:

Abenteuer Leben Raum

anzeigen Love Story

Wilder Raum Leben

konnte ich zufällig Titel erzeugen, kann aber nicht ohnehin verschiedene Titel zu generieren finden basierend auf die vom Benutzer eingegebene Nummer. Dies ist die nächste, die ich bekommen haben:

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) 

Dies ermöglicht es mir den gleichen randomisierten Titel für den Wert drucken movie_num, die der Benutzer eingibt. Aber ich kann einfach nicht herausfinden, wie man mehrere verschiedene randomisierte Filmtitel erstellt. Ich habe versucht, die range() Funktion auf viele verschiedene Arten zu verwenden, und habe überall im Internet nach Rat gesucht. Ich weiß wirklich nicht, was ich zu diesem Zeitpunkt noch versuchen sollte, jede Hilfe würde sehr geschätzt werden. Es ist wichtig zu erwähnen, dass meine Klasse sehr elementar ist, wir wurden noch nicht mit "While" -Schleifen vertraut gemacht und ich denke nicht, dass ich sie deswegen benutzen darf. Vielen Dank im Voraus.

+0

Normalerweise ist die Verwendung von 'eval()' im Allgemeinen keine gute Idee, als ob die Eingabe falsch ist. Sie erhalten einen 'Fehler'. Es ist besser, wenn der Benutzer die Wörter durch' spaces' und 'split' getrennt eingibt es, oder einfach eine 'for-loop' und' append' an eine Liste bis ein Ende Zeichen ... –

Antwort

0

Funktioniert das, wonach Sie suchen?

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

Sie vergessen die Klammern an der Funktion "print" in Ihrer for-Schleife :) – MushroomMauLa

+0

@MushroomMauLa er ist auf Python 2 – kaza

+1

@bulbus, aber er verwendet Python 3-Syntax vor – MushroomMauLa

0

Ihre Funktionen funktionieren jedoch korrekt in Ihrer for-Schleife, wo Sie die Filmtitel drucken, die Sie vergessen haben, Ihre Variable dem neu erzeugten Filmtitel zuzuweisen. Ihre verschiedenen Titel werden generiert, aber Sie drucken nur den ersten Titel.

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

Dies war sehr hilfreich, danke für das Zeigen, dass o ut! –

+0

Wir freuen uns, Ihnen zu helfen und begrüßen zu Stack Overflow. Wenn diese Antwort oder eine andere Ihr Problem gelöst hat, markieren Sie es als akzeptiert – DobromirM

-1

ein anderer Weg, um ein ähnliches Ergebnis zu erzielen.

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() 

Ausgang:

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

Falls Sie nur 3 Filmnamen immer verbunden werden soll, entfernen Sie für r in einem Bereich (2, len (Filme)): Schleife und hard r bis 3

+0

Warum würden Sie die interaktiven Arbeitseingaben entfernen und sie hart codieren? Wenn überhaupt, sieht das wie ein Schritt zurück aus ... – DobromirM

Verwandte Themen