Python: проблемы с вызовом функции, которая находится внутри другой вызываемой функции - PullRequest
2 голосов
/ 09 апреля 2019

Я пытаюсь вызвать функцию, которая содержится внутри другой функции.Я знаю, что каждая из внутренних функций работает индивидуально, потому что я тестировал их до их объединения в rollDice().

Когда я пытаюсь запустить код, он последовательно говорит мне, что в основном каждая переменная (d20,d10 и т. Д.) Не определено, несмотря на то, что у меня запущена функция rollDice().

Как я могу получить свою внутреннюю функцию (d6(roll6)) для вывода значения, которое ей было присвоено после rollDice(roll) функция?

def diceRoll(roll):

    def d20(roll20):
        import random

        roll20 = random.randint(1,20)

        print("The roll is ", roll20)

        return roll20

    def d12(roll12):
        import random

        roll12 = random.randint(1,12)

        print("The roll is ", roll12)

        return roll12


    def d6(roll6):
        import random

        roll6 = random.randint(1,6)

        print("The roll is ", roll6)

        return roll6

####### example of other part of code

def generateDungeon():
    diceRoll(roll)

    numberOfRooms = roll6

    print("The roll was: ", roll6)

    if numberOfRooms > 1:
        print("There are ", numberOfRooms, "rooms in this dungeon.")

    else:
        print("There is only 1 room in this dungeon.")

    return numberOfRooms

1 Ответ

3 голосов
/ 09 апреля 2019

Выполняя внешнюю функцию, вы не выполняете ни одну из внутренних функций.Во всяком случае, их переменные находятся вне области видимости.

Если вы действительно хотите использовать функцию в функции (кстати, в этом нет необходимости), вы могли бы сделать свой код намного более лаконичным, используязакрытие.Кроме того, проще импортировать ваши пакеты один раз вверху:

import random

def diceRoll(roll):
    def helper():
        r = random.randint(1, roll)
        print("The roll is", r)
        return r
    return helper

Затем, чтобы использовать это, вызовите возвращаемое значение diceRoll:

numberOfRooms = diceRoll(6)()

Примечаниечто все это можно сделать так:

def diceRoll(roll):
    r = random.randint(1, roll)
    print("The roll is", r)
    return r

И называется так:

numberOfRooms = diceRoll(6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...