【问题标题】:Python: Problems calling a function which is inside another called functionPython:调用另一个被调用函数内部的函数时出现问题
【发布时间】:2019-04-09 02:21:31
【问题描述】:

我正在尝试调用包含在另一个函数中的函数。我知道每个内部函数都是单独工作的,因为我在将它们组合到 rollDice() 之前对它们进行了测试。

当我尝试运行代码时,它始终告诉我基本上每个变量(d20d10 等)都是未定义的,即使我正在运行 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

【问题讨论】:

  • 你没有包括你对d6()等的调用,所以我们无法推断发生了什么。此外,我们需要查看错误消息的确切文本。并且作为样式注释,您不需要将roll6等定义为参数。

标签: python function


【解决方案1】:

通过执行外部函数,您不会执行任何内部函数。无论如何,它们的变量超出了范围。

如果你真的想在函数中使用函数(顺便说一句,在这种情况下这是不必要的),你可以通过使用闭包使你的代码更简洁。此外,只需在顶部导入一次包就更容易了:

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)

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2019-03-13
    • 2017-09-22
    • 2023-02-08
    相关资源
    最近更新 更多