我正在尝试创建一个纸牌游戏,但我在定义方面遇到了麻烦。特别是,下面的定义应该在变量'下面返回一个洗牌的牌组(还没有套装)。但是,我收到错误:
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]
答案 0 :(得分: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]
两个代码段是等效的。
答案 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])
,您的代码将按预期工作。