【问题标题】:Why do I keep getting the name not defined error?为什么我不断收到名称未定义错误?
【发布时间】:2016-02-26 10:04:11
【问题描述】:
def RollTwoDice()
     die1 = random.randint(1,6)
     die2 = random.randint(1,6)

然后,这里有根据掷出的数字显示骰子图片的代码

然后:

print("Press \'enter\' to roll two dice
input()
myRoll=RollTwoDice
total=die1+die2
print("You rolled a total of",total)

现在骰子的显示效果很好,唯一的问题是最后一行代码。我收到此错误;

     total = die1+die2

     NameError: name 'die1' is not defined

当我运行 myRoll=RollTwoDice 行时,我认为 die1 和 die2 正在被定义?我做错了什么?

【问题讨论】:

  • 花点时间将您的示例组合成一个工作脚本。现在你有多个错误表明你没有努力为我们发布真实的东西。目标是我们可以剪切/粘贴并自己尝试的东西。

标签: python


【解决方案1】:
  • RollTwoDice() 不返回任何内容。在函数末尾添加一行 return die1, die2

  • 你需要在函数外定义die1die2,而且你需要调用它,而不是随便提。将myRoll = RollTwoDice 更改为die1, die2 = RollTwoDice()

【讨论】:

    【解决方案2】:

    变量die1die2是函数RollTwoDice的局部变量。只需添加 return 语句。您还需要使用括号来调用该函数。您不需要在双引号内转义单引号。

    import random
    def RollTwoDice():
      die1 = random.randint(1,6)
      die2 = random.randint(1,6)
      return die1, die2
    print("Press 'enter' to roll two dice")
    input()
    die1, die2 = RollTwoDice()
    total = die1 + die2
    print("You rolled a total of",total)
    

    这应该在 python3 中工作。

    搜索“变量作用域”或“局部作用域”以获得解释。

    【讨论】:

      【解决方案3】:

      die1die2 是局部变量,它们的作用域只是在函数RollTwoDice

      【讨论】:

        【解决方案4】:

        忽略您帖子中的语法错误,这里的问题是您在该函数的范围内定义 die1。 只需在全局范围内定义 die1 和 die2,程序就会运行!

        【讨论】:

          【解决方案5】:

          Die1 和 die2 需要全局声明,否则函数 rolltwodice 应该返回单个骰子的列表 返回 die1, die2

          【讨论】:

            猜你喜欢
            • 2021-03-10
            • 2016-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-28
            • 2012-01-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多