Python- 代码不保留定义中赋值的变量

Python- Code not retaining variable assigned in definition

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

NameError: 'name 'deck' is not defined.

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

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]

'deck' 变量是在您的函数中本地定义的。所以你不能在函数定义之外使用它。由于你的功能 returns 甲板,使用

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

改为

deck 仅在 shuffle 范围内。要访问随机播放 returns 的值,请调用 shuffle,然后使用它的 return 值:

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 语句的更多信息。在这里涵盖所有内容太长了。

两点:

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

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

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

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]

这两个代码片段是等价的。

当您return一个函数的值时,它会将那个函数的值设置为您返回的值

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

def foo()
    return 4

print(foo() * 2)

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