在函数内重复 for 循环 Python 3
Repeating for loop within a function Python 3
几天来,我一直在为 Python class 的编程介绍解决这个问题。目标是创建一个程序,从 user-inputed 个单词的列表中生成随机电影标题。输出应如下所示:
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
输出:
Welcome to Randoplex! Currently playing movies are:
Adventure Life Space
Show Love Story
Wild Space Life
我已经能够生成随机标题,但无论如何找不到根据 user-inputed 数字生成不同的标题。这是我得到的最接近的:
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()
函数,并在 Internet 上到处寻找建议。我真的不知道在这一点上还能尝试什么,任何帮助将不胜感激。值得一提的是,我的 class 非常初级,我们还没有被介绍过“while”循环,因此我不认为我被允许使用它们。提前谢谢你。
您的函数工作正常,但是在打印电影片名的 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()
这是否符合您的要求?
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))
实现类似结果的另一种方法。
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()
输出:
Show Adventure Story Wild Life
Story Wild Life
Show Adventure Story Love Wild Life
如果您只想始终连接 3 个电影名称,请删除 for r in range(2,len(movies)): loop 并将 r 硬编码为 3
几天来,我一直在为 Python class 的编程介绍解决这个问题。目标是创建一个程序,从 user-inputed 个单词的列表中生成随机电影标题。输出应如下所示:
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
输出:
Welcome to Randoplex! Currently playing movies are:
Adventure Life Space
Show Love Story
Wild Space Life
我已经能够生成随机标题,但无论如何找不到根据 user-inputed 数字生成不同的标题。这是我得到的最接近的:
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()
函数,并在 Internet 上到处寻找建议。我真的不知道在这一点上还能尝试什么,任何帮助将不胜感激。值得一提的是,我的 class 非常初级,我们还没有被介绍过“while”循环,因此我不认为我被允许使用它们。提前谢谢你。
您的函数工作正常,但是在打印电影片名的 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()
这是否符合您的要求?
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))
实现类似结果的另一种方法。
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()
输出:
Show Adventure Story Wild Life
Story Wild Life
Show Adventure Story Love Wild Life
如果您只想始终连接 3 个电影名称,请删除 for r in range(2,len(movies)): loop 并将 r 硬编码为 3