【问题标题】:Run a function multiple times and then return all the different results?多次运行一个函数,然后返回所有不同的结果?
【发布时间】:2019-05-03 12:14:10
【问题描述】:

这是我的代码:

import random
def name_generator():
    for x in range (0, 11):
        color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
        animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
        number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]

        randomColor = random.randrange(0, len(color))
        randomAnimal = random.randrange(0, len(animal))
        randomNumber = random.randrange(0, len(number))

        name = "Username: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]
        return name

我正在尝试生成十个不同的名称,然后打印所有不同的名称。现在,当我运行该函数时,我只会返回一个名称,而不是十个不同的名称。

for x in range (0, 11)

据我所知,这应该执行十次?

这是我现在得到的结果:

name_generator()
'Username: PurpleLeopard13'

但我想得到:

name_generator()
'Username: PurpleLeopard13'
'Username: GreenDog10'
'Username: PurpleCat1'...(10 times)

谢谢!

【问题讨论】:

  • 你调用你的函数name_generator...你真的想创建一个可以循环的生成器函数吗?如果是这样,您可能想要yield 而不是return - 或者作为答案意义并调用它10次......
  • 附带说明 - 用于选择单个元素 - 而不是 random.randrange(0, len(whatever)) 并使用它来索引到 whatever... 你可以只使用 random_color = random.choice(color) 然后 random_color 将是列表中的一种颜色...更清晰、更简单。
  • 我同意@JonClements。要么把它变成一个实际的生成器并产生结果,要么制作一个内部列表,将结果附加到循环中的列表中,然后返回最终列表。这取决于您的需求。

标签: python function loops names


【解决方案1】:

问题是目前您已将 return 语句放在 for 循环中。所以一旦你生成了名字,你就返回并离开这个函数。

您需要稍作修改:将函数调用移到 for 循环中。或者,请遵循以下 cmets 中 @Jon Clements 的建议。

import random
def name_generator():
        color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
        animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
        number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]

        randomColor = random.randrange(0, len(color))
        randomAnimal = random.randrange(0, len(animal))
        randomNumber = random.randrange(0, len(number))

        name = "Username: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]
        return name

for x in range (0, 11):    
    print (name_generator())

# Username: PinkMouse3
# Username: GreenCat8
# Username: GreenMoose2
# Username: BlackTiger14
# Username: BlackSnake11
# Username: PurpleMoose13
# Username: GreenMouse2
# Username: RedBear5
# Username: BlueBear2
# Username: WhiteDog2
# Username: WhiteTiger3

【讨论】:

  • 那个或者他们想yield name 然后for name in name_generator(): print(name)... 或者print(*name_generator(), sep='\n') 或者其他什么......
  • @JonClements:这里的函数名称不明确。但我想我试图解释他/她的代码出了什么问题。我希望 OP 从这个答案中学到一些东西
【解决方案2】:

试试下面的代码。而不是在 for 循环中返回尝试使用打印。您的返回会阻止循环进一步交互。

import random
def name_generator():
    for x in range (0, 11):
        color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
        animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
        number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]

        randomColor = random.randrange(0, len(color))
        randomAnimal = random.randrange(0, len(animal))
        randomNumber = random.randrange(0, len(number))

        name = "Username: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]

        print(name)

name_generator()

【讨论】:

    【解决方案3】:

    作为使用生成器的附加 riff,使您的生成器能够提供 任意 个名称。用户可以决定要检索多少个名称。

    from random import choice
    from itertools import islice
    
    def name_generator():
        colors = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
        animals = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
        numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"]
    
        while True:
            yield "Username: {}{}{}".format(
               choice(colors),
               choice(animals),
               choice(numbers)
            )
    
    
    names = list(islice(name_generator(), 10))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      相关资源
      最近更新 更多