Python-代码不保留定义

时间:2016-12-13 17:54:57

标签: python definition

我正在尝试创建一个纸牌游戏,但我在定义方面遇到了麻烦。特别是,下面的定义应该在变量'下面返回一个洗牌的牌组(还没有套装)。但是,我收到错误:

  

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]

4 个答案:

答案 0 :(得分:2)

两点:

  1. 您正在定义一个函数,但没有调用它。如果您没有调用某个函数,则其中的代码不会被执行。

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

  3. 这是一次解决这两个问题的方法之一:

    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]
    

    两个代码段是等效的。

答案 1 :(得分:0)

'套牌'变量在函数中本地定义。因此,您无法在函数定义之外使用它。由于您的函数返回了deck,请使用

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

代替

答案 2 :(得分:0)

deck仅在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语句的更多信息。覆盖所有这些将是太长的时间。

答案 3 :(得分:0)

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

即。在这个例子中,foo()等于4,因此将打印8个

def foo()
    return 4

print(foo() * 2)

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