Запустить функцию несколько раз, а затем вернуть все разные результаты? - PullRequest
0 голосов
/ 03 мая 2019

Вот мой код:

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)

Спасибо!

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Проблема в том, что в настоящее время вы поместили оператор return в цикл for.Поэтому, как только вы сгенерируете имя, вы вернетесь и выйдете из функции.

Вам понадобится небольшое изменение: переместите вызов функции в цикл for.Кроме того, следуйте предложению @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
0 голосов
/ 03 мая 2019

В качестве дополнительного рифа на использование генератора, сделайте ваш генератор способным обеспечить произвольное количество имен. Пользователь может решить, сколько имен тоже получить.

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))
0 голосов
/ 03 мая 2019

Попробуйте приведенный ниже код. Вместо возврата в цикл попытайтесь использовать print. Ваше возвращение препятствует дальнейшему изменению цикла.

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