【问题标题】:Python- Code not retaining variable assigned in definitionPython-代码不保留定义中分配的变量
【发布时间】:2016-12-13 17:54:56
【问题描述】:

我正在尝试创建一个纸牌游戏,但我在定义方面遇到了问题。特别是,下面的定义应该在变量“deck”下返回一个洗牌的牌组(还没有花色)。但是,我收到错误:

NameError: 'name 'deck' 未定义。

我可以通过不使用定义来避免这种情况,但是,我希望在定义中包含尽可能多的内容,以便从长远来看更容易。提前致谢。

import random
playerhand=[]
dealerhand=[]

def shuffle():
    numbers = []
    faces = ['T', 'J', 'Q', 'K', 'A']
    for i in range(8):
        numb = str(i + 2)
        numbers.append(numb)
    values=numbers+faces
    deck=4*values
    random.shuffle(deck)
    return deck

print deck[0]

【问题讨论】:

  • 这不是返回值的工作方式。你需要调用你的函数shuffle,它将返回deck 持有的值。 deck 仅在函数内可用。

标签: python definition


【解决方案1】:

两点:

  1. 您正在定义一个函数,但没有调用它。如果你不调用一个函数,它里面的代码就不会被执行。

  2. 名为deck 的变量是函数的局部变量,在函数返回时消失。

这是同时解决这两个问题的一种方法:

def shuffle():
    ...
    deck = ...
    ...
    return deck

deck = shuffle()
print deck[0]

为了清楚起见,这里有两个变量恰好都称为deck,不应相互混淆。为了清楚区分,下面我给它们起了不同的名字:

def shuffle():
    ...
    local_deck = ...
    ...
    return local_deck

global_deck = shuffle()
print global_deck[0]

两个代码sn-ps是等价的。

【讨论】:

    【解决方案2】:

    “deck”变量在您的函数中本地定义。所以你不能在函数定义之外使用它。由于您的函数返回甲板,使用

    print shuffle()[0] # this is outside of the function scope
    

    改为

    【讨论】:

      【解决方案3】:

      deck 仅在shuffle 范围内。要访问 shuffle 返回的值,请调用 shuffle,然后使用它的返回值:

      import random
      playerhand=[]
      dealerhand=[]
      
      def shuffle():
          numbers = []
          faces = ['T', 'J', 'Q', 'K', 'A']
          for i in range(8):
              numb = str(i + 2)
              numbers.append(numb)
          values=numbers+faces
          deck=4*values
          random.shuffle(deck)
          return deck
      
      print shuffle()
      

      如果你犯了这个错误,我认为你进步太快了。阅读有关变量范围、调用函数和return 语句的更多信息。在这里涵盖所有内容将太长。

      【讨论】:

        【解决方案4】:

        当您 return 来自函数的值时,它会将 该函数的值设置为您返回的值

        在本例中,foo() 等于 4,因此将打印 8

        def foo()
            return 4
        
        print(foo() * 2)
        

        在您的示例中,您需要将最后一行更改为print(shuffle()[0]),您的代码将按预期工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-14
          • 2012-10-09
          • 2012-02-12
          • 1970-01-01
          • 2013-12-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多