【问题标题】:Repeating for loop within a function Python 3在函数 Python 3 中重复 for 循环
【发布时间】:2018-03-04 07:26:44
【问题描述】:

我这几天一直在为 Python 编程入门课程研究这个问题。目标是创建一个程序,从用户输入的单词列表中生成随机电影标题。输出应如下所示:

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”循环,因此我认为我不能使用它们。提前谢谢你。

【问题讨论】:

  • 通常使用eval()不是一个好主意,如果输入错误,你会得到一个error,最好让用户输入由spaces分隔的单词和split 它,或者只是对列表执行for-loopappend 直到一个结束字符...

标签: python for-loop random repeat


【解决方案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()

输出:

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

如果您只希望始终加入 3 个电影名称,请删除 for r in range(2,len(movies)): loop and hardcode r to 3

【讨论】:

  • 您为什么要删除有效的交互式输入并对其进行硬编码。如果这看起来像是退后一步......
【解决方案2】:

您的函数可以正常工作,但是在您打印电影标题的 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()

【讨论】:

  • 很高兴为您提供帮助,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受
【解决方案3】:

这是否符合您的要求?

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

【讨论】:

  • 您忘记了 for 循环中 print 函数的括号 :)
  • @MushroomMauLa 他在 python 2 上
  • @bulbus 但他之前使用 python 3 语法
  • @bulbus,是的。我已将 raw_input 改回 2 -> 3 的输入,但忘了打印
  • 最后的打印语句现在有括号 3。